Бэкенд вызова инструментов (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.
Как Inquir помогает в этом сценарии
Изолированная serverless-модель для вызова функций моделью
Каждая функция инструмента — отдельный HTTP-обработчик с API-ключом. Оркестратор (OpenAI, Anthropic и др.) вызывает URL со структурированным JSON.
Секреты — в переменных окружения. Тёплый пул смягчает холодный старт при частых циклах вызова инструментов. Пайплайн продолжит работу, если один вызов занимает больше секунды.
Что вы получаете на платформе
Что нужно надёжному бэкенду вызова инструментов
Структурированный JSON в ответе
Стабильный контракт ответа — оркестратор не ломается при эволюции схемы.
Проверка доступа до обработчика
API-ключ на маршруте — инструмент не получает неаутентифицированный вызов.
Передача в фон
Долгий инструмент: сразу вернуть `{ jobId }`, оркестратор опрашивает статус — либо включить тёплый контейнер.
Наблюдаемость
Каждый вызов инструмента — запись в истории с телом запроса и ответом; при инциденте проще найти причину.
Что сделать дальше, по шагам
Как подключить бэкенд инструментов к LLM
Описать схему инструмента
JSON Schema в системном промпте; у каждого инструмента — URL шлюза Inquir и маршрут.
Написать обработчик
Разобрать структурированный JSON из `event.body`, вызвать внешний сервис, вернуть JSON.
Настроить ключ и задержку
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.
{ "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"] } } }
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 масштабирует их независимо.