Спектр архитектур: от простого к сложному
Между «одним промптом» и «мультиагентной системой» — несколько промежуточных уровней. У каждого своя цена: в токенах, в сложности кода, в предсказуемости поведения. Задача разработчика — выбрать наименее сложный уровень, который решает задачу.
Каждый следующий уровень не «лучше» предыдущего — он дороже и сложнее. Используй его только если более простой уровень принципиально не справляется с задачей.
Четыре уровня в деталях
Рассмотрим каждый уровень: что он умеет, чего не умеет, и когда это правильный выбор.
< 1 сек
1–3 сек
2–10 сек
10–120 сек
минуты
Критерии выбора: пять вопросов
Вместо интуиции — конкретные вопросы о задаче. Ответы на них однозначно указывают на уровень архитектуры.
Реальные задачи: какую архитектуру выбрать
Теория — это хорошо, но решения принимаются на конкретных задачах. Разберём типичные сценарии:
| Задача | Почему именно это | Архитектура |
|---|---|---|
| Перевести 100 отзывов с английского на русский | Задача атомарна, никаких внешних данных не нужно. Запускай пакетом. | прямой вызов ×100 |
| Определить тональность отзыва, извлечь ключевые темы, записать в БД | Шаги фиксированы: LLM → парсинг → SQL. Порядок не меняется. | пайплайн |
| Ответить на вопрос по документу (RAG) | Retrieve → Generate. Два фиксированных шага, возможно с reranking. | пайплайн |
| Написать статью: придумать тему → найти источники → написать → проверить | Шаги известны, но источники непредсказуемы — нужны разные инструменты поиска. | агент |
| Отвечать на вопросы пользователя о заказах (e-commerce support) | Неизвестно, нужно ли смотреть заказ, статус доставки, историю — LLM решает сам. | агент |
| Сгенерировать и проверить код, запустить тесты, исправить ошибки | Цикл: write → test → fix → repeat. Количество итераций неизвестно. | агент |
| Мониторинг новостей: 50 источников, ежечасно, суммаризация по темам | Задачи независимы и однотипны — параллельный пайплайн, не агент. | пайплайн (параллельный) |
| Разработать фичу: requirements → design → code → tests → review | Разные роли, параллельная работа, контекст не влезет в одно окно. | мульти-агент |
Реальная стоимость агента
Агент кажется «бесплатным» пока не смотришь на счёт. Каждая итерация цикла — это запрос к LLM, и размер контекста растёт с каждым шагом. Вот почему агент на 10 итерациях обходится в разы дороже одного вызова:
Почему контекст растёт так быстро? Каждая итерация добавляет в messages ответ ассистента плюс результаты инструментов. К 10-й итерации в контексте может быть полная история — 30–50 сообщений, и каждый следующий вызов LLM платит за всё это заново. Агент на 15 итерациях с большим контекстом может стоить как 100 прямых вызовов.
Без max_iterations и max_tokens один зациклившийся агент может сгенерировать счёт на сотни долларов. Установи лимиты, добавь мониторинг стоимости на задачу (через response.usage), и предупреди пользователя о сложных задачах заранее.
Антипаттерны: типичные ошибки выбора
в 100× дороже, трудно дебажить
легко мониторить и тестировать
90% реальных запросов, постоянные правки
покрывает любые комбинации вопросов
отладка — один промпт справится лучше
параллельность даёт реальный выигрыш
Шпаргалка
Дерево выбора архитектуры Задача решается одним промптом без внешних данных? └─ ДА → Прямой LLM-вызов Шаги фиксированы, порядок известен заранее? ├─ ДА, только промпты → Цепочка промптов └─ ДА, есть код/API → Детерминированный пайплайн Шаги зависят от промежуточных результатов? └─ ДА → Задача вмещается в одно контекстное окно? ├─ ДА → Агент └─ НЕТ → Мульти-агент Правило большого пальца Начинай с наименьшего уровня, который решает задачу. Усложняй только когда упёрся в ограничение текущего уровня: пайплайн не гибкий? → агент контекст переполняется? → мульти-агент агент дорого стоит? → декомпозируй и вернись к пайплайну Стоп-сигналы: не используй агента если: • Набор шагов всегда одинаковый — это пайплайн • Нужна 100% воспроизводимость — детерминированный код • Задача атомарна — один промпт быстрее и дешевле • Нет бюджета на эксперименты — агент непредсказуем
Практическое задание
- Классификация задач. Возьми пять рабочих задач, с которыми ты сталкивался, и определи для каждой минимально подходящую архитектуру. Обоснуй свой выбор через критерии из этого урока: фиксированы ли шаги, нужны ли внешние данные, насколько важна предсказуемость.
- Рефакторинг пайплайна → агент. Возьми задачу, которую ты бы решил пайплайном с 5+ ветками if-else: например, «ответить на вопрос пользователя, но если не знаем — искать в сети, если нашли — суммаризировать, если не нашли — попросить уточнить». Реализуй оба варианта (пайплайн и агент) и сравни: сколько строк кода, покрывает ли каждый 100% случаев?
-
Замери стоимость. Возьми агента из предыдущего урока и добавь подсчёт токенов через
response.usage.input_tokens + response.usage.output_tokens. Запусти 5 разных задач и запиши стоимость каждой в токенах и итерациях. Какие задачи «дорогие», какие — нет?