Inquir Compute logoInquir Compute
Паттерн · Inquir Compute

Бэкенд вызова инструментов (function calling): изолированные HTTP-обработчики для LLM

Модели OpenAI, Anthropic и Google вызывают обычные HTTP-эндпоинты. В Inquir у каждого маршрута инструмента — свой контейнер, API-ключ и секреты вне промпта.

Обновлено: 2026-04-20

Суть ответа

Бэкенд вызова инструментов (function calling): изолированные HTTP-обработчики для LLM. Каждая функция инструмента — отдельный HTTP-обработчик с API-ключом. Оркестратор (OpenAI, Anthropic и др.) вызывает URL со структурированным JSON.

Когда подходит и когда нет

  • Инструмент работает с секретными данными или вызывает платные API
  • Нужна изоляция зависимостей и логи с привязкой к конкретному инструменту

На что обратить внимание

  • Все инструменты в одном процессе — один баг в зависимости ломает всё сразу. Откат затрагивает весь сервис.
  • Без изоляции контейнеров утечка памяти в одном инструменте бьёт по остальным.
  • Secrets in environment variables shared across all tools: rotating one breaks everything.

Где безопаснее держать реализацию вызова инструментов (function calling): не в клиенте и не в тексте промпта

Если инструмент ходит в базу или внешний API, логика не должна жить на стороне клиента или в промпте — секреты окажутся в браузере.

Один монолитный сервис для всех функций инструментов — рискованный деплой и нечитаемые логи при инциденте.

Почему монолит под function calling не масштабируется

Все инструменты в одном процессе — один баг в зависимости ломает всё сразу. Откат затрагивает весь сервис.

Без изоляции контейнеров утечка памяти в одном инструменте бьёт по остальным.

Secrets in environment variables shared across all tools: rotating one breaks everything.

Изолированная serverless-модель для вызова функций моделью

Каждая функция инструмента — отдельный HTTP-обработчик с API-ключом. Оркестратор (OpenAI, Anthropic и др.) вызывает URL со структурированным JSON.

Секреты — в переменных окружения. Тёплый пул смягчает холодный старт при частых циклах вызова инструментов. Пайплайн продолжит работу, если один вызов занимает больше секунды.

Что нужно надёжному бэкенду вызова инструментов

Структурированный JSON в ответе

Стабильный контракт ответа — оркестратор не ломается при эволюции схемы.

Проверка доступа до обработчика

API-ключ на маршруте — инструмент не получает неаутентифицированный вызов.

Передача в фон

Долгий инструмент: сразу вернуть `{ jobId }`, оркестратор опрашивает статус — либо включить тёплый контейнер.

Наблюдаемость

Каждый вызов инструмента — запись в истории с телом запроса и ответом; при инциденте проще найти причину.

Как подключить бэкенд инструментов к LLM

1

Описать схему инструмента

JSON Schema в системном промпте; у каждого инструмента — URL шлюза Inquir и маршрут.

2

Написать обработчик

Разобрать структурированный JSON из `event.body`, вызвать внешний сервис, вернуть JSON.

3

Настроить ключ и задержку

API-ключ на маршруте; при частых вызовах — тёплый пул.

Tool calling flow: schema to handler

The model sees a function definition; your orchestrator maps it to a gateway route; the gateway enforces auth; the handler runs in isolation.

tool-definition.json (passed to LLM)
{
  "type": "function",
  "function": {
    "name": "search_customer",
    "description": "Look up a customer by ID or email",
    "parameters": {
      "type": "object",
      "properties": {
        "query": { "type": "string", "description": "Customer ID or email" }
      },
      "required": ["query"]
    }
  }
}
tools/search-customer.mjs (gateway function)
export async function handler(event) {
  // Auth enforced at gateway — API key checked before this code runs
  const { query } = JSON.parse(event.body || '{}');
  if (!query) return { statusCode: 400, body: JSON.stringify({ error: 'query required' }) };
  const results = await db.customers.search(query); // DB_URL from workspace secrets
  return { statusCode: 200, body: JSON.stringify({ customers: results }) };
}

Когда нужен отдельный бэкенд под вызов инструментов

Когда это уместно

  • Инструмент работает с секретными данными или вызывает платные API
  • Нужна изоляция зависимостей и логи с привязкой к конкретному инструменту

Когда лучше не трогать

  • Инструмент только форматирует строку без побочных эффектов

Вопросы и ответы

Как указать URL инструмента в OpenAI?

В определении функции: `{ "type": "function", "function": { "name": "...", "url": "https://gateway.inquir.org/..." } }` — вместе с JSON Schema параметров.

Поддерживается параллельный вызов нескольких инструментов?

Да. Каждый параллельный вызов — отдельный HTTP-запрос к своему маршруту; Inquir масштабирует их независимо.

Inquir Compute logoInquir Compute

Самый простой способ запускать AI-агентов и фоновые задачи без собственной инфраструктуры.

Связаться info@inquir.org

Привет, это команда Inquir Compute. Спроси AI о продукте:

© 2025 Inquir Compute. Все права защищены.