Запись архива

Агентные паттерны в LLM: почему ReAct, tool use и function calling стали стандартом для сложных задач

Разбираем, как работают агентные паттерны на примерах Claude, GPT и ReAct, и почему они меняют подход к разработке на LLM.

Схема агентного паттерна ReAct: рассуждение и действие в цикле
Схема агентного паттерна ReAct: рассуждение и действие в цикле
out of time | by haylee – | openverse | by

В 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 дают достаточно примеров, чтобы начать и не переусложнить проект.