Thomas Piacentini
← Workshop

Cheat sheet

ReAct, ReWOO, Reflexion and Tree of Thoughts

Original text · English

Pick, build and stop an agent reasoning loop. ReAct, ReWOO, Reflexion, ToT, LATS, Self-Refine, CRITIC and CoT.

Four patterns side by side

FactorReActReWOOReflexionToT / LATS
RolesThought, Action, ObservationPlanner, Workers, SolverActor, Evaluator, Self-ReflectorPolicy, value function, search
LLM callsOne for each stepOne plan, one solveOne run for each trialOne for each node
ObservationsIn every stepNot in the plannerAs reflections in the next trialMixed into the value function
Token costGrows with depthAbout 5x fewer on HotpotQAGrows with the buffer100-1000x CoT
Paper resultALFWorld +34 pointsHotpotQA +4 accuracyBeats ReAct on ALFWorldGame of 24: 4% to 74%
Main failureLoop length explosionStatic planMemory rotNoisy evaluator
Sources

Use each pattern when

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.
Sources

ReAct loop: AgentLoop.run

  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".
Sources

ReWOO: plan, fetch, solve

topological#E1#E2evidenceQuestionuser_questionclientPlannerplan DAG, no observationsmodelWorker E1search capitalprocessWorker E2population of #E1processWorker E3round_million #E2processSolverquestion, plan, evidencemodel
Nodes and connections
NodeRoleKind
Questionuser_questionclient
Plannerplan DAG, no observationsmodel
Worker E1search capitalprocess
Worker E2population of #E1process
Worker E3round_million #E2process
Solverquestion, plan, evidencemodel
FromToConnection
QuestionPlanner
PlannerWorker E1topological
Worker E1Worker E2#E1
Worker E2Worker E3#E2
Worker E3Solverevidence
Sources

Reflexion trial

  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.
Sources

LATS: one MCTS iteration

  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.
Sources

Tasks in code

TaskCode
Register a tooltools.register("calculator", calculator)
Order a plan DAGtopological(plan)
Fill #E referencesresolve_references(value, evidence)
Reflexion with memoryrun_reflexion(max_trials=4, use_memory=True)
ToT breadth firsttot_bfs(root_tot)
LATS searchmcts(root_lats, iterations=80, rng=rng)
CRITIC looprun_loop("world facts", use_critic=True)
Sources

CoT escalation pipeline

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_answer4 of 5 samples agree
tot_answer, tot_reasoning = tree_of_thought_solve(
question, client, model, breadth=3, depth=2
)escalate hard problems
Sources

Prompt reasoning ladder (GPT-5, GSM8K)

FactorZero-Shot CoTFew-Shot CoTSelf-Consistency (N=5)Tree-of-Thought
API calls11510-40+
Token overhead50-200 tokens300-600 tokens5x token cost10-40x token cost
Accuracy97%98%98.5%74% on Game of 24
Best forQuick reasoning boostMaximum single-call accuracyHigh-stakes reasoningSearch/planning problems
Sources

Defaults in the lesson code

SettingDefaultNote
max_turns12AgentLoop turn budget. The demo sets 10
max_len6EpisodicMemory size
max_iters4Refine loop cap in run_loop
c in uct1.4Exploration weight
max_expansions_per_level8ToT BFS frontier width
max_depth3ToT BFS depth
n_samples5Self-consistency votes
temperature0.7Sampled paths. At 0.0 all samples match
Sources

Troubleshooting

SymptomCauseFix
Agent hallucinates success on 400 errorsError not fed backTurn each error into an observation string
A web page gives the agent ordersTrust boundary collapseOnly direct user instructions count as permission
"cyclic plan or unresolved reference"A step refers to a missing nodeFix the #E references in the plan
Reruns get slower, stale adviceMemory rotCompaction or TTL on reflections
Reflection does not helpExternal failure, network downDo not store one-off flaky runs
Critique always says looks goodRubber-stamp loopUse structurally different prompts
Search finds a good-scoring wrong answerNoisy evaluatorUse search only with a reliable value function
Sources

Questions

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.
Sources

Tips

  • 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.
Sources
Original source
---
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.
Code and artifacts 1
What you take away

Saved in your notebook on this device.

Sources and limits

Reading checkpoints are self-reported. Test results are recorded separately and apply to the executed cases.

AI Engineering from Scratch · 3f9715c · MIT

Download this file ↓