ReAct framework, tool use, multi-agent оркестрация, планирование и контроль агентов
Обычный LLM-запрос — это одностороннее взаимодействие: пользователь пишет, модель отвечает, готово. Агентные системы разрывают этот паттерн: модель рассуждает, выбирает действие, получает результат, рассуждает снова. Это принципиально другой класс систем.
AI агент — это система, в которой языковая модель выступает "мозгом", принимающим решения в цикле. Классическая триада:
Цикл повторяется до достижения цели или исчерпания лимита итераций. Ключевое отличие от обычного LLM-вызова: агент сам определяет, сколько шагов нужно и какие инструменты использовать.
Примеры агентных задач:
ReAct (Reasoning + Acting) — промпт-фреймворк, предложенный Yao et al. (2022), который структурирует работу агента через явные фазы рассуждения и действия. Аббревиатура одновременно означает "Reasoning + Acting" и "react" как реакцию на обратную связь.
Формат ReAct строится вокруг трёх типов высказываний:
Этот цикл повторяется, пока агент не достигнет финального ответа.
Ты — агент-исследователь с доступом к инструменту поиска.
Решай задачи пошагово, используя формат:
Thought: [твоё рассуждение о ситуации и следующем шаге]
Action: search["поисковый запрос"]
Observation: [результат поиска]
... (повторяй Thought/Action/Observation при необходимости)
Thought: у меня достаточно информации для ответа
Answer: [финальный ответ]
Вопрос: Кто является текущим CEO Anthropic и когда компания была основана?
Ответ агента:
Thought: Мне нужно найти информацию об Anthropic: CEO и дату основания.
Action: search["Anthropic CEO основатель компания"]
Observation: Anthropic основана в 2021 году Дарио Амодеи и Дэниелой Амодеи,
бывшими сотрудниками OpenAI. Дарио Амодеи является CEO.
Thought: У меня есть вся нужная информация.
Answer: CEO Anthropic — Дарио Амодеи. Компания основана в 2021 году.
Явное разделение Thought/Action/Observation делает рассуждения модели прозрачными и позволяет дебаггинг: видно, где агент ошибся в рассуждении.
Инструменты (tools) — это функции, которые агент может вызывать. Каждый инструмент должен быть описан так, чтобы модель понимала когда и как его использовать.
Шаблон описания инструмента:
Доступные инструменты:
1. search(query: str) -> str
Описание: Выполняет поиск в интернете по запросу.
Когда использовать: для получения актуальной информации, фактов, новостей.
Параметры:
- query: поисковый запрос на русском или английском языке
Возвращает: текстовые результаты поиска
2. execute_python(code: str) -> str
Описание: Выполняет Python-код в изолированной среде.
Когда использовать: для вычислений, анализа данных, работы с файлами.
Параметры:
- code: валидный Python-код для выполнения
Возвращает: stdout или сообщение об ошибке
3. read_file(path: str) -> str
Описание: Читает содержимое файла по указанному пути.
Когда использовать: когда нужно проанализировать существующий файл.
Ограничения: только файлы в директории /workspace/
Качество описания инструментов критически влияет на работу агента. Плохое описание приводит к неправильному выбору инструмента или некорректным параметрам.
Принципы описания инструментов:
Сложные задачи требуют предварительного плана. Агент без явной инструкции к планированию склонен "прыгать" к первому приходящему действию.
Промпт с явным планированием:
Перед выполнением задачи:
1. Decompose: разбей задачу на подзадачи
2. Plan: определи последовательность шагов и инструменты
3. Execute: выполняй шаг за шагом, адаптируя план при необходимости
4. Verify: проверь, что результат соответствует исходной задаче
Пример разбивки задачи "Проанализируй продажи за квартал и создай отчёт":
Thought: Декомпозирую задачу:
1. Прочитать CSV с данными продаж
2. Вычислить итоговые показатели (сумма, среднее, топ-продукты)
3. Сравнить с предыдущим кварталом
4. Сформатировать отчёт
Начинаю с шага 1.
Action: read_file("/workspace/sales_q1.csv")
Plan-and-Execute агенты делают планирование отдельным LLM-вызовом, а выполнение отдельным. Это позволяет использовать более дорогую модель для планирования и дешёвую для исполнения.
В сложных задачах один агент не справляется: слишком длинный контекст, слишком разные специализации. Multi-agent архитектура решает это через разделение ролей.
Оркестратор (Manager Agent, Supervisor) — главный агент, который:
Специализированные агенты (Worker Agents) — агенты с ограниченными, но глубокими возможностями:
Промпт оркестратора:
Ты — менеджер агентов. У тебя есть команда специализированных агентов.
Твоя задача: декомпозировать пользовательский запрос и делегировать
подзадачи подходящим агентам.
Агенты:
- research_agent: поиск фактов и информации
- code_agent: написание и выполнение кода
- writer_agent: форматирование финального ответа
Для делегирования используй: delegate(agent_name, task_description)
Понимание истории помогает видеть, почему текущие подходы устроены именно так.
MRKL (Modular Reasoning, Knowledge and Language) — один из первых фреймворков (Karpas et al., 2022). Идея: LLM как роутер, направляющий запросы к специализированным модулям (калькулятор, база данных, поисковик). MRKL показал, что LLM хорошо справляется с задачей "какой инструмент нужен", даже если сам не может выполнить вычисление.
Toolformer (Schick et al., 2023) — подход, при котором модель обучается самостоятельно вставлять API-вызовы в генерируемый текст. Модель решает, когда и какой инструмент использовать, прямо в процессе генерации. Pioneered идею self-supervised learning для tool use.
HuggingGPT / Jarvis (Shen et al., 2023) — оркестратор поверх ChatGPT, делегирующий задачи специализированным моделям HuggingFace. Показал масштабируемость multi-agent подхода: один LLM управляет сотнями моделей для обработки текста, изображений, аудио.
Каждая из этих систем внесла ключевую идею: LLM — это планировщик, а не исполнитель. Лучшие результаты получаются, когда рутинные операции выполняют детерминированные инструменты.
Агенты — значительно менее надёжные системы, чем обычные LLM-запросы. Два класса ошибок особенно критичны.
Зацикливание (Agent Loop)
Агент повторяет одно и то же действие снова и снова, не продвигаясь к цели. Причины:
Пример:
Thought: Нужно найти файл конфигурации
Action: search_file("config.yaml")
Observation: Файл не найден
Thought: Нужно найти файл конфигурации
Action: search_file("config.yaml")
...
Галлюцинаторные действия (Hallucinated Actions)
Агент вызывает инструменты, которых не существует, или передаёт невалидные параметры. Это происходит, когда список инструментов плохо описан или задача выходит за пределы доступных возможностей.
Пример: агент вызывает send_email(to="user@example.com"), хотя инструмент send_email не определён в системе.
Агенты требуют явных механизмов контроля — без них автономная система может нанести вред или работать бесконечно.
Max iterations — жёсткий лимит числа шагов:
Ты можешь сделать не более 10 шагов (Thought/Action/Observation).
Если за 10 шагов задача не решена — сообщи об этом и объясни,
что тебе мешает, вместо того чтобы продолжать попытки.
Это предотвращает зацикливание и контролирует расходы (каждый LLM-вызов стоит денег).
Confirmation loops — запрос подтверждения перед необратимыми действиями:
Перед выполнением любого действия, которое изменяет данные
(запись файла, отправка email, удаление записи),
сначала выводи: "ТРЕБУЕТ ПОДТВЕРЖДЕНИЯ: [описание действия]"
и жди явного разрешения пользователя.
Escalation policy — что делать при неопределённости:
Если ты не уверен в правильности следующего шага или
видишь несколько равнозначных вариантов — остановись и
задай уточняющий вопрос пользователю вместо случайного выбора.
Sandboxing — ограничение прав инструментов на уровне инфраструктуры, не промптов. Агенту с доступом к выполнению кода нужна изолированная среда. Промптинг не заменяет sandbox — обученная на adversarial примерах модель может игнорировать текстовые ограничения. Контроль агента должен быть многоуровневым: промпт + инфраструктурные ограничения.
Вопросы ещё не добавлены
Вопросы для этой подтемы ещё не добавлены.