OneProvider
Справочник API

Использование инструментов

Добавьте вызов функций в приложение: опишите инструменты, читайте блоки 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, когда решает вызвать один из них.

json
{
"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. Модель либо выдаст ещё один вызов, либо финальный текстовый ответ.

json
{
"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