AI agent tools API: аутентифицированные эндпоинты для LLM-инструментов
Каждый инструмент агента — отдельный HTTP-маршрут на шлюзе с API-ключом. Секреты провайдера в переменных окружения функции, изолированный контейнер, тёплый пул для быстрых tool-вызовов.
Last updated: 2026-04-20
Answer first
Direct answer
AI agent tools API: аутентифицированные эндпоинты для LLM-инструментов. Одна функция на инструмент: `/search-customer`, `/create-invoice`, `/check-inventory`. API-ключ на уровне маршрута — без auth-кода внутри хендлера.
When it fits
- Инструмент работает с регулируемыми данными или секретами
- Нужна изоляция зависимостей между инструментами
Tradeoffs
- Если все инструменты в одной функции — зависимости конфликтуют, логи смешиваются, blame impossible.
- Без gateway-аутентификации инструмент открыт любому, кто знает URL.
Нагрузка и где ломается
Почему инструменты агентов нужно изолировать
- Authenticated HTTP endpoints — model cannot call open routes
- Secrets off the model path — API keys never in prompts or context windows
- Isolated execution — one tool failure cannot contaminate another
- Low latency on the warm path — tight tool loops need sub-100ms response
- Observability — trace which tool failed and why, per model call
Один монолитный сервис для всех инструментов смешивает зависимости, секреты и логи. Один деплой ломает все инструменты разом.
Компромиссы
Почему serverless-монолит не подходит для агентов
Если все инструменты в одной функции — зависимости конфликтуют, логи смешиваются, blame impossible.
Без gateway-аутентификации инструмент открыт любому, кто знает URL.
Как помогает Inquir
Как строить tool API на Inquir
Одна функция на инструмент: `/search-customer`, `/create-invoice`, `/check-inventory`. API-ключ на уровне маршрута — без auth-кода внутри хендлера.
Секреты провайдера (OpenAI, Stripe, DB) в переменных окружения функции; ротация без редеплоя. Тёплый пул для tool-loops с tight latency.
Что получаете
Что нужно для AI agent tools API
Одна функция на инструмент
Изолированные зависимости, отдельный деплой, attributable логи.
Gateway auth
API-ключ проверяется до хендлера. Инструмент не получает неаутентифицированный запрос.
Секреты на уровне функции
Разные ключи для разных инструментов; ротация без изменения промптов.
Тёплый пул
Hot containers для инструментов с высокой частотой вызовов в tool loops.
Что делать дальше
Как создать инструмент для AI-агента
Определить контракт
Входные поля, валидация, форма ответа — до написания кода.
Написать handler
Node.js, Python или Go: validate, call upstream, return JSON.
Настроить auth и секреты
API-ключ на маршруте, секреты провайдера в переменных окружения.
Пример кода
Multi-language tool API: lookup (Node.js) + classify (Python)
Same gateway, different runtimes. The model calls both with the same API key; secrets are scoped per function.
export async function handler(event) { // API key verified at gateway — handler assumes authenticated caller const { customerId } = JSON.parse(event.body || '{}'); if (!customerId) return { statusCode: 400, body: JSON.stringify({ error: 'customerId required' }) }; const record = await db.customers.findById(customerId); // DB_URL from workspace secrets if (!record) return { statusCode: 404, body: JSON.stringify({ error: 'not found' }) }; return { statusCode: 200, body: JSON.stringify({ customer: record }) }; }
import json, os from openai import OpenAI client = OpenAI(api_key=os.environ["OPENAI_API_KEY"]) # scoped to this tool only def handler(event, context): body = json.loads(event.get("body") or "{}") text = body.get("text") if not text: return {"statusCode": 400, "body": json.dumps({"error": "text required"})} r = client.chat.completions.create(model="gpt-4o-mini", messages=[{"role": "user", "content": f"Classify intent: {text}"}]) return {"statusCode": 200, "body": json.dumps({"intent": r.choices[0].message.content})}
Когда подходит
Когда нужен отдельный tool endpoint
Когда это уместно
- Инструмент работает с регулируемыми данными или секретами
- Нужна изоляция зависимостей между инструментами
Когда лучше не трогать
- Инструмент только форматирует строку без side-effects — lambda inline достаточно
FAQ
Вопросы и ответы
Как передать tool URL в промпт?
URL шлюза + маршрут: `https://gateway.../tool-name`. API-ключ — в заголовке Authorization, не в промпте.
Как обрабатывать долгие tool-вызовы?
Вернуть `{ jobId }` немедленно; оркестратор опрашивает статус. Либо настроить hot containers для снижения latency.