Суть
Чат-бот: триггер → ответ → конец (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?