Агентные системы — это не магия и не один большой промпт. На практике это набор небольших, специализированных агентов, каждый из которых решает одну задачу хорошо. Проблема не в том, чтобы написать первого агента; проблема в том, чтобы они работали вместе предсказуемо.
Я начинаю с декомпозиции задачи на атомарные шаги — такие, которые можно проверить независимо. Каждый шаг становится либо инструментом, либо суб-агентом. Инструмент — если логика детерминированная и быстрая (API-вызов, парсинг файла). Суб-агент — если нужно рассуждение, выбор стратегии или работа с неструктурированными данными. Граница между ними важнее, чем кажется: смешение двух режимов в одном компоненте — главный источник непредсказуемости.
Оркестратор управляет последовательностью и потоком данных, но сам не производит контент. Его задача — запускать суб-агентов, собирать их вывод, передавать контекст дальше и обрабатывать ошибки. Хороший оркестратор тонкий: если он начинает принимать бизнес-решения, это сигнал, что у него слишком много ответственности.
Состояние — самое сложное место. Я использую файловую систему как «почтовый ящик» между агентами: один агент пишет структурированный файл, другой его читает. Это медленнее, чем передача в памяти, но дает воспроизводимость и возможность отладки. При сбое видно ровно то, что было на входе у упавшего агента.
Ключевой урок: агентный контур работает ровно настолько хорошо, насколько четко определены интерфейсы между компонентами. Инвестиция в четкие форматы входа и выхода окупается в десять раз — при отладке, при добавлении нового агента, при смене модели. Все остальное — детали реализации.