К содержимому
Claude Code с 0:полный курс
Уровень 3 · Деньги, скорость и production 5 мин

Мини-проект: бот поддержки интернет-магазина

Собираем из system prompt, tool use и обработки ошибок рабочий сценарий ответа на вопрос о заказе.

В этом уроке нет практического задания — просто прочитай и ответь на вопросы.

Соберём всё вместе: бот поддержки, который отвечает на «где мой заказ?». Три кирпича — роль в system, инструмент для данных, обработка ошибок.

1. Роль и правила в system

System-промпт задаёт характер бота и рамки: тон, что можно, чего нельзя. Именно он превращает «универсальную модель» в «вежливого оператора магазина».

2. Инструмент для реальных данных

Модель не знает статус заказа — у неё нет твоей базы. Даём ей инструмент: она попросит вызвать его, ты выполнишь функцию у себя и вернёшь результат.

tools = [{
    "name": "get_order_status",
    "description": "Статус заказа по номеру. Вызывай, когда клиент спрашивает о своём заказе.",
    "input_schema": {
        "type": "object",
        "properties": {"order_id": {"type": "string"}},
        "required": ["order_id"],
    },
}]

resp = client.messages.create(
    model="claude-opus-4-8",
    max_tokens=1024,
    system="Ты — оператор поддержки магазина. Вежливо, по делу. Статусы заказов бери только из инструмента, не выдумывай.",
    tools=tools,
    messages=[{"role": "user", "content": "Где заказ 4821?"}],
)

Если stop_reason == "tool_use", в ответе будет блок tool_use с id, name и input. Выполняешь функцию и шлёшь результат обратно — новым user-сообщением с блоком tool_result:

messages.append({"role": "assistant", "content": resp.content})
messages.append({"role": "user", "content": [{
    "type": "tool_result",
    "tool_use_id": tool_block.id,
    "content": "Заказ 4821: в пути, доставка завтра",
}]})
final = client.messages.create(model="claude-opus-4-8", max_tokens=1024,
                               system="...", tools=tools, messages=messages)

3. Ошибки

Оборачивай вызовы в try/except: 400 — чинить, 429/5xx — SDK ретраит сам. API без состояния — всю историю messages (включая tool_use и tool_result) шлёшь заново на каждом шаге.

Порепетируй

Попробуй сам: один и тот же вопрос клиента, но с разным system-промптом — и почувствуй, как меняется ответ.

Тренажёр Claude Code

Клиент магазина пишет: «Заказ 4821 идёт уже неделю, это нормально вообще?!». Один и тот же вопрос — но сначала выбери, какой system-промпт стоит у бота, и посмотри, как изменится ответ.

Claude

Запрос уходит в Claude. Какой system-промпт задан боту?

System задаёт характер, инструмент даёт факты, обработка ошибок держит бота на ногах. Это и есть скелет любого продакшен-сценария.

Проверь себя

Отвечено 0/3
Режим:

Зачем боту инструмент get_order_status, а не просто промпт?

Модель вернула stop_reason == "tool_use". Как вернуть ей результат?

Что задаёт system-промпт в боте поддержки?

Выполни задание в терминале и ответь на вопросы, чтобы завершить урок.

📝 Мои заметки

Сохраняется автоматически в этом браузере · видно на странице «Заметки».

Листай уроки клавишами · поиск по ⌘K