# 推理与规划 · ReAct、分解与自我纠错 · Agent 实战 · 从零构建完备智能体

**作者** Aklman · **章节** 05 / 19 · **首发** 2026.07 · **语言** 中文为主, 中英双语
**原文** https://library.aklman.com/books/build-agent/05-reasoning
**全书 markdown** https://library.aklman.com/books/build-agent/llms.md
**上一章** https://library.aklman.com/books/build-agent/04-memory/llms.md
**下一章** https://library.aklman.com/books/build-agent/06-mcp/llms.md

> 本章来自 Aklman · Library, 完整免费阅读。允许 AI 摘读、引用、问答; 转载请保留作者署名与原文链接 (CC BY-NC-ND 4.0, https://library.aklman.com/license)。

---

> 好的 Agent 不只是执行指令 —— 它会拆解任务、制定计划、发现错误后回头修正。

研究助手现在能搜、能抓、有记忆，但它还是反应式的：搜一个读一个，撞了墙也不回头。好的 agent 先想再做 —— 先规划要查哪几个角度，发现来源矛盾时回头修正。这一章把「会调工具」变成「会研究」。

### I · 让它先想再做

反应式的 agent 看一步走一步；好的 agent 先推理再行动。把「想」显式化，是质量的第一个杠杆。

ReAct 把这件事写成范式：每一步先输出一段推理（为什么调这个工具），再行动。[^1]现在模型把这步内建成 extended thinking —— 开 `thinking: {type: "enabled", budget_tokens: N}`，模型会在 thinking 块里推理，再给出 tool_use 或答案（Opus 4.8 / 4.7 改用 `{type: "adaptive"}`）。[^2]

_带推理的工具调用（thinking 块要原样回传）_
```text

```python
resp = client.messages.create(
 model="claude-sonnet-4-6", max_tokens=16000,
 thinking={"type": "enabled", "budget_tokens": 8000},
 tools=TOOLS, messages=messages,
)
# 关键约束:回传工具结果时,assistant 轮次要带上原样的 thinking 块
messages.append({"role": "assistant", "content": resp.content}) # 含 thinking + tool_use
```

```

但想得多不等于想得对，也不是免费的 —— thinking token 要计费，延迟也涨。[^2]简单任务别开；把它留给多步、要规划、要权衡的活。

---

### II · 把大任务拆成小步

一个 agent 解决不了的难题，常常不是它不够聪明，是你让它一口吞下了整个任务。

分解的做法：让模型先产出一个计划（子任务列表），再逐个执行 —— plan-then-execute 在长任务上比一步到位更稳，因为计划可检查、可中断、可恢复。Anthropic 的 orchestrator-workers 模式就是分解的工程化：一个协调者把任务拆开，分给各个 worker。[^3]

别过度分解。把一个两步的活拆成七个子任务、每个子任务一次模型调用，是在用规划的名义烧钱加延迟。分解的价值，只在「步骤多到记不住、或需要中途检查」时才兑现。

---

### III · 发现错了能回头

区分玩具和能用的 agent 的，往往不是它第一次做对的概率，是它做错后能不能自己发现并修正。

自我纠错有两个来源。一是环境反馈 —— 第三章那个带 `is_error` 的工具结果就是最好的纠错信号，喂回去，模型能改参数重试。二是自我反思 ——Reflexion 的做法是让模型在失败后写一段反思，带进下一轮上下文，下次就少踩同一个坑。[^4]

但自我纠错要有上限 —— 给纠错轮数设顶（呼应第二章的 `max_steps`）。一个会反思却停不下来的 agent，会在「我再试一次」里无限循环。反思要有，但要带刹车。

动手 · 给一个要两步以上的任务装上推理：

- **开推理，比计划质量**:
 对同一个任务，开和不开 thinking 各跑一次，看它的下一步选择有没有变靠谱。

- **加一步「先列计划」**:
 让模型在动手前先输出子任务列表，再逐个执行，感受 plan-then-execute 在长任务上稳在哪。

- **故意让一个工具失败**:
 把工具错误喂回去、加一轮反思，看它能不能从这次失败里恢复 —— 别忘了给纠错轮数设上限。

> 会做对的 agent 很多，
> 会发现自己做错的才少。

## 引用与参考

01 · Yao et al. · 「ReAct: Synergizing Reasoning and Acting in Language Models」（2022，arXiv:2210.03629）—— 把推理与行动交替：每步先推理再行动，把环境反馈带回下一步。  (arXiv · ReAct (2210.03629))
02 · Anthropic 文档 · Extended thinking —— thinking: {type: enabled, budget_tokens: N} 让模型在 thinking 块里先推理再行动；Opus 4.8 / 4.7 改用 {type: adaptive}；带工具时 thinking 块必须原样回传。截至 2026-05。  (Anthropic · Extended thinking)
03 · Anthropic · 「Building Effective Agents」（2024-12-19）—— orchestrator-workers 等模式：把复杂任务分解、由一个协调者拆给子任务。  (Anthropic · Building Effective Agents)
04 · Shinn et al. · 「Reflexion: Language Agents with Verbal Reinforcement Learning」（2023，arXiv:2303.11366）—— 让 agent 把失败的反思写进下一轮上下文，从反馈中自我纠错。  (arXiv · Reflexion (2303.11366))

---

*推理与规划 · ReAct、分解与自我纠错 · Agent 实战 · 从零构建完备智能体 · Aklman 著 · CC BY-NC-ND 4.0 · https://library.aklman.com/books/build-agent/05-reasoning*
