
В 2024 году разработка на LLM вышла за рамки простых чатов и одношаговых генераций. Всё чаще проекты требуют от моделей не просто ответа, а серии действий: поиска в базе, вызова API, анализа результатов и повторного обращения к модели. Такие сценарии описывают термином «агентные паттерны» — и они стали де-факто стандартом для сложных продакшен-систем. В этой колонке разберём, на чём они основаны, какие официальные реализации существуют у ведущих провайдеров и где проходят их границы.
Почему это важно для разработчиков
Одношаговый запрос к LLM — это, по сути, вызов функции без состояния. Модель получает контекст, генерирует ответ и завершает работу. Для задач, требующих внешних данных, многократных уточнений или доступа к инструментам, такой подход неэффективен. Агентные паттерны решают эту проблему, вводя цикл «рассуждение → действие → наблюдение → новое рассуждение». Разработчики получают возможность строить системы, которые сами планируют шаги, выполняют их и корректируют поведение на основе результатов.
Для инженеров, работающих с LLM, понимание этих паттернов — не теоретическая роскошь, а практическая необходимость. Без них невозможно строить надёжные автономные ассистенты, RAG-пайплайны с живыми источниками или инструменты для автоматизации рабочих процессов. Игнорирование агентного подхода приводит к хрупким решениям, которые ломаются при первом отклонении от ожидаемого сценария.
Что говорят источники: официальные документы и исследования
Фундаментальная работа по агентным паттернам — статья «ReAct: Synergizing Reasoning and Acting in Language Models» (arxiv.org/abs/2210.03629). Авторы показали, что объединение цепочек рассуждений с возможностью взаимодействия с внешней средой (например, поиском в Википедии или калькулятором) значительно повышает точность и прозрачность работы модели на задачах, требующих фактов и вычислений. ReAct стал основой для многих современных фреймворков, включая LangChain и AutoGen.
OpenAI ввела поддержку function calling ещё в июне 2023 года (platform.openai.com/docs/guides/function-calling). Это позволяет модели описывать структурированные вызовы внешних функций, а разработчику — выполнять их и возвращать результат. Сегодня это стандартный механизм для GPT-4 и GPT-4o, который используется в тысячах продакшен-систем, от бронирования до анализа данных.
Anthropic пошла дальше, выпустив в 2024 году документированный набор паттернов для построения агентов с Claude (docs.anthropic.com/en/docs/build-with-claude/agentic-patterns). В их документации явно описаны подходы: от простого tool use (модель вызывает инструменты) до полноценного агентного цикла с планированием, выполнением и итерацией. Anthropic также подчёркивает, что начинать стоит с простейшего решения, а усложнять только при реальной необходимости.
Лилиан Вэнг, бывший исследователь OpenAI, в своём блоге (lilianweng.github.io/posts/2023-06-23-agent/) дала обзорную классификацию агентных систем: память, планирование, инструменты. Её пост остаётся одной из лучших вводных по теме, хотя с тех пор появились более конкретные реализации.
Практический воркфлоу: от простого запроса к агентному циклу
Рассмотрим типичный сценарий: пользователь задаёт вопрос «Какой сегодня курс доллара и как он изменился за неделю?». Одношаговая модель не может ответить — у неё нет доступа к актуальным данным. В агентном подходе разработчик описывает два инструмента: `get_currency_rate(date)` и `get_historical_rates(date_from, date_to)`. Модель получает системный промпт с описанием инструментов, генерирует вызов `get_currency_rate(“2024-12-11”)`, затем на основе результата — `get_historical_rates(“2024-12-04”, “2024-12-11”)`. После получения обоих ответов она формирует итоговый текст.
Этот цикл можно реализовать вручную, но для продакшена удобнее использовать библиотеки-оркестраторы. Ниже — сравнение основных подходов от ведущих провайдеров.
| Паттерн | Провайдер | Суть | Когда использовать |
|---|---|---|---|
| Tool use (инструменты) | Anthropic Claude | Модель выбирает из списка функций, возвращает JSON с аргументами | Единичные вызовы, простые сценарии |
| Function calling | OpenAI GPT | Аналогично, но с поддержкой параллельных вызовов и детальным контролем | Когда нужна гибкость в описании схемы |
| ReAct (рассуждение+действие) | Открытый протокол | Модель пишет «мысль», затем действие, анализирует результат | Сложные многошаговые задачи, требующие планирования |
На практике я рекомендую начинать с tool use или function calling и добавлять ReAct-цикл только когда очевидно, что модель не справляется с последовательностью шагов из-за нехватки контекста или необходимости в перепланировании.
Ограничения и контр-аргументы
Несмотря на популярность, агентные паттерны не лишены недостатков. Первый — стоимость: каждый цикл «рассуждение → действие» генерирует дополнительные токены, особенно при использовании ReAct с длинными цепочками мыслей. Второй — задержка: вызовы внешних API и повторные запросы к модели увеличивают время ответа. Третий — надёжность: модель может неверно выбрать инструмент или неправильно разобрать результат, что приводит к каскадным ошибкам.
Кроме того, существуют задачи, где агентный подход избыточен. Например, для простых вопросов по документации, где ответ уже содержится в контексте, добавление цикла только ухудшает пользовательский опыт. Anthropic в своей документации прямо предупреждает: «implement the simplest solution first, and only add complexity when you observe a specific failure mode».
Ещё один важный момент — безопасность. Агентные системы, способные вызывать внешние инструменты, требуют строгой валидации входящих данных и ограничения привилегий. Например, если модель может выполнять SQL-запросы к базе, необходимо ограничить доступ только чтением и экранировать пользовательский ввод.
Что попробовать в первую очередь
Если вы ещё не работали с агентными паттернами, начните с малого: возьмите одну простую задачу, которая требует двух-трёх шагов (например, получить прогноз погоды и перевести его в другую единицу) и реализуйте её с помощью function calling в OpenAI или tool use в Anthropic. Используйте официальные примеры из документации — они рабочие и хорошо документированы.
Затем добавьте простой цикл: пусть модель анализирует результат предыдущего вызова и решает, нужен ли следующий шаг. Для этого подойдёт библиотека LangChain с `AgentExecutor` или Anthropic с их `agentic loop` сниппетом.
После этого усложните сценарий, добавив условие перепланирования: если первый вызов не дал результата, модель должна попробовать альтернативный подход. Это уже уровень продакшен-агента.
Не гонитесь за сложностью. Агентные паттерны — это не магия, а инженерный инструмент. Их сила в предсказуемости и контроле, а не в автономности. Документация Anthropic и OpenAI, а также оригинальная работа ReAct дают достаточно примеров, чтобы начать и не переусложнить проект.