← 返回教程库

Plan 模式——让 Agent 先想清楚再动手

最后更新 2026-06-25
你将学到
  • 理解 Plan 模式的核心机制——先出方案、人工确认、再执行——以及它为什么能大幅降低"改飞"概率
  • 掌握 Claude Code 和 Cursor 进入 Plan 模式的具体操作步骤,知道"你应该看到什么"
  • 学会审计划和纠偏:哪些信号说明计划有问题、怎么改才不让 Agent 跑偏
  • 判断什么时候该用 Plan 模式,什么时候直接干反而更快

AI 改飞一整个项目,往往不是因为模型不够聪明——是你没让它先说清楚要干什么。

你发一条需求,它立刻开始动:改这个文件、删那个函数、顺手重构了一段你没提到的逻辑。五分钟后你看结果,发现方向就不对。这时候你只能撤回——但它已经动了十几个文件,git diff 乱成一锅粥,撤也不好撤。

这是 AI 编程工具最常见的失控场景之一,根因不是工具问题,是工作流问题:没有给 Agent 一个"先规划再执行"的卡口。

Plan 模式就是这个卡口。


Plan 模式是什么,解决什么问题

Plan 模式的逻辑很简单:Agent 先输出一份执行计划,等你确认,再开始真正的操作。

没有 Plan 模式时,流程是:

你说需求 → Agent 立刻动手 → 你看结果(可能已经偏了)

有 Plan 模式时,流程变成:

你说需求 → Agent 出计划 → 你审计划(可以纠偏)→ 确认 → Agent 执行

多出来的那步"你审计划",就是所有价值所在。

它能解决三类问题:

1. 方向偏差:你的需求描述有歧义,Agent 理解的不是你想要的。计划阶段你能看出来,比执行完再发现要便宜得多。

2. 范围膨胀:Agent 很爱"顺手"做它觉得好的事情,改着改着多动了一堆你不想动的地方。计划里你能看到它打算碰哪些文件。

3. 路径错误:它选了一个你觉得有问题的实现思路——比如用了你不想引入的库,或者绕路了。计划里指出来,比等它写完再推翻要省力得多。

简单说:Plan 模式让你花一分钟审计划,省去二十分钟修烂代码。


Claude Code 的 Plan 模式:怎么进入与使用

Claude Code 的 Plan 模式不需要额外安装或配置,直接在对话里触发。

进入方式

> 提示符后,把你的需求加上"先给我一个计划"或者直接说"不要执行,先 plan":

> 我想把用户认证模块从 JWT 改成 session-based,先给我一个修改计划,不要动代码

或者更直接:

> plan: 把 src/auth 里的 JWT 验证逻辑替换成 express-session,列出要改哪些文件、改什么

你应该看到什么

Claude Code 会输出一份结构化的计划,类似这样:

Here's my plan for migrating from JWT to session-based auth:

Files to modify:
1. src/auth/middleware.js - 替换 verifyToken() 为 session 校验
2. src/auth/login.js - 把 jwt.sign() 改成 req.session.userId = user.id
3. src/app.js - 添加 express-session 中间件配置
4. package.json - 移除 jsonwebtoken,添加 express-session、connect-mongo

Files to create:
- src/auth/sessionConfig.js - session 配置和 store 设置

Files NOT touched:
- src/models/ - 用户数据模型不用动
- src/routes/ - 路由层不需要变

Potential risks:
- 现有已颁发的 JWT token 会立刻失效,需要告知用户重新登录
- 如果你的应用是多实例部署,需要配置共享 session store(如 Redis),否则负载均衡会出问题

Should I proceed?

注意看这份计划里的三个维度:要改什么、不动什么、潜在风险。一份好的 plan 应该三个都有。如果它只列了"要改什么",你可以追问"会不会影响到其他地方"。

确认执行

计划没问题就直接回复确认:

> 可以,继续执行

想改计划就直接说:

> 先不移除 jsonwebtoken,先并行跑一段时间,加一个 feature flag 控制走哪套逻辑

它会更新计划,等你再次确认,才开始动。


Cursor 的 Plan 类机制

Cursor 没有一个叫"Plan 模式"的开关,但它的 Agent 模式多步操作在一定程度上有类似效果。

在 Cursor 里触发规划行为

打开 Cursor 的 Composer(Cmd+ICtrl+I),切到 Agent 模式(右上角下拉选 "Agent"),然后这样说需求:

先不要动任何文件。我想把用户认证从 JWT 改成 session,你先列出你打算修改的文件和主要步骤,等我确认后再开始

你应该看到什么:Cursor Agent 会在 Composer 面板里输出一段规划文字,列出它打算操作的文件。还没有任何文件被修改,右侧不会出现 diff。

查看和确认改动

Cursor 的一个实用机制是每个文件改动都会单独展示 diff,你可以逐个 Accept 或 Reject,不需要全盘接受。这本质上是另一种"计划确认"——只不过是在执行过程中而不是执行前。

如果你已经让它开始执行,但中途发现方向不对,直接在 Composer 里说:

停,先不要继续。把你已经做的改动还原,我们重新规划

然后重新描述需求,这次说清楚边界。


一个真实例子:复杂需求从 Plan 到执行

场景:你有一个 Express + MongoDB 的博客后端,想加一个"草稿自动保存"功能。

第一步:发需求,要计划

> 我想给文章编辑页面加一个草稿自动保存功能,每 30 秒保存一次。先给我一个计划,不要动代码。要求:
  1. 不影响现有的"发布"逻辑
  2. 草稿不算发布,不出现在文章列表里
  3. 用户能看到"上次保存时间"

第二步:审计划——看这几个信号

收到计划后,重点检查:

信号1:它是否理解了"不影响现有发布逻辑"

如果计划里要改 createPostpublishPost 的主函数,要警惕——问它为什么需要改,逼它解释。

信号2:数据结构是否合理

草稿自动保存通常有两种方案:加一个 draft 字段到现有 Post 表,或者单独建 Draft 集合。两种方案各有取舍,计划里应该提到它选了哪种、为什么。如果它没解释,让它解释。

信号3:前端部分是否考虑到了

"上次保存时间"需要前端有一个轮询或者显示逻辑,如果计划只改了后端,忘了前端,现在指出来比等它写完后端再说要好。

第三步:纠偏

假设它计划里的方案是把草稿存在 localStorage(你不想这样),你直接说:

> 草稿要存到数据库,不要用 localStorage。用户换浏览器也能找回草稿。
  重新更新计划。

等它给出新计划,确认没问题再放行。

第四步:执行后验证

执行完,跑一遍你自己的验证:草稿保存了吗?发布流程还正常吗?文章列表里没出现草稿?

Plan 模式减少了偏差,但不是零风险——执行后你还是要检查。关于这套"指定→规划→实现"的完整工作流,见 SDD 规范驱动开发


什么时候该用 Plan,什么时候直接干更快

Plan 模式不是万能药,用错地方反而拖慢你。

适合用 Plan 的场景

  • 需求涉及多个文件:改动在 3 个以上文件,用 Plan 能让你看清楚它的整体思路,避免遗漏或越界。
  • 有明确的"不能碰"区域:比如"不影响现有 API"、"不改数据库结构",这些边界条件需要在计划阶段显式确认。
  • 需求描述有歧义:你自己也不确定怎么实现,Plan 阶段可以看它的方案再决定接受还是换思路。
  • 高风险操作:删数据、改数据库 schema、动核心业务逻辑,先看计划再动。

直接干更快的场景

  • 改动明确且小:"把这个函数的返回值从 string 改成 number"——范围清晰,不需要 plan。
  • 探索性修改:你自己也不确定最终要什么,希望先看看效果再说,这时候直接让它改,看结果再迭代。
  • 有完整测试覆盖:如果改了出错,测试会抓住,Plan 价值降低。
  • 你已经非常熟悉这块代码:你自己能预判它会改哪里,就不需要它先汇报了。

经验法则:改动超过 3 个文件、或者需求里有"不能影响 XX"的边界条件,几乎一定值得先 plan。


故障排查表

症状 原因 解法
说了"先 plan"但它还是直接开始改文件 提示词不够明确,或 Agent 惯性 加更强的约束:"在我回复'确认'之前,不要修改任何文件"
计划里列了文件,但执行时改了计划外的文件 Agent 执行中发现了"关联问题"自作主张 执行完用 git diff 对比计划;下次在提示词里加"只改计划里列出的文件,其他的告诉我再说"
给出的计划太粗,看不出它打算怎么做 需求描述太模糊,或你的约束条件没说 追问具体方案:"列出每个文件具体改哪个函数、改成什么逻辑"
执行后结果和计划描述不一致 Agent 在执行中遇到了意外情况,偷偷换了方案 git log --oneline + git diff 复盘;大型任务考虑用 Subagent 分步执行
每次改都要 plan,效率感觉低了 Plan 模式用在了不该用的地方 参考上一节"什么时候直接干更快",小改动不需要 plan

常见问题

Q:Claude Code 有没有一个正式的"Plan 模式"按钮?

没有专门的开关,是通过提示词控制的。效果和你怎么说有直接关系——"先给我一个计划,不要动代码"比"帮我改一下"能多出一个确认环节。Claude Code 的上下文管理细节见 上下文是一切:引用规则

Q:计划批准了,执行过程中能打断吗?

可以。Claude Code 里随时按 Ctrl+C 中断;Cursor 在 Composer 里也可以手动停止。中断后用 git statusgit diff 看它改了哪些,决定是回滚还是继续。

Q:Plan 模式和 CLAUDE.md 里写的规则有什么关系?

CLAUDE.md 是持久规则,每次对话都生效,适合写长期不变的约束(比如"永远不动 legacy 目录")。Plan 模式是单次操作的确认机制。两个配合用:规则管底线,Plan 管具体任务的方向确认。关于如何写好 CLAUDE.md,见 上下文是一切:引用规则

Q:需求很长、很复杂,Plan 会不会也写得乱?

需求越复杂,越要拆成小段喂给它。一个 1000 字的需求描述,Agent 很可能抓住的重点和你以为的不一样。拆分方法:先 plan 整体架构,确认后再 plan 每个模块的具体实现。分层规划,比一次性抛出全部需求效果更好。


增量提示:把"等待确认"写进项目规范

如果你有团队在用同一套 AI 工具,可以在项目的 CLAUDE.md 或者 Cursor 的 .cursorrules 里直接写死这条规则:

在执行任何涉及多文件的修改之前,必须先输出执行计划,等用户回复"确认"或"proceed"后才能开始修改文件。

这样不需要每次手动要求 plan,规则自动生效。SDD 规范驱动开发 里有这套工作流更完整的描述。


相关延伸:


👉 看看我们的 AI 编程实战体系课,或逛 AI 编程教程大全 把基本功打扎实。

📄 来源 / 自校链接

本文为学习整理,关键步骤与代码请结合下列官方来源验证。

内容有错、看不懂、或想看下一期?告诉我们 →

本文为学习与落地整理,AI 工具与平台更新较快,关键步骤请结合官方最新资料验证。见免责声明