Гайд · TNWS AI
Как настроить tool calling в Fireworks AI и не выполнять неверные аргументы
JSON Schema инструмента, tool_choice, двухшаговый цикл вызова функции и обязательная серверная валидация аргументов на Fireworks AI.
Что именно решаем
Материал отвечает на запрос «как настроить tool calling Fireworks AI». Фактическая часть сверена 12 сентября 2026 года с официальной документацией Fireworks AI. Здесь нет предположений о тарифе, доступности конкретной модели или квоте аккаунта: перед запуском их проверяют в текущем Model Library и своём проекте.
Применимость
Модели Fireworks с заявленной поддержкой Tool Calling. Модель только предлагает имя и аргументы; фактический API-вызов выполняет ваше приложение после авторизации и проверки политики.
Задача считается выполненной не после HTTP 200, а после проверки структуры ответа и контрольного бизнес-условия. Запишите точный model ID, endpoint, SDK, serving mode и параметры генерации. Без этой карточки удачный тест невозможно повторить после обновления модели.
Проверенные параметры
- Инструменты описываются OpenAI-совместимой JSON Schema: name, description и parameters.
tool_choice=autoоставляет решение модели,noneзапрещает инструменты,requiredтребует хотя бы один вызов.- Можно принудительно выбрать конкретную функцию объектом
tool_choice. - Параллельные вызовы поддерживаются не всеми моделями; возможность проверяют в карточке модели.
Не переносите настройки между serverless, batch и on-demand автоматически. Они различаются жизненным циклом, способом масштабирования и смыслом ошибок. Любой пример с <MODEL_ID>, <ACCOUNT_ID> или <SHAPE_NAME> — шаблон: значение берут из своего каталога или фактического вывода firectl, а не угадывают.
Контрольный пример до внедрения
Вход: Фраза Покажи заказ 42 и функция, разрешающая только положительный integer order_id.
Ожидаемый результат: Возвращается tool call get_order с order_id=42; строка, отрицательное число и лишние поля блокируются до бизнес-функции.
Сохраните вход, очищенный JSON-ответ, HTTP-код, request ID, model ID и время выполнения. Ключ авторизации, персональные данные и закрытые документы в артефакт теста не попадают. Если задача связана с качеством модели, отделите технический успех запроса от смыслового PASS: валидный JSON может содержать неверный факт, а быстрый поток — неполный текст.
Настройка по шагам
- Создайте отдельный API-ключ тестового проекта и передайте его через переменную
FIREWORKS_API_KEY. Не вставляйте ключ в Python, браузерный JavaScript, скриншоты и репозиторий. - Откройте актуальную карточку модели и подтвердите нужную возможность: streaming, tools, structured output, batch либо deployment shape. Поддержка одной функции не доказывает поддержку другой.
- Зафиксируйте минимальный тест: один запрос, одна модель, один набор параметров. На первом запуске отключите автоматические retry, чтобы увидеть исходную ошибку.
- Выполните шаблон ниже. Проверяйте не только наличие
choices, но и нужные поля,finish_reason, формат данных и контрольные маркеры. - Добавьте отрицательный тест из раздела ошибок. Сервис должен отказать предсказуемо, а приложение — сохранить безопасную диагностику и не повторять неисправимый запрос.
- Прогоните минимум 20–50 обезличенных примеров реального распределения: короткие и длинные входы, кириллицу, пустые значения, граничные числа и ожидаемые отказы.
- Только после этого включайте retry, concurrency, кэш или масштабирование. Меняйте по одному фактору и сравнивайте с тем же baseline.
Рабочий шаблон
tools=[{'type':'function','function':{'name':'get_order','description':'Получить заказ по ID','parameters':{'type':'object','properties':{'order_id':{'type':'integer','minimum':1}},'required':['order_id'],'additionalProperties':False}}}]
r=client.chat.completions.create(model='accounts/fireworks/models/kimi-k2-instruct-0905',messages=[{'role':'user','content':'Покажи заказ 42'}],tools=tools,tool_choice='required')
# json.loads(arguments), schema validation, ACL и только затем get_order(42)
Команда иллюстрирует проверяемый контракт, а не готовый production-сервис. Добавьте timeout, централизованную маскировку секретов, ограничение размера входа и request ID. Для операций, создающих ресурсы, сначала выводите совместимые варианты и сохраняйте возвращённый resource name.
Готовый промпт для теста
Выполни только одну задачу на входных данных ниже.
Не добавляй факты, которых нет во входе.
Если обязательного значения нет, верни ошибку MISSING_FIELD.
Формат ответа соблюдай буквально и не добавляй Markdown.
Вход: {CONTROL_INPUT}
Ожидаемые контрольные маркеры: {EXPECTED_MARKERS}
Этот промпт полезен как воспроизводимый fixture. Он не заменяет response_format, JSON Schema, серверную валидацию аргументов или проверку прав. Если контракт должен быть строгим, его обеспечивает код, а не обещание модели.
Как проверить результат
- имя в allowlist
- JSON разобран
- схема пройдена
- ACL проверен
- результат инструмента возвращён модели
Для текстовой генерации заведите таблицу case_id | input_hash | model | parameters | expected | actual | pass. Для производительности измеряйте как минимум TTFT, полную latency p50/p95, ошибки и пропускную способность при одинаковой конкуренции. Среднее значение скрывает хвост задержек.
Нагрузочный тест начинайте с одного параллельного запроса и повышайте ступенчато. Длину prompt и max_tokens держите постоянными. Иначе нельзя понять, вызвано ли изменение инфраструктурой или просто другим объёмом работы.
Типичные ошибки и что не делать
- Выполнять JSON-аргументы без схемы и ACL.
- Подставлять секреты в description инструмента.
- Полагаться на parallel tool calls без проверки модели.
Не повторяйте 400, 401, 403 и 404 как временные ошибки: сначала исправьте контракт, ключ, права или resource name. Для 429 и части 5xx используйте ограниченный retry budget, exponential backoff и jitter. Не запускайте бесконечные повторы — они усиливают перегрузку и скрывают реальную доступность.
Не доверяйте ответу модели как команде на оплату, удаление, публикацию или выдачу данных. Tool arguments валидируют, действие авторизуют от имени пользователя, опасные операции требуют идемпотентности и подтверждения. Логи очищают до отправки во внешнюю систему наблюдаемости.
Проверка после изменения модели
Смена model ID, quantization, deployment shape, prompt, schema или SDK — повод повторить весь набор. Сравнивайте долю технически успешных запросов, долю бизнес-PASS, p95 latency и число ручных исправлений. Улучшение только одной метрики не доказывает пользу релиза.
Для A/B используйте одинаковые входы и параметры, случайное стабильное разбиение по case_id и достаточное число повторов. Сохраните дату проверки: возможности и список моделей меняются, поэтому статья сознательно не обещает вечную поддержку любого примера.
FAQ
Достаточно ли получить HTTP 200?
Нет. Нужны проверка полей ответа, формального контракта и ожидаемого результата на контрольных данных.
Можно ли использовать короткое имя модели?
Надёжнее брать полный актуальный resource ID из Fireworks Model Library или вывода CLI.
Где хранить API-ключ?
На backend в переменной окружения или менеджере секретов. Не в браузере и не в исходном коде.
Нужно ли повторять тест после обновления?
Да. Зафиксируйте regression-набор и запускайте его при смене модели, SDK, prompt или инфраструктуры.
Официальный источник
Частые вопросы
Достаточно ли HTTP 200?
Нет, проверьте контракт и контрольный результат.
Можно ли хранить ключ во frontend?
Нет, постоянный ключ остаётся на backend.
Нужен ли полный model ID?
Да, берите актуальный resource ID из каталога.
Нужен ли отрицательный тест?
Да, он проверяет безопасную обработку отказа.
Читайте также
Как настроить autoscaling Fireworks AI и обработать scale-to-zero
min/max replicas, окна масштабирования, load targets, код DEPLOYMENT_SCALING_UP и проверка холодного старта без потери запросов.
Как подключить OpenAI SDK к Fireworks AI и проверить первый ответ
Практический запуск Fireworks через OpenAI Python SDK: правильный base_url, переменная ключа, полный идентификатор модели и контроль ответа.
Как получить строгий JSON по JSON Schema в Fireworks AI
Structured Outputs Fireworks: json_schema вместо json_object, required и additionalProperties, проверка finish_reason и Pydantic-валидация.
Комментарии
Пока тихо. Скажите первое слово