ReAct vs Function Calling vs Plan-and-Execute: The Architecture Decision Map
The 2023 ReAct paper Yao et al. (2023) introduced Thought → Action → Observation as a prompting pattern. Late 2023, OpenAI shipped function calling — models emit structured JSON calls instead of free-text actions. 2024 brought plan-and-execute (Pre-Act, ADaPT, HIPLAN) — explicit planning artifacts before execution.
By 2025, the field split into three paradigms. Most teams pick one by default. The right choice depends on what you are optimizing for.
The Core Difference
| Aspect | ReAct (Thought/Action/Obs) | Function Calling (Structured) | Plan-and-Execute (DAG/Plan) |
|---|---|---|---|
| Reasoning visibility | Explicit — every step prints “Thought: …” | Implicit — reasoning inside model, only action emitted | Explicit plan artifact (DAG), then execution |
| Action format | Free text (parsed by regex/template) | JSON schema (validated by host) | Plan = data structure (DAG, AND/OR tree) |
| Token overhead | High — reasoning tokens every turn | Low — only action + result | Medium — plan tokens upfront, then execution |
| Debuggability | High — read the trace | Low — no trace unless engineered | High — plan inspectable before execution |
| Schema compliance | Fragile — model may malformat | Strong — fine-tuned for JSON | Plan validates; execution uses function calling |
| Flexibility | High — can invent new action patterns | Constrained — must match registered schemas | High — plan can compose arbitrarily |
| Recovery | Retry/backtrack in conversation | Retry same call | Surgical: rollback failed subgraph only |
| Best for | Complex, multi-hop, unpredictable | Predictable, single-step, high-volume | Long-horizon, dependent tools, auditability |
What the Research Shows
Xu et al. (2026) survey the evolution: single-call → multi-tool orchestration. Key findings:
- ReAct variants (Pre-Act, ADaPT, Beyond ReAct) dominate cognitive architecture research — DAG planners, recursive decomposition, think-simulate-act — because explicit reasoning enables planning as data structure.
- Function calling dominates production deployment — LLMCompiler (parallel calls), ToolLLM/AnyTool (hierarchical retrieval), MCP-Zero (active discovery) — because structured actions integrate with software pipelines.
- Plan-and-execute (GAP, ToolNet, HIPLAN, ADaPT, ARTIS, Smurfs) wins on cost reduction (AutoTool: 30%) and recovery (Smurfs: stable rollback + local context filtering).
Hybrid is winning: Plan-and-execute using function calling with ReAct-style reasoning traces → model emits {reasoning: "...", tool_call: {...}}. Best of all three.
Decision Framework: Which to Use?
Use ReAct (or hybrid) when:
- Task requires multi-hop reasoning (research, troubleshooting, multi-step planning)
- You need auditability (compliance, debugging, user trust)
- The action space is open-ended (model may need to compose tools creatively)
- You are developing/iterating on the agent — visible traces accelerate learning
- Failure cost is high — you want to see why before it acts
Use Function Calling when:
- Task is well-structured (lookup, calculate, CRUD, API call)
- Latency/token budget is tight (high volume, edge deployment)
- You have many tools (20+) — schema routing beats free-text parsing
- Integration with code pipelines matters (CI/CD, data pipelines)
- You have fine-tuned models for function calling (Llama-3.1, GPT-4o, Claude 3.5)
Use Plan-and-Execute when:
- Long-horizon tasks with cross-tool dependencies (build → test → deploy)
- You need concurrency (independent branches run in parallel)
- Recovery matters — surgical rollback of failed subgraph
- Auditability of plan before execution (compliance, human review)
- Cost model includes λ·Cost(τ) — plan optimizes token budget upfront
Use Hybrid (Recommended Default):
Plan-and-execute architecture
→ Function calling for execution (structured, validated)
→ Reasoning field in every action (visible trace)
→ DAG planner with checkpoint/resume
The Hidden Cost: Reasoning Tokens
ReAct agents spend 2–5× more tokens per turn on reasoning. At scale, this is real money. Xu et al. (2026) note the objective: max E[R_task - λ·Cost(τ)]. λ is your token cost.
| Paradigm | Tokens/Turn (est.) | Best λ Regime |
|---|---|---|
| ReAct | 2,000–5,000 | Low λ (complex tasks, low volume) |
| Function Calling | 500–1,500 | High λ (high volume, edge) |
| Plan-and-Execute | 1,500–3,000 (plan) + 500/turn (exec) | Medium λ (long-horizon) |
Practical rule: Measure utility per 1k tokens. If ReAct’s higher accuracy doesn’t offset its token cost, switch to function calling + hybrid reasoning field.
Debugging the Black Box
Function-calling agents fail silently: wrong tool, wrong args, no explanation. Mitigations:
- Force reasoning field in prompt/template — even if model doesn’t use it natively
- Log every call with input/output + model’s internal confidence (if available)
- Replay failed traces with a ReAct prompt — “here is what happened; why did you choose X?”
- Eval on snapshots Sun et al. (2025) — freeze context, compare action faithfulness
The Evolution: From Paradigm to Architecture
Xu et al. (2026) show the field moving beyond this binary:
| Stage | Paradigm | Key Innovation |
|---|---|---|
| 1 | Single call | One tool, one answer |
| 2 | ReAct | Thought → Action → Observation loop |
| 3 | Function calling | Structured JSON actions |
| 4 | Planning-as-graph | DAGs, concurrent execution, rollback (GAP, ToolNet, ADaPT) |
| 5 | Dual-system | Sys1 (fast) + Sys2 (slow) (MARS, SwiftSage, CodeTool) |
| 6 | Self-improving | Reflexion, SPIRAL, MetaAgent, test-time tool evolution |
ReAct vs function calling vs plan-and-execute is stage 2 vs 3 vs 4. The production frontier is stage 4–6 — and those require structured actions (function calling) plus explicit planning artifacts (plan-and-execute) plus visible reasoning (ReAct’s contribution). The binary is obsolete.
What to Do
- Default to hybrid: function-calling model + reasoning field in every action + DAG planner. Log all three.
- Profile token cost: measure λ for your workload. Optimize the utility/token ratio.
- Build snapshot eval Sun et al. (2025) — test all three paradigms on your actual failure modes.
- Invest in planning infrastructure (DAG builder, scheduler, rollback) — that pays off regardless of paradigm.
- Don’t marry a paradigm. The model, the host, the task — they change. The architecture (loop + memory + tools + eval) stays.
The model emits tokens. The host decides what those tokens mean. Design the host.