← Claude на русском
Перевод с разбором · для Сони
Адаптировал Claude Opus 4.7 (ИИ) на основе документации Anthropic. Полная версия — в docs/building-effective-agents.html.

Как устроены агенты

Адаптация для Сони · 2026-04-23

Зачем тебе это нужно

Твой бот сейчас — workflow (рабочий процесс): пользователь пишет → промпт → модель отвечает → ты показываешь ответ. Это хорошо для простых сценариев. Но если ты хочешь, чтобы бот сам решал: «тут надо глянуть в базу задач», «тут надо позвать второго промпта для диагностики», «тут надо дать короткий ответ, а не длинный» — это уже в сторону агента. Эта статья — карта того, как устроены такие системы. Не всё пригодится сразу.

Workflow vs agent

Augmented LLM — минимальный кирпичик

Это модель + доступ к инструментам + память. «Память» в твоём боте — таблица user_notes в SQLite (bot.db). «Инструменты» — функции из статьи про tool use (add_task, get_notes и т.д.), вызываются из aiogram-хэндлера. Один вызов модели с этим набором уже может многое.

Пять типовых паттернов workflow

1. Prompt chaining (цепочка промптов)

Один запрос → результат → другой запрос, который использует результат первого. В твоём боте: первый промпт — определить состояние («перегруз»), второй — под это состояние подобрать стиль ответа.

2. Routing (маршрутизация)

Короткий классификатор: «это сообщение про долгосрочные цели или про плохой день?». В зависимости от ответа — разная ветка: «цели-ветка» использует один промпт, «поддержка-ветка» — другой.

# Простой router на OpenAI
def classify(user_msg):
    response = client.chat.completions.create(
        model="gpt-5.4-mini",
        messages=[{"role": "user", "content": f"""
Определи категорию сообщения пользователя из одного варианта:
- goals (про долгосрочные цели, планирование)
- day (про текущий день, конкретную задачу)
- support (про состояние, чувства, срыв)

Сообщение: {user_msg}

Ответь одним словом: goals / day / support."""}]
    )
    return response.choices[0].message.content.strip()

category = classify(user_msg)
if category == "support":
    system_prompt = SUPPORT_PROMPT
elif category == "goals":
    system_prompt = GOALS_PROMPT
else:
    system_prompt = DAY_PROMPT

Что здесь происходит: дешёвая mini-модель за 100 мс определяет тип сообщения. Основной ответ генерирует уже тот system prompt, который подходит под этот тип. Специализированные промпты всегда лучше одного универсального.

3. Parallelization (параллельные вызовы)

Если задача распадается на независимые части — запускаешь их одновременно. В боте: параллельно считать «формальный ответ» и «эмоциональный ответ», потом выбирать из двух. Полезно редко, но знать стоит.

4. Orchestrator-workers

Центральная модель разбивает задачу и делегирует её специализированным «воркерам». Для бота по СДВГ пока overkill.

5. Evaluator-optimizer (черновик + критик)

Один промпт пишет ответ, второй критикует, третий правит. Полезно для качественных текстов — например, если бот составляет недельный план, критик может проверить его на «реалистично ли с точки зрения СДВГ».

Три принципа дизайна от Anthropic

  1. Простота. Начинай с прямого API-вызова. Усложняй только когда это даёт измеримый выигрыш (см. evals).
  2. Прозрачность. Ты должна понимать, почему бот принял то или иное решение. Если не можешь — упрощай.
  3. Хорошие описания tools. Именно по ним модель решает, когда какую функцию звать.

Что это значит для твоего бота

Полная версия — в docs/building-effective-agents.html.