Tool calling backend: serverless-эндпоинты для LLM function calling
OpenAI function calling, Anthropic tool use, Gemini tools — всё вызывает HTTP-эндпоинты. Inquir даёт каждому tool route отдельный контейнер, API-ключ и секреты вне промпта.
Last updated: 2026-04-20
Answer first
Direct answer
Tool calling backend: serverless-эндпоинты для LLM function calling. Каждая tool function — отдельный HTTP-обработчик с API-ключом. Оркестратор (OpenAI, Anthropic) вызывает URL со структурированным JSON.
When it fits
- Tool работает с секретными данными или вызывает платные API
- Нужна изоляция зависимостей и атрибутируемые логи
Tradeoffs
- Все tools в одном процессе — один баг в зависимости ломает все инструменты. Rollback затрагивает весь сервис.
- Без изоляции контейнеров memory leak одного tool влияет на других.
- Secrets in environment variables shared across all tools: rotating one breaks everything.
Нагрузка и где ломается
Где хранить логику tool calls
Если tool вызывает базу или внешний API, логика не должна жить на стороне клиента или в промпте — секреты окажутся в браузере.
Один монолитный сервис для всех tool functions — рискованный деплой и нечитаемые логи при инциденте.
Компромиссы
Почему монолит под function calling не масштабируется
Все tools в одном процессе — один баг в зависимости ломает все инструменты. Rollback затрагивает весь сервис.
Без изоляции контейнеров memory leak одного tool влияет на других.
Secrets in environment variables shared across all tools: rotating one breaks everything.
Как помогает Inquir
Serverless-архитектура для function calling
Каждая tool function — отдельный HTTP-обработчик с API-ключом. Оркестратор (OpenAI, Anthropic) вызывает URL со структурированным JSON.
Секреты — в переменных окружения. Тёплый пул убирает cold start при частых tool-loops. Пайплайн продолжает работу, если tool занимает больше секунды.
Что получаете
Что нужно надёжному tool calling backend
Структурированный JSON ответ
Стабильный контракт ответа — оркестратор не ломается при эволюции схемы.
Auth перед хендлером
API-ключ на маршруте — инструмент не получает неаутентифицированный вызов.
Async handoff
Долгий tool: вернуть `{ jobId }`, оркестратор опрашивает — или настроить горячий контейнер.
Observability
Каждый tool-вызов — строка в истории с телом запроса и ответом. Инцидент → нашёл причину за минуту.
Что делать дальше
Как добавить tool backend к LLM
Описать tool schema
JSON Schema в system prompt; каждый инструмент — URL шлюза Inquir + маршрут.
Написать handler
Получить структурированный JSON из `event.body`, вызвать upstream, вернуть JSON.
Настроить auth и latency
API-ключ на маршруте, тёплый пул если tool вызывается часто.
Пример кода
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 }) }; }
Когда подходит
Когда нужен отдельный tool calling backend
Когда это уместно
- Tool работает с секретными данными или вызывает платные API
- Нужна изоляция зависимостей и атрибутируемые логи
Когда лучше не трогать
- Tool только форматирует строку без side-effects
FAQ
Вопросы и ответы
Как передать tool URL в OpenAI?
В определении функции: `{ "type": "function", "function": { "name": "...", "url": "https://gateway.inquir.org/..." } }` — вместе с JSON Schema параметров.
Поддерживается параллельный tool use?
Да. Каждый параллельный вызов — отдельный HTTP-запрос к своему маршруту; Inquir масштабирует независимо.