Использование инструментов
Добавьте вызов функций в приложение: опишите инструменты, читайте блоки tool_use, управляйте tool_choice и запускайте параллельные вызовы Anthropic и OpenAI.
Function-calling на Anthropic-нативном эндпоинте. API нормализует tool_choice, чтобы legacy-SDK, шлющие {type:any} или {type:tool}, продолжали работать.
Все модели, характеристики и цены Индекс документации для AI-агентов:https://oneprovider.dev/docs/llms.txt Форма запроса
Объявите инструменты как массив. У каждого — name, descriptionи JSON-Schema input_schema. Модель выдаёт блок tool_use, когда решает вызвать один из них.
{
"model": "claude-sonnet-5-5",
"max_tokens": 1024,
"tools": [
{
"name": "get_weather",
"description": "Return current weather for a city.",
"input_schema": {
"type": "object",
"properties": {
"city": { "type": "string" },
"units": { "type": "string", "enum": ["c", "f"] }
},
"required": ["city"]
}
}
],
"messages": [
{ "role": "user", "content": "What's the weather in Berlin in celsius?" }
]
} Ответ с вызовом инструмента
json{
"id": "msg_01...",
"stop_reason": "tool_use",
"content": [
{ "type": "text", "text": "Let me check that for you." },
{
"type": "tool_use",
"id": "toolu_bdrk_01...",
"name": "get_weather",
"input": { "city": "Berlin", "units": "c" }
}
]
} Продолжение цикла
После выполнения инструмента отправьте результат обратно как user-сообщение с блоком tool_result. Модель либо выдаст ещё один вызов, либо финальный текстовый ответ.
{
"role": "user",
"content": [
{
"type": "tool_result",
"tool_use_id": "toolu_bdrk_01...",
"content": "{\"city\":\"Berlin\",\"temp_c\":18,\"sky\":\"clear\"}"
}
]
} tool_choice — как мы нормализуем
Anthropic принимает четыре формы tool_choice. API OneProvider принимает все четыре от вашего клиента, но две из них передаёт модели в другом виде:
| Клиент шлёт | Модель получает | Почему |
|---|---|---|
{"type":"auto"} (или отсутствует) | без изменений | Модель решает сама — happy path. |
{"type":"none"} | без изменений | Принудительно текстовый ответ. |
{"type":"any"} | {"type":"auto"} + system-подсказка | Принудительный вызов поддерживают не все модели; подсказка говорит модели «ты ДОЛЖЕН вызвать инструмент». |
{"type":"tool","name":"X"} | {"type":"auto"} + system-подсказка | То же; подсказка указывает конкретное имя инструмента. |
tool_choice:any и tool_choice:tool на части моделей падали бы с ошибкой. С заменой на auto + сильную system-подсказку в наших тестах проходит ~95% таких запросов. Если ожидаемый tool-call заменился прозой — подсказка не убедила модель; уточните пользовательский промпт или переключитесь на более мощную модель. Параллельные вызовы инструментов
Один ответ может содержать несколько блоков tool_use — модель решает, делать ли fan-out. Выполните все, затем отправьте одно user-сообщение с несколькими блоками tool_result (по одному на каждый tool_use_id). Порядок не важен.
Именование инструментов
- Имена case-sensitive и прокидываются as-is — модель возвращает то, что вы зарегистрировали.
- И
snake_case, иPascalCaseработают. Claude Code CLI использует PascalCase (Read,Bash,Edit); generic SDK обычно snake_case. - Держите имена <64 символов и ASCII
[a-zA-Z0-9_].
OpenAI-стиль tool calling
На эндпоинте /v1/chat/completions используйте стандартную OpenAI-форму tools /tool_calls — мы транслируем её в Anthropic tool_use-блоки под капотом.
Быстрые ответы
Какой base URL использовать?
Claude Code и Anthropic SDK работают с https://api.oneprovider.dev. OpenAI SDK и OpenAI-совместимые клиенты работают с https://api.oneprovider.dev/v1. За обоими адресами один ключ; список моделей: странице моделей , ставки на странице тарифов .
Как авторизоваться?
Передайте сырой ключ sk-… в заголовке x-api-key или Authorization: Bearer: один из двух, не оба. Храните ключ в переменной окружения, а не в файле, который попадает в репозиторий. Подробнее об аутентификации .
Где взять ключ?
Откройте кабинет в Telegram-боте @oneprovider_robot или на app.oneprovider.dev, пополните баланс и нажмите «Выпустить ключ». У каждого ключа может быть свой лимит расхода. Кабинет и ключи .
Что значат ошибки 401, 404 и 429?
401: ключ не задан, написан с ошибкой или передан не в том заголовке; вставьте ключ целиком, без кавычек и пробелов. 404: обычно неверный base URL, например лишний или двойной /v1. 429 с текстом «Insufficient balance»: баланс кабинета или лимит ключа исчерпан, пополните его вместо повторов; любой другой 429 это лимит частоты, подождите Retry-After. Разбор: коды ошибок и решение проблем .
Почему обрывается стрим или сбрасывается соединение?
VPN и VLESS-прокси часто буферизуют SSE или ломают согласование HTTP/2. У OneProvider нет региональных ограничений, и стримы на нашей стороне не буферизуются: отключите прокси и повторите запрос.
Куда писать, если не помогло?
Напишите в Telegram @Oneproviderhelpbot или откройте «Поддержку» в веб-кабинете: приложите код статуса и точный текст ошибки. Как работает поддержка .
Последнее обновление: 2026-10-05 Нашли ошибку? @Oneproviderhelpbot