为什么推理模型是天然的规划器
传统 ReAct Agent 的问题:每次工具调用都需要重新推理,导致推理不连贯、成本高、容易迷路。推理模型的特性使它成为理想的规划层:
传统 ReAct(思考-行动-观察循环):
Thought → Action → Observation → Thought → Action → ...
问题:每轮 Thought 是独立的,没有全局规划视野
Plan-and-Execute(规划-执行分离):
Step 1: 推理模型完整规划所有步骤
┌─────────────────────────────┐
│ 思考:要完成这个任务需要: │
│ 1. 搜索 X │
│ 2. 分析结果,提取 Y │
│ 3. 基于 Y 调用 API Z │
│ 4. 汇总生成报告 │
└─────────────────────────────┘
Step 2: 执行模型逐步执行(可以用小模型)
Execute step 1 → Execute step 2 → ...
Plan-and-Execute 实现
import anthropic
from typing import List, Dict
client = anthropic.Anthropic()
def reasoning_planner(goal: str, available_tools: List[str]) -> List[Dict]:
"""使用推理模型制定执行计划"""
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=8000,
thinking={"type": "enabled", "budget_tokens": 5000},
system=f"""你是一个任务规划专家。
可用工具:{available_tools}
输出 JSON 格式的执行步骤列表:
[{{"step": 1, "tool": "工具名", "input": "输入", "purpose": "目的"}}]""",
messages=[{"role": "user", "content": f"目标:{goal}"}]
)
# 提取 text block(推理已在 thinking 中完成)
text = next(b.text for b in response.content if b.type == "text")
return json.loads(text)
def execute_plan(plan: List[Dict]) -> List[str]:
"""用轻量级模型逐步执行计划"""
results = []
context = {}
for step in plan:
# 根据工具名调用对应函数
tool_result = call_tool(
tool_name=step["tool"],
tool_input=step["input"].format(**context)
)
context[f"step{step['step']}_result"] = tool_result
results.append(tool_result)
return results
# 使用示例
goal = "分析 Tesla 最新财报,生成投资建议报告"
tools = ["web_search", "pdf_reader", "data_analyzer", "report_writer"]
plan = reasoning_planner(goal, tools)
results = execute_plan(plan)
ReWOO:推理与观察解耦
ReWOO(Reasoning WithOut Observation)让推理模型一次性规划所有工具调用,然后并行执行,最后综合结果:
async def rewoo_agent(task: str, tools: dict) -> str:
# Phase 1: Planner — 一次性生成所有工具调用计划
plan_prompt = f"""为以下任务制定工具调用计划(不执行,只规划):
任务:{task}
可用工具:{list(tools.keys())}
输出格式:#E1 = tool_name[input]
#E2 = tool_name[input,可引用#E1的结果]"""
planner_response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=4000,
thinking={"type": "enabled", "budget_tokens": 3000},
messages=[{"role": "user", "content": plan_prompt}]
)
tool_plan = parse_tool_plan(get_text(planner_response))
# Phase 2: Worker — 并行执行所有独立工具调用
import asyncio
evidence = {}
tasks = [call_tool_async(t["tool"], t["input"]) for t in tool_plan]
results = await asyncio.gather(*tasks)
for i, r in enumerate(results):
evidence[f"#E{i+1}"] = r
# Phase 3: Solver — 综合所有证据给出最终答案
final = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=2000,
messages=[{"role": "user", "content":
f"任务:{task}\n工具执行结果:{evidence}\n请综合以上信息给出完整答案。"}]
)
return get_text(final)
推理模型在 Agent 中的最佳实践
规划层用推理模型,执行层用快速模型
推理模型负责"想清楚做什么",普通模型(haiku、gpt-4o-mini)负责"按计划执行每一步"。这样在保证规划质量的同时控制成本。
一次性规划优于逐步规划
让推理模型一次性看清全局,比每步推理更稳定。利用推理模型的"长思维链"能力,而不是把它用作普通的 ReAct agent。
复杂决策节点才启用推理
在 Agent 工作流中,只在需要复杂判断的决策节点(如路由分支、策略选择)使用推理模型,其他节点用普通模型。
本章小结
推理模型最适合作为 Agent 的规划层。Plan-and-Execute 将规划与执行分离,ReWOO 实现并行工具调用,两者都能充分利用推理模型的全局视野。下一章解决结构化输出与推理的兼容问题。