ReAct

ReAct — паттерн работы агента в виде цикла: Goal → Observation → Reasoning → Action → Feedback → Correction → repeat. Цикл повторяется 5–200+ раз, пока цель не достигнута. Именно это отличает «reasoning loop» агента от «reactive loop» чат-бота.

Суть

Чат-бот: триггер → ответ → конец (reactive loop, без памяти о цели). Агент: крутит петлю, где на каждом шаге наблюдает результат, рассуждает, действует и при необходимости корректируется.

Зачем это нужно

Даёт агенту адаптивность и самокоррекцию: если шаг упал или цель пока недостижима — агент переосмысливает и пробует иначе, а не отдаёт один фиксированный ответ.

Как работает

  • На каждом шаге агент получает ground truth (эталонные данные) из окружения: результаты инструментов, вывод кода, ответы API.
  • Может встать на checkpoint и запросить помощь человека (см. Human in the Loop).
  • Опирается на компоненты из Agent Anatomy (мозг рассуждает, инструменты действуют, память хранит прогресс).
  • Риск: без лимита числа итераций цикл может «зациклиться» и сжечь бюджет → нужен max_iterations; само зацикливание ловится не только лимитом, но и детектором «No Progress» — отсутствие прогресса между шагами (см. Agent CostControl).
  • В коде это «master loop» (OODA: Observe-Orient-Decide-Act): while True опрашивает граф задач → вызывает LLM → обновляет стейт → self-healing retry при ошибке. Anthropic называет это «boring orchestration» — управляющий слой намеренно глуп и предсказуем (см. реализацию в Agent Architecture).
  • В LangGraph этот цикл — минимальный граф agent ↔ ToolNode, замкнутый условным ребром по tool_calls; высокоуровневая create_agent() сама написана на LangGraph (см. LangGraph ReAct Loop, LangGraph vs LangChain).

Пример

goal = "собрать отчёт по конкуренту X"
while not done and steps < max_iterations:
    obs   = run_tool(action)      # Observation (ground truth)
    think = llm.reason(goal, obs) # Reasoning
    action, done = think.next()   # Action / Feedback

Альтернативный взгляд: агент как State Machine

ReAct-цикл можно описывать не как while-петлю, а как конечный автомат: узлы (рассуждение, действие) и рёбра (переходы) поверх единого состояния. Эта рамка превращает цикл в явный объект, который можно прерывать, сохранять и переигрывать (см. LangGraph, LangGraph Time Travel) — то, что в виде голого while True недоступно. Лимит итераций при этом становится не steps < max, а условным ребром на выход (см. LangGraph Reliability).

Связано с

  • AI Agent — кто исполняет этот цикл
  • Agent Anatomy — компоненты, задействованные на каждом шаге
  • Human in the Loop — пауза на checkpoint за подтверждением
  • Agent Architecture — master loop / OODA / self-healing как реализация цикла в коде
  • LangGraph ReAct Loop — тот же цикл, выраженный как граф LangGraph
  • Agent CostControl — лимит итераций и детектор No Progress как защита от зацикливания

Открытые вопросы

  • какое разумное значение max_iterations для типовых задач
  • как детектить No Progress в ReAct loop на практике: повтор tool calls, одинаковые observations, отсутствие state delta?