# Tool use: даём модели вызывать ваши функции

Курс: Claude API для разработчиков — https://zero2claude.ru/learn/api
Канонический URL: https://zero2claude.ru/learn/api/2-3-tool-use

Описываем инструмент в input_schema и читаем ответ со stop_reason: tool_use.

## Идея tool use

Модель сама не ходит в твою базу заказов. Но ты можешь дать ей **инструмент** — описание функции, которую она вправе «вызвать». Модель не выполняет её сама: она говорит «вызови `get_order` с таким аргументом», а саму функцию запускаешь у себя.

## Описываем инструмент

Каждый инструмент — это `name`, `description` и `input_schema` (JSON Schema аргументов). Хорошее описание важно: по нему модель решает, когда инструмент нужен.

```
tools = [{
    "name": "get_order",
    "description": "Вернуть статус заказа по его номеру",
    "input_schema": {
        "type": "object",
        "properties": {"order_id": {"type": "string"}},
        "required": ["order_id"]
    }
}]
```

## Запрос и ответ

Передаёшь `tools` в запрос. `tool_choice` управляет поведением: `auto` (по умолчанию), `any`, конкретный `tool` или `none`.

```
from anthropic import Anthropic

client = Anthropic()
resp = client.messages.create(
    model="claude-opus-4-8",
    max_tokens=1024,
    tools=tools,
    messages=[{"role": "user", "content": "Где мой заказ 7788?"}],
)
print(resp.stop_reason)  # tool_use
```

Если модель решила вызвать инструмент, придёт `stop_reason: "tool_use"`, а в `content` будет блок с `type == "tool_use"`:

```
{
  "type": "tool_use",
  "id": "toolu_01ABC",
  "name": "get_order",
  "input": {"order_id": "7788"}
}
```

Запомни `id` блока (`toolu_...`) — он понадобится, чтобы вернуть результат функции в следующем уроке.
