logo

规划与推理 (Planning & Reasoning)

很多人第一次做 Agent 时,会天然觉得“大模型已经很聪明了,直接让它做事就行”。结果一到稍微复杂一点的任务,比如改一个真实项目、写一个完整功能、联动多个工具,它就开始乱跳步骤,不是漏需求,就是做到一半偏题。

这时候你会发现,模型会不会“规划”,比它会不会“说”更重要。

[PROMPT_LAB_BANNER]


1. 为什么 Agent 需要 Planning

如果用户只问一个简单问题,比如“Python 里 list 和 tuple 有什么区别”,很多时候直接回答就够了。

但如果任务变成:

  • 帮我写一个贪吃蛇游戏
  • 帮我重构这个 React 页面
  • 帮我查资料后给出一份选型建议

那问题就不再是生成一段文本,而是要把一个模糊目标拆成多个阶段,再一步步执行。

Agent 如果没有规划层,常见表现通常是:

  • 上来就做实现,没先确认约束
  • 先写了容易写的部分,真正关键的问题没碰
  • 执行过程中发现方向不对,但不会回头调整
  • 明明任务还没完成,却很快给出“已经好了”的假结束

所以 Planning 的本质,不是为了让输出看起来高级,而是为了降低复杂任务里的随机性。


2. 先做任务分解,不要直接扑到代码上

任务分解(Decomposition)本质上是在回答一个问题:

这个目标,最合理的执行顺序是什么?

拿“写一个贪吃蛇游戏”举例,靠谱的 Agent 通常不会第一步就输出完整代码,而是先把任务拆开:

  1. 明确玩法边界:键盘控制、碰撞规则、计分方式。
  2. 决定技术方案:纯 HTML/CSS/JS,还是 Canvas。
  3. 拆文件结构:界面、游戏循环、状态管理、输入处理。
  4. 先做最小可运行版本,再补动画、音效、优化。

这个顺序听起来普通,但它已经比“直接生成 300 行代码”稳定得多,因为它把大问题拆成了可验证的小问题。

做法 A:让 LLM 先出计划

最轻量的方式,就是让模型先列步骤,再开始执行。

比如:

请先给出实现方案,不要立刻写代码。把任务拆成 5 到 7 个步骤,并标出哪些步骤需要先验证。

这招很实用,尤其适合代码 Agent、写作 Agent、研究型 Agent。

但要注意,模型给出的计划不一定靠谱。它有时候会列得很完整,却顺序不对,或者把真正困难的地方轻描淡写带过去。所以计划不是看“写得像不像”,而是看“执行起来顺不顺”。

做法 B:分层规划

如果任务更复杂,可以把规划分成两层:

  • 上层 Agent 负责决定方向和拆阶段
  • 下层 Agent 负责执行单个子任务

这种方式在多 Agent 系统里很常见。

例如你在做一个 coding agent:

  • Planner 先决定“先读代码,再定位问题,再修改,再测试”
  • Coder 负责具体写代码
  • Reviewer 负责检查回归风险

这样做的好处是,每个 Agent 的职责更清晰,不用都把整个世界装进一个上下文里。


3. 推理模式怎么选,不用每次都上高级玩法

说到推理,大家很容易马上想到各种术语,比如 Chain of Thought、Tree of Thoughts、Reflexion。它们确实有用,但别把它们当成“必须全配”的套餐。

很多时候,关键不是你有没有用最复杂的推理框架,而是你有没有选对场景。

Chain of Thought

这是最基础也最常用的一种。简单说,就是要求模型别直接报答案,而是先把思路走一遍。

它适合:

  • 需要解释过程的问题
  • 需要多步判断的任务
  • 需要先分析再决定的场景

在工程里,CoT 最常见的价值不是“更聪明”,而是更容易 debug。模型如果答错了,你至少能看到它错在第几步。

Tree of Thoughts

如果任务存在多个分支,而且可能需要回溯,树状探索会更合适。

典型场景包括:

  • 创意方案生成
  • 多路线问题求解
  • 复杂搜索或策略对比

它的核心不是让模型“想得更多”,而是允许模型保留多个候选方向,不要在第一条路上死磕到底。

graph TD
    subgraph "Chain of Thought (线性)"
    A[Step 1] --> B[Step 2] --> C[Step 3]
    end

    subgraph "Tree of Thoughts (树状)"
    Root[初始状态] --> P1[路径 A]
    Root --> P2[路径 B]
    Root --> P3[路径 C]

    P1 --> P1_1[A 的下一步]
    P2 --> P2_1[B 的下一步]
    P3 --> P3_1[C 的下一步]
    end

不过实话说,在很多业务系统里,ToT 的理论吸引力大于实际收益。它更适合少量高价值任务,不太适合每次请求都开一棵搜索树,否则成本会很快上来。


4. 真正让 Agent 变稳的,通常是“会复盘”

只会规划还不够。很多 Agent 的问题不在“不会开始”,而在“做错以后不会纠正”。

这就是 Self-Reflection 或 Reflexion 一类方法有价值的地方。

一个常见闭环可以这样理解:

  1. Actor 先尝试执行任务
  2. Evaluator 检查结果,比如跑测试、校验格式、比对预期
  3. Reflection 用自然语言总结这次失败的原因
  4. Retry 带着修正后的策略再做一次

这套机制在 coding agent 上特别常见。因为代码任务的好处是“能验”,测试过不了就是过不了,不太需要靠主观判断。

例如模型第一次改代码失败,反思里可能记录:

之前只修了渲染逻辑,没有检查服务端和客户端输出是否一致。下一轮优先看 hydration mismatch 的根因,不要继续改样式层。

这种反思一旦保留下来,下一轮的质量通常会明显比“从头再猜一次”更高。


5. Planning 在实战里怎么落地

如果你不是在写论文,而是在做产品,我更建议用下面这些实用做法。

先出 plan,再执行

这是最稳的一步。哪怕只是一个很短的 todo list,也比没有强。

例如:

  • 先确认目标和限制
  • 再列 3 到 6 个步骤
  • 每完成一步,更新状态
  • 如果发现前提变了,就重排后续步骤

这能明显减少 Agent 一路跑偏的问题。

把计划存成显式状态

不要把计划只放在自然语言里。最好有一个结构化状态对象,明确记录:

  • 当前目标
  • 已完成步骤
  • 阻塞点
  • 下一步动作

这样做的好处是,哪怕换了一个 Agent 接手,也能快速知道现在任务走到哪一步。

允许 Replanning

很多人写规划模块时,默认计划一旦生成就不动了。现实里这几乎不成立。

Agent 在执行中经常会遇到新信息,比如:

  • 文件结构和预期不一样
  • API 权限不够
  • 用户中途补充新约束

这时候一个靠谱的系统应该允许改计划,而不是硬着头皮继续执行旧步骤。

把“最难验证”的步骤提前

这是个很实用但经常被忽略的技巧。

例如你要接一个第三方 API,不要先把页面全搭好,再发现 token 权限不够。应该先验证 API 能不能通、核心依赖能不能跑,再继续往后做。

把高风险步骤前置,能省掉很多无效工作。


6. 一个够用的经验法则

如果你现在正在搭 Agent,可以先用这套很朴素的判断:

  • 简单任务:直接做,最多加一步轻量推理
  • 多步骤任务:先拆解,再执行
  • 高失败成本任务:加验证和反思循环
  • 多分支探索任务:再考虑树状搜索或多方案评估

不要一上来就把所有高级模式都堆进去。很多系统最后不稳定,不是因为规划不够复杂,而是因为每一层都很重,结果没人能维护。


小结

Planning 不是给 Agent 增加“仪式感”,而是让它在复杂任务里少走弯路。

真正有用的规划,通常有三个特征:

  • 能拆成可执行步骤
  • 能在执行中更新
  • 能在失败后复盘

做到这三点,Agent 的表现通常就会从“偶尔很惊艳,但不稳定”,变成“没那么花哨,但真的能持续把事做完”。

AI Agent 开发实战手册
AI Engineer

AI Agent 开发实战手册

从 0 到 1 掌握 AI Agent 开发:涵盖自主计划、工具调用、MCP 协议与多智能体编排实战。

AI Agent 开发实战手册规划与推理

规划与推理 (Planning & Reasoning)

很多人第一次做 Agent 时,会天然觉得“大模型已经很聪明了,直接让它做事就行”。结果一到稍微复杂一点的任务,比如改一个真实项目、写一个完整功能、联动多个工具,它就开始乱跳步骤,不是漏需求,就是做到一半偏题。

这时候你会发现,模型会不会“规划”,比它会不会“说”更重要。

Prompt Lab

把这章的知识,直接变成实战能力

进入交互式实验室,用真实任务练 Prompt,10 分钟快速上手。

进入 Prompt Lab →

#1. 为什么 Agent 需要 Planning

如果用户只问一个简单问题,比如“Python 里 list 和 tuple 有什么区别”,很多时候直接回答就够了。

但如果任务变成:

  • 帮我写一个贪吃蛇游戏
  • 帮我重构这个 React 页面
  • 帮我查资料后给出一份选型建议

那问题就不再是生成一段文本,而是要把一个模糊目标拆成多个阶段,再一步步执行。

Agent 如果没有规划层,常见表现通常是:

  • 上来就做实现,没先确认约束
  • 先写了容易写的部分,真正关键的问题没碰
  • 执行过程中发现方向不对,但不会回头调整
  • 明明任务还没完成,却很快给出“已经好了”的假结束

所以 Planning 的本质,不是为了让输出看起来高级,而是为了降低复杂任务里的随机性。


#2. 先做任务分解,不要直接扑到代码上

任务分解(Decomposition)本质上是在回答一个问题:

这个目标,最合理的执行顺序是什么?

拿“写一个贪吃蛇游戏”举例,靠谱的 Agent 通常不会第一步就输出完整代码,而是先把任务拆开:

  1. 明确玩法边界:键盘控制、碰撞规则、计分方式。
  2. 决定技术方案:纯 HTML/CSS/JS,还是 Canvas。
  3. 拆文件结构:界面、游戏循环、状态管理、输入处理。
  4. 先做最小可运行版本,再补动画、音效、优化。

这个顺序听起来普通,但它已经比“直接生成 300 行代码”稳定得多,因为它把大问题拆成了可验证的小问题。

#做法 A:让 LLM 先出计划

最轻量的方式,就是让模型先列步骤,再开始执行。

比如:

请先给出实现方案,不要立刻写代码。把任务拆成 5 到 7 个步骤,并标出哪些步骤需要先验证。

这招很实用,尤其适合代码 Agent、写作 Agent、研究型 Agent。

但要注意,模型给出的计划不一定靠谱。它有时候会列得很完整,却顺序不对,或者把真正困难的地方轻描淡写带过去。所以计划不是看“写得像不像”,而是看“执行起来顺不顺”。

#做法 B:分层规划

如果任务更复杂,可以把规划分成两层:

  • 上层 Agent 负责决定方向和拆阶段
  • 下层 Agent 负责执行单个子任务

这种方式在多 Agent 系统里很常见。

例如你在做一个 coding agent:

  • Planner 先决定“先读代码,再定位问题,再修改,再测试”
  • Coder 负责具体写代码
  • Reviewer 负责检查回归风险

这样做的好处是,每个 Agent 的职责更清晰,不用都把整个世界装进一个上下文里。


#3. 推理模式怎么选,不用每次都上高级玩法

说到推理,大家很容易马上想到各种术语,比如 Chain of Thought、Tree of Thoughts、Reflexion。它们确实有用,但别把它们当成“必须全配”的套餐。

很多时候,关键不是你有没有用最复杂的推理框架,而是你有没有选对场景。

#Chain of Thought

这是最基础也最常用的一种。简单说,就是要求模型别直接报答案,而是先把思路走一遍。

它适合:

  • 需要解释过程的问题
  • 需要多步判断的任务
  • 需要先分析再决定的场景

在工程里,CoT 最常见的价值不是“更聪明”,而是更容易 debug。模型如果答错了,你至少能看到它错在第几步。

#Tree of Thoughts

如果任务存在多个分支,而且可能需要回溯,树状探索会更合适。

典型场景包括:

  • 创意方案生成
  • 多路线问题求解
  • 复杂搜索或策略对比

它的核心不是让模型“想得更多”,而是允许模型保留多个候选方向,不要在第一条路上死磕到底。

graph TD subgraph "Chain of Thought (线性)" A[Step 1] --> B[Step 2] --> C[Step 3] end subgraph "Tree of Thoughts (树状)" Root[初始状态] --> P1[路径 A] Root --> P2[路径 B] Root --> P3[路径 C] P1 --> P1_1[A 的下一步] P2 --> P2_1[B 的下一步] P3 --> P3_1[C 的下一步] end

不过实话说,在很多业务系统里,ToT 的理论吸引力大于实际收益。它更适合少量高价值任务,不太适合每次请求都开一棵搜索树,否则成本会很快上来。


#4. 真正让 Agent 变稳的,通常是“会复盘”

只会规划还不够。很多 Agent 的问题不在“不会开始”,而在“做错以后不会纠正”。

这就是 Self-Reflection 或 Reflexion 一类方法有价值的地方。

一个常见闭环可以这样理解:

  1. Actor 先尝试执行任务
  2. Evaluator 检查结果,比如跑测试、校验格式、比对预期
  3. Reflection 用自然语言总结这次失败的原因
  4. Retry 带着修正后的策略再做一次

这套机制在 coding agent 上特别常见。因为代码任务的好处是“能验”,测试过不了就是过不了,不太需要靠主观判断。

例如模型第一次改代码失败,反思里可能记录:

之前只修了渲染逻辑,没有检查服务端和客户端输出是否一致。下一轮优先看 hydration mismatch 的根因,不要继续改样式层。

这种反思一旦保留下来,下一轮的质量通常会明显比“从头再猜一次”更高。


#5. Planning 在实战里怎么落地

如果你不是在写论文,而是在做产品,我更建议用下面这些实用做法。

#先出 plan,再执行

这是最稳的一步。哪怕只是一个很短的 todo list,也比没有强。

例如:

  • 先确认目标和限制
  • 再列 3 到 6 个步骤
  • 每完成一步,更新状态
  • 如果发现前提变了,就重排后续步骤

这能明显减少 Agent 一路跑偏的问题。

#把计划存成显式状态

不要把计划只放在自然语言里。最好有一个结构化状态对象,明确记录:

  • 当前目标
  • 已完成步骤
  • 阻塞点
  • 下一步动作

这样做的好处是,哪怕换了一个 Agent 接手,也能快速知道现在任务走到哪一步。

#允许 Replanning

很多人写规划模块时,默认计划一旦生成就不动了。现实里这几乎不成立。

Agent 在执行中经常会遇到新信息,比如:

  • 文件结构和预期不一样
  • API 权限不够
  • 用户中途补充新约束

这时候一个靠谱的系统应该允许改计划,而不是硬着头皮继续执行旧步骤。

#把“最难验证”的步骤提前

这是个很实用但经常被忽略的技巧。

例如你要接一个第三方 API,不要先把页面全搭好,再发现 token 权限不够。应该先验证 API 能不能通、核心依赖能不能跑,再继续往后做。

把高风险步骤前置,能省掉很多无效工作。


#6. 一个够用的经验法则

如果你现在正在搭 Agent,可以先用这套很朴素的判断:

  • 简单任务:直接做,最多加一步轻量推理
  • 多步骤任务:先拆解,再执行
  • 高失败成本任务:加验证和反思循环
  • 多分支探索任务:再考虑树状搜索或多方案评估

不要一上来就把所有高级模式都堆进去。很多系统最后不稳定,不是因为规划不够复杂,而是因为每一层都很重,结果没人能维护。


#小结

Planning 不是给 Agent 增加“仪式感”,而是让它在复杂任务里少走弯路。

真正有用的规划,通常有三个特征:

  • 能拆成可执行步骤
  • 能在执行中更新
  • 能在失败后复盘

做到这三点,Agent 的表现通常就会从“偶尔很惊艳,但不稳定”,变成“没那么花哨,但真的能持续把事做完”。

常见问题

开发 AI Agent 需要掌握哪些编程语言?
首选 Python 或 TypeScript。Python 是 AI 生态的基石,而 TypeScript 在开发 MCP Server 和网页端交互时效率极高。借助 Cursor 等 AI 原生编辑器,编程门槛已大幅降低。
MCP 协议目前支持哪些模型?
MCP 是开放协议,目前对 Claude 3.5 系列支持最完美。通过 MCP Proxy,GPT-4o 和 Gemini 也可以间接访问 MCP Server 数据源。
AI Agent 会导致程序员失业吗?
不会,但会改变程序员的工作内容。未来的开发者将从“写代码”转向“管理 Agent 团队”,重点在于系统架构设计、复杂逻辑校验和 Agent 的提示词优化。