Tool Calling

Подключение внешних функций к модели

Tool Calling (function calling) позволяет модели выбирать и вызывать ваши функции. Вы описываете инструменты через JSON Schema, модель возвращает аргументы, вы выполняете логику и возвращаете результат в следующем сообщении.

Поток из 3-х шагов

1Описать инструмент

Отправляете messages + tools + tool_choice

2Получить tool_call

Модель возвращает JSON-аргументы функции

3Вернуть результат

Добавляете role: tool с output и повторяете запрос

Шаг 1: описание инструмента

json
{
  "model": "anthropic/claude-sonnet-4",
  "messages": [
    { "role": "user", "content": "Какая погода в Токио прямо сейчас?" }
  ],
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "get_weather",
        "description": "Текущая погода для города",
        "parameters": {
          "type": "object",
          "properties": {
            "city":  { "type": "string", "description": "Город, напр. Tokyo" },
            "units": { "type": "string", "enum": ["celsius","fahrenheit"] }
          },
          "required": ["city"]
        }
      }
    }
  ],
  "tool_choice": "auto"
}

Шаг 2: модель возвращает вызов

json
{
  "choices": [{
    "message": {
      "role": "assistant",
      "content": null,
      "tool_calls": [
        {
          "id": "call_abc123",
          "type": "function",
          "function": {
            "name": "get_weather",
            "arguments": "{\"city\":\"Tokyo\",\"units\":\"celsius\"}"
          }
        }
      ]
    },
    "finish_reason": "tool_calls"
  }]
}

Шаг 3: возврат результата

python
tool_result = get_weather(city="Tokyo", units="celsius")

followup = client.chat.completions.create(
    model="anthropic/claude-sonnet-4",
    messages=[
        {"role": "user", "content": "Какая погода в Токио?"},
        assistant_message,
        {
            "role": "tool",
            "tool_call_id": "call_abc123",
            "content": json.dumps(tool_result),
        },
    ],
    tools=tools,
)
print(followup.choices[0].message.content)

tool_choice — контроль вызова

"auto"
default
Модель сама решает — вызвать инструмент или ответить текстом
"none"
string
Модель обязана ответить текстом (инструменты игнорируются)
"required"
string
Модель обязана вызвать хотя бы один инструмент
{type:"function", function:{name:"..."}}
object
Модель обязана вызвать конкретную функцию
Поддерживаются параллельные вызовы: модель может вернуть сразу несколько tool_calls — выполните их параллельно и верните соответствующие role: tool сообщения.