Клиентские функции Claude используют цикл tool_use → tool_result с серверным промптом и без него. Функцию выполняет ваш клиент. Форматы и ограничения зависят от выбранного API.
json
{
"model": "claude-opus-5",
"max_tokens": 1024,
"tools": [{
"name": "get_weather",
"description": "Погода по городу",
"input_schema": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"]
}
}],
"messages": [{"role": "user", "content": "Какая погода в Москве?"}]
}В ответе придёт блок tool_use с именем инструмента и аргументами — выполните его у себя и верните результат блоком tool_result.
json
{
"role": "user",
"content": [{
"type": "tool_result",
"tool_use_id": "toolu_…",
"content": "Москва: +18 °C, ясно"
}]
}| Семейство | Клиентские функции |
|---|---|
| Kimi | Работают на Messages, Chat Completions и Responses; формат tools и выбора инструмента зависит от API |
| Composer | Работают на всех трёх поверхностях; инструмент исполняет клиент. tool_choice — только автоматический |
| Grok | Работают на всех трёх поверхностях; инструмент исполняет клиент. tool_choice — только автоматический |
toolsдолжен быть массивом объектов, у функции обязательно есть имя, имена не повторяются.- Схема аргументов проверяется на глубину до 32 уровней, до 4096 узлов и до 256 КиБ в каноническом виде. Превышение даёт локальный
400до списания. - У моделей
kimi-for-codingиkimi-for-coding-highspeedзначениеtool_choice: "required"не поддерживается и отклоняется локально. Уk3иk3-256kоно проходит.
Цикл работает на всех трёх поверхностях в их собственном формате. Модель возвращает вызов; клиент исполняет инструмент и возвращает результат в тот же диалог. До результата запрос остаётся незавершённым.
| Поверхность | Что приходит вместо ответа | Чем отвечать |
|---|---|---|
/v1/messages | блоки tool_use в content и stop_reason: "tool_use" | блок tool_result с тем же tool_use_id |
/v1/chat/completions | choices[0].message.tool_calls и finish_reason: "tool_calls" | сообщение с ролью tool и полем tool_call_id |
/v1/responses | элемент type: "function_call" в output с call_id | элемент function_call_output с тем же call_id |
Незавершённый цикл инструментов ограничен временем ожидания результата и общей длительностью. Завершайте вызовы в том же диалоге и учитывайте ограничения ниже.
| Предел | Значение | Что происходит при выходе за него |
|---|---|---|
| Ответ на вызов инструмента | 120 секунд с момента, когда вы получили ход с вызовом | прогон закрывается, и уже потраченная его часть списывается. Вернувшись позже, вы начнёте разговор заново и заплатите за вход второй раз |
| Длительность одного прогона | 600 секунд | 504 cursor_run_timeout, а в потоке — событие error с тем же кодом. Прогон оплачен |
| Незаконченные разговоры на один ключ | Число одновременно ожидающих результата циклов ограничено для каждого ключа | 429 cursor_key_pause_limit до резервирования денег: отказ бесплатный. Закончите или бросьте один разговор, чтобы начать следующий |