--- id: agent-reasoning-patterns title: ReAct, ReWOO, Reflexion and Tree of Thoughts code: RR subtitle: Pick, build and stop an agent reasoning loop. ReAct, ReWOO, Reflexion, ToT, LATS, Self-Refine, CRITIC and CoT. hue: 280 sources: phases/14-agent-engineering/01-the-agent-loop, phases/14-agent-engineering/02-rewoo-plan-and-execute, phases/14-agent-engineering/03-reflexion-verbal-rl, phases/14-agent-engineering/04-tree-of-thoughts-lats, phases/14-agent-engineering/05-self-refine-and-critic, phases/11-llm-engineering/02-few-shot-cot source_hash: f39d998186f057e3 --- ## Four patterns side by side type: comparison span: 2 from: phases/14-agent-engineering/01-the-agent-loop/docs/en.md, phases/14-agent-engineering/02-rewoo-plan-and-execute/docs/en.md, phases/14-agent-engineering/03-reflexion-verbal-rl/docs/en.md, phases/14-agent-engineering/04-tree-of-thoughts-lats/docs/en.md, phases/11-llm-engineering/02-few-shot-cot/docs/en.md | Factor | ReAct | ReWOO | Reflexion | ToT / LATS | |---|---|---|---|---| | Roles | Thought, Action, Observation | Planner, Workers, Solver | Actor, Evaluator, Self-Reflector | Policy, value function, search | | LLM calls | One for each step | One plan, one solve | One run for each trial | One for each node | | Observations | In every step | Not in the planner | As reflections in the next trial | Mixed into the value function | | Token cost | Grows with depth | About 5x fewer on HotpotQA | Grows with the buffer | 100-1000x CoT | | Paper result | ALFWorld +34 points | HotpotQA +4 accuracy | Beats ReAct on ALFWorld | Game of 24: 4% to 74% | | Main failure | Loop length explosion | Static plan | Memory rot | Noisy evaluator | ## Use each pattern when type: concepts from: phases/14-agent-engineering/02-rewoo-plan-and-execute/docs/en.md, phases/14-agent-engineering/03-reflexion-verbal-rl/docs/en.md, phases/14-agent-engineering/04-tree-of-thoughts-lats/docs/en.md, phases/14-agent-engineering/05-self-refine-and-critic/docs/en.md - **ReAct**: short tasks, unknown environment, reactive exception handling. - **ReWOO**: structured tasks with known tools and parallel evidence. - **Plan-and-Execute**: like ReWOO, with replanning after partial execution. - **Plan-and-Act**: long horizon (>30 steps), web, mobile or computer use. - **Reflexion**: a clear failure signal and a task class that repeats. - **ToT / LATS**: a cheap, reliable value function. Correctness beats wall-clock. - **Self-Refine**: no external verifier. One model generates and critiques. - **CRITIC**: an external verifier exists: search, code, calculator, tests. ## ReAct loop: AgentLoop.run type: flow from: phases/14-agent-engineering/01-the-agent-loop/code/main.py, phases/14-agent-engineering/01-the-agent-loop/docs/en.md 1. **User**: the message goes into the history as a `user` turn. 2. **LLM**: `respond(history)` returns a thought and an action, or `finish`. 3. **ToolRegistry**: `dispatch(call)` runs the tool by name. 4. **Formatter**: a bad tool or bad args returns an `error:` string, not a crash. 5. **Loop**: the action turn and its observation go into the history. Go to step 2. 6. **Stop**: `finish`, no tool calls, max turns, max tokens or a guardrail trip. 7. **Budget**: after `max_turns` the loop returns "budget exhausted". ## ReWOO: plan, fetch, solve type: architecture from: phases/14-agent-engineering/02-rewoo-plan-and-execute/code/main.py, phases/14-agent-engineering/02-rewoo-plan-and-execute/docs/en.md ```arch node | q | 1,2 | Question | user_question | client node | plan | 2,2 | Planner | plan DAG, no observations | model node | e1 | 3,1 | Worker E1 | search capital | process node | e2 | 3,2 | Worker E2 | population of #E1 | process node | e3 | 3,3 | Worker E3 | round_million #E2 | process node | solve | 4,2 | Solver | question, plan, evidence | model edge | q | plan | edge | plan | e1 | topological edge | e1 | e2 | #E1 edge | e2 | e3 | #E2 edge | e3 | solve | evidence ``` ## Reflexion trial type: flow from: phases/14-agent-engineering/03-reflexion-verbal-rl/code/main.py, phases/14-agent-engineering/03-reflexion-verbal-rl/docs/en.md 1. **Actor**: `actor.act(memory)` returns a candidate trajectory. 2. **Evaluator**: `binary_evaluator(attempt, TARGET)` returns success and delta. 3. **Self-Reflector**: writes one line, for example "pick larger values". 4. **EpisodicMemory**: `memory.add` stores it. The oldest drops past `max_len`. 5. **Next trial**: starts fresh but sees the reflections. A success ends the run. ## LATS: one MCTS iteration type: flow from: phases/14-agent-engineering/04-tree-of-thoughts-lats/docs/en.md, phases/14-agent-engineering/04-tree-of-thoughts-lats/code/main.py 1. **Select**: walk from root to a leaf by `Q(s, a) + c * sqrt(ln N(s) / N(s, a))`. 2. **Expand**: generate K children with the policy. 3. **Simulate**: roll out from a child. Score the leaf with the value function. 4. **Backpropagate**: add 1 to `visits` and the reward to `value_sum` on the path. ## Tasks in code type: task-table from: phases/14-agent-engineering/01-the-agent-loop/code/main.py, phases/14-agent-engineering/02-rewoo-plan-and-execute/code/main.py, phases/14-agent-engineering/03-reflexion-verbal-rl/code/main.py, phases/14-agent-engineering/04-tree-of-thoughts-lats/code/main.py, phases/14-agent-engineering/05-self-refine-and-critic/code/main.py | Task | Code | |---|---| | Register a tool | `tools.register("calculator", calculator)` | | Order a plan DAG | `topological(plan)` | | Fill #E references | `resolve_references(value, evidence)` | | Reflexion with memory | `run_reflexion(max_trials=4, use_memory=True)` | | ToT breadth first | `tot_bfs(root_tot)` | | LATS search | `mcts(root_lats, iterations=80, rng=rng)` | | CRITIC loop | `run_loop("world facts", use_critic=True)` | ## CoT escalation pipeline type: annotated-code lang: python from: phases/11-llm-engineering/02-few-shot-cot/code/advanced_prompting.py, phases/11-llm-engineering/02-few-shot-cot/docs/en.md ```python single_answer, _ = few_shot_cot_solve(question, examples, client, model) # temperature 0.0 sc_answer, confidence, reasonings, votes = self_consistency_solve( question, examples, client, model, n_samples=5 ) # temperature 0.7, majority vote if confidence >= 0.8 and single_answer == sc_answer: return sc_answer # 4 of 5 samples agree tot_answer, tot_reasoning = tree_of_thought_solve( question, client, model, breadth=3, depth=2 ) # escalate hard problems ``` ## Prompt reasoning ladder (GPT-5, GSM8K) type: comparison from: phases/11-llm-engineering/02-few-shot-cot/docs/en.md | Factor | Zero-Shot CoT | Few-Shot CoT | Self-Consistency (N=5) | Tree-of-Thought | |---|---|---|---|---| | API calls | 1 | 1 | 5 | 10-40+ | | Token overhead | 50-200 tokens | 300-600 tokens | 5x token cost | 10-40x token cost | | Accuracy | 97% | 98% | 98.5% | 74% on Game of 24 | | Best for | Quick reasoning boost | Maximum single-call accuracy | High-stakes reasoning | Search/planning problems | ## Defaults in the lesson code type: defaults from: phases/14-agent-engineering/01-the-agent-loop/code/main.py, phases/14-agent-engineering/03-reflexion-verbal-rl/code/main.py, phases/14-agent-engineering/04-tree-of-thoughts-lats/code/main.py, phases/14-agent-engineering/05-self-refine-and-critic/code/main.py, phases/11-llm-engineering/02-few-shot-cot/code/advanced_prompting.py, phases/11-llm-engineering/02-few-shot-cot/docs/en.md | Setting | Default | Note | |---|---|---| | `max_turns` | 12 | AgentLoop turn budget. The demo sets 10 | | `max_len` | 6 | EpisodicMemory size | | `max_iters` | 4 | Refine loop cap in `run_loop` | | `c` in `uct` | 1.4 | Exploration weight | | `max_expansions_per_level` | 8 | ToT BFS frontier width | | `max_depth` | 3 | ToT BFS depth | | `n_samples` | 5 | Self-consistency votes | | `temperature` | 0.7 | Sampled paths. At 0.0 all samples match | ## Troubleshooting type: troubleshooting from: phases/14-agent-engineering/01-the-agent-loop/docs/en.md, phases/14-agent-engineering/02-rewoo-plan-and-execute/code/main.py, phases/14-agent-engineering/03-reflexion-verbal-rl/docs/en.md, phases/14-agent-engineering/04-tree-of-thoughts-lats/docs/en.md, phases/14-agent-engineering/05-self-refine-and-critic/docs/en.md | Symptom | Cause | Fix | |---|---|---| | Agent hallucinates success on 400 errors | Error not fed back | Turn each error into an observation string | | A web page gives the agent orders | Trust boundary collapse | Only direct user instructions count as permission | | "cyclic plan or unresolved reference" | A step refers to a missing node | Fix the #E references in the plan | | Reruns get slower, stale advice | Memory rot | Compaction or TTL on reflections | | Reflection does not help | External failure, network down | Do not store one-off flaky runs | | Critique always says looks good | Rubber-stamp loop | Use structurally different prompts | | Search finds a good-scoring wrong answer | Noisy evaluator | Use search only with a reliable value function | ## Questions type: qa from: phases/14-agent-engineering/02-rewoo-plan-and-execute/docs/en.md, phases/14-agent-engineering/04-tree-of-thoughts-lats/docs/en.md, phases/14-agent-engineering/05-self-refine-and-critic/docs/en.md, phases/11-llm-engineering/02-few-shot-cot/docs/en.md - **Why does ReWOO use fewer tokens?** ReAct prompts carry every prior step. ReWOO workers get only the tool call. - **Why can a 7B model plan?** The planner does not see observations. It learns from 175B teacher plans. - **What does LATS add to ToT?** MCTS. The LLM is policy, value function and self-reflector. - **Why does Self-Refine keep history?** Refine sees prior outputs and critiques. Without history, quality drops sharply. - **Why CRITIC over Self-Refine?** A hallucination often looks convincing to the model that produced it. - **Add CoT to a reasoning model?** No. The o-series and DeepSeek-R1 run CoT internally. ## Tips type: tips from: phases/14-agent-engineering/02-rewoo-plan-and-execute/docs/en.md, phases/14-agent-engineering/04-tree-of-thoughts-lats/outputs/skill-search-policy.md, phases/14-agent-engineering/05-self-refine-and-critic/docs/en.md - Start with the simplest pattern. One tool call plus a summary needs no ReWOO. - Stop a refine loop when the verifier passes. Also cap it with `max_iterations`. - Keep branching factor K at 3-5. K=10 explodes cost.