09 · Plan 模式
先想清楚再动手——Plan 模式是 Cursor 给你的”设计阶段”,让 AI 先做方案,等你批准再写代码。
01 为什么需要 Plan 模式
在之前的文章中,我们介绍了 Cursor 的四层 AI 能力:Tab 补全、Cmd+K 编辑、Chat 对话、Composer/Agent 自主执行。这四层有一个共同特点——它们都默认 AI 马上就开始动代码。
但现实开发中,有些场景你并不希望 AI 直接开写:
- 你还不确定方案对不对,想先讨论
- 架构级改动,影响面大,需要先评估
- 面对一个完全陌生的代码库,想让 AI 先帮你理解
- 实现成本高,想先确认方向再投入
在这些场景下,直接让 Agent 写代码有三个风险:
| 风险 | 表现 | 后果 |
|---|---|---|
| 方向偏差 | AI 选了一条路,但这条路不是你想要的方向 | 写完发现不对,全部重来 |
| 过度实现 | 为了一个问号写了几百行代码 | 浪费 token,浪费时间 |
| 上下文消耗 | Agent 一边探索一边写,很快就耗尽上下文窗口 | 写到一半开始”失忆” |
Plan 模式就是来解决这些问题的。 它把”思考”和”执行”拆成两个阶段:先让 AI 只做调研和方案设计,等你确认了,再让 Agent 去执行。
02 Plan 模式 vs Agent 模式:核心差异
Cursor 的 Chat(Cmd+L)有四个子模式:Ask、Debug、Plan、Agent。其中 Plan 和 Agent 是最容易混淆的两个。
| 维度 | Agent 模式 | Plan 模式 |
|---|---|---|
| 行为 | 直接读代码、改代码、跑命令 | 只读代码、提问、输出方案 |
| 写文件 | 可以创建和修改文件 | 禁止写文件 |
| 跑命令 | 可以执行终端命令 | 只读命令,如 grep、find |
| 输出 | 代码 diff + 执行结果 | Markdown 方案 + 问题 |
| 目标 | 完成任务 | 确认方向 |
| 适用阶段 | 方案确定后 | 方案确定前 |
通俗地说:
Agent 模式是”先干再说”——它拿到任务就开始干;Plan 模式是”先说再干”——它先输出方案让你审,你说 ok 它才动手。
这个区别在 Chat 面板里非常直观:用 Plan 模式时,AI 的回复有明确的”方案结构”——它分析需求、评估影响、给出方案清单,然后等你确认。
03 什么时候用 Plan 模式
场景 1:架构决策
你要给系统加一个”实时通知”功能。是用 WebSocket?Server-Sent Events?还是轮询?这个决策会影响到整个后端和前端的架构。
如果用 Agent 模式,它可能直接选一种它认为最合适的方案开写——也许写完了才发现方案不是你想要的。
用 Plan 模式,你可以问:
“我想给系统加一个实时通知功能。分析一下 WebSocket、SSE、轮询三种方案的优劣,考虑我们的技术栈是 Node.js + React,部署在 Kubernetes 上。”
AI 会输出一个方案对比表,包括每种方案的技术实现、复杂度、性能影响、维护成本。你看了方案,决定用 SSE,然后切换 Agent 模式让它实现。
场景 2:复杂多步骤功能
开发一个”用户邀请系统”——涉及邮件发送、邀请码生成、权限分配、过期处理。这种功能步骤多、分支多,AI 一旦方向偏了,后面整个都偏。
Plan 模式下,你可以让 AI 先输出一份完整的实现计划:
“设计一个用户邀请系统的实现方案,包括:邀请码生成、邮件发送、权限分配、过期处理。输出实现步骤、涉及的文件、每个步骤的依赖关系。”
拿到方案后,你可以:
- 检查有没有遗漏的功能点
- 确认每一步的方案是否合理
- 和 AI 讨论替换某个步骤的实现方式
等方案批准了,再让 Agent 按步骤执行。
场景 3:接手陌生代码库
你刚加入一个新项目,或者要修改一段很久以前写的代码。直接让 Agent 改代码,很可能改出 Bug——因为你(和 AI)都不够理解代码的上下文。
Plan 模式让你先问清楚:
“分析这个项目中认证模块的完整流程。告诉我:代码入口在哪、关键函数是什么、数据流是怎样的、有哪些边界情况处理。”
AI 会阅读相关代码,输出一份代码分析报告。你读完确认理解了,再动手改。
场景 4:评估改动影响面
修改一个 API 接口,它可能被多个前端页面、第三方 SDK、定时任务使用。直接改可能导致连锁报错。
“我要修改
/api/v1/user/profile接口的返回格式。分析所有调用这个接口的地方,评估改动影响。”
AI 会搜索代码库中所有引用,列出影响面,甚至帮你识别哪些是不安全的改动点。
04 Plan 模式的工作流
Plan 模式遵循一个清晰的三个阶段:调研 → 方案 → 执行。
第一阶段:调研(Research)
AI 阅读项目代码,收集信息。它可能做这些事:
- 搜索相关代码(
grep搜索关键函数、接口定义) - 阅读关键文件(读入口文件、配置文件、核心模块)
- 分析依赖关系(谁依赖谁、调用链)
- 检查现有实现(如果是要修改的功能)
这一阶段 AI 只读不写。你看到的是它在疯狂读文件,但不会有任何改代码的动作。
第二阶段:方案(Plan)
AI 输出结构化的实现方案。好的方案应该包含:
## 需求分析
- 明确了哪些需求
- 发现了哪些隐含需求(边界情况、错误处理)
## 实现方案
- 推荐方案 vs 备选方案
- 涉及的文件清单
- 数据结构/接口设计
## 实施步骤
- 步骤 1: xxx
- 步骤 2: xxx
- 步骤 N: xxx
## 风险与注意事项
- 已知的边界情况
- 不建议的做法
- 需要手动确认的点读完方案后,你可以和 AI 讨论、修改、补充细节。这个讨论的成本远低于等代码写完了再改方案的成本。
第三阶段:执行(Execute)
方案通过后,有两种执行方式:
方式 A:在同一对话中,切换到 Agent 模式,让 AI 按计划执行。 方式 B:用 Composer(Cmd+I)新开一个 Agent 任务,把方案内容粘贴进去,让它执行。
05 问好问题:Plan 模式的关键技能
Plan 模式的效果,直接取决于你的提问质量。这不是玄学——一个清晰的 prompt 和一个模糊的 prompt,输出质量的差距是巨大的。
不好的提问 vs 好的提问
| 不好的提问 | 好的提问 |
|---|---|
| ”给我设计一个用户系统" | "设计一个多租户用户系统,支持 Role-Based Access Control。用户表的设计要考虑未来可能扩展到百万级数据。前端需要 React Hook 封装。" |
| "重构这个模块" | "重构 order.ts:把超过 200 行的函数拆成小函数,把逻辑层和数据访问层分离,保持现有接口签名不变。" |
| "帮我优化性能" | "分析 checkout.ts 中的性能瓶颈。重点关注数据库查询次数、N+1 问题、不必要的重渲染。给出优化方案和预期提升。“ |
好 Plan prompt 的模板
## 背景
[当前项目的技术栈、架构风格]
## 目标
[你要实现什么功能]
## 约束条件
[必须在框架内做什么?不能用什么?性能要求?兼容性要求?]
## 需要回答的问题
[你不确定的地方,让 AI 帮你决策的问题清单]例如:
## 背景
项目是一个 Next.js 14 的 SaaS 应用,使用 Prisma + PostgreSQL,部署在 Vercel。
## 目标
实现一个多级审批流程:用户提交申请 → 主管审核 → 经理审批 → 最终确认。
## 约束
- 审批状态变更需要写操作日志
- 每个节点的审批人可以随时修改
- 不超过 5 级审批
## 需要回答的问题
1. 审批工单表应该和业务表分开还是合在一起?
2. 状态机怎么设计才能清晰且可扩展?
3. 通知机制用 WebSocket 还是轮询?为什么?这样 AI 输出的方案才有针对性,有深度。
06 心智模型:Plan 模式是”白板阶段”
好,我们来建立 Plan 模式的心智模型。
在传统软件开发中,你在写代码之前会经历一个”白板阶段”——在文档、白板、或者笔记本上画架构图、写伪代码、推演逻辑。这个阶段的目的不是生成代码,而是理清思路。
Plan 模式就是 Cursor 给你的一块 AI 白板。 在这个白板上,AI 不是”写代码的工具”,而是”和你一起画设计图的搭档”。
区别在于:
- 传统白板上,你画,你看
- AI 白板上,你说,AI 帮你画,你审,你改
心智模型一句话:Plan 模式 = AI 驱动的架构师 + 代码分析师,在写代码开始之前。
这个模型帮你理解几个关键点:
- Plan 模式不用手写任何代码——它的输出是文本、是方案、是设计,不是 diff
- Plan 模式的核心产物是”理解”——你对方案的理解,AI 对代码库的理解
- Plan 模式不是在浪费时间——它是在降低试错成本。改一个方案可能花 5 分钟,改一套写错的代码可能花 5 小时
花在 Plan 上的每一分钟,都是为后面节省的一小时。
07 从 Plan 到 Agent:完整工作流案例
让我们看一个完整的例子。假设你要在一个电商项目中实现”购物车倒计时”功能——用户把商品加入购物车后,商品的价格只在 30 分钟内有效。
Step 1:Plan 模式做方案
在 Chat 中切换到 Plan 模式,输入:
“设计购物车倒计时价格保护机制。用户加购后商品价格锁定 30 分钟,超时后失效。需要考虑:
- 后端如何记录和校验价格锁定
- 前端如何展示倒计时
- 超时后的处理逻辑
- 极端情况:用户在最后一秒下单”
AI 读一遍项目代码后输出方案:
## 需求分析
...
## 推荐方案
- 后端:在 cart_item 表增加 price_locked_at、price_expires_at 字段
- 前端:用 useCountdown hook 实现倒计时展示
- 校验:下单接口校验 price_expires_at > now()
## 涉及文件
- prisma/schema.prisma(加字段)
- services/cart.ts(新增校验逻辑)
- components/CartTimer.tsx(新文件,倒计时组件)
- hooks/useCountdown.ts(新文件)
- pages/api/checkout.ts(改下单接口)
## 步骤
1. 数据库 migration
2. 后端价格锁定逻辑
3. 前端倒计时 hook
4. CartTimer 组件
5. 下单接口集成校验
## 风险
- 服务器时区问题
- 用户设备时间不准确(用服务器时间)
- 最后一秒下单的并发处理Step 2:Review 方案
你看完方案后发现一个问题:方案没有涉及”加购时价格已经变化”的情况(比如用户加购后商品调价了,是按加购时的价还是当前价?)。
你和 AI 讨论后补充了这一项。方案更新完,你确认了。
Step 3:Agent 执行
确认方案后,你可以在同一个对话中切换到 Agent 模式,或者打开 Composer(Cmd+I):
“按我们刚才确认的方案实现购物车倒计时功能。后端数据库 migration、服务层逻辑、前端组件按步骤来。”
Agent 会按方案中的步骤一步步执行。由于方案已经清晰,Agent 的执行效率很高,方向不会偏。
回头看整个过程:
Plan 模式:5 分钟讨论方案 → 发现 1 个遗漏问题 → 修正
Agent 模式:15 分钟完成所有代码
如果没有 Plan:
Agent 直接写 → 写到一半发现方案有问题 → 重来 → 30 分钟+Plan 模式投入的 5 分钟,节省了至少 15 分钟的返工时间。
08 技巧与最佳实践
技巧 1:把 Plan 和 Agent 当作”思考-执行”循环
不要认为 Plan 和 Agent 是二选一的关系。最佳实践是把它们组合成一个循环:
对复杂步骤 → Plan(思考)→ Approved → Agent(执行)
↑ │
└── 发现问题,回到 Plan ──┘每次 Agent 执行完一个步骤,如果发现新问题,切回 Plan 讨论,再继续执行。
技巧 2:利用 Plan 做代码审查
Plan 模式不只是做”功能方案”。你可以用它来做代码审查:
“Act as a senior code reviewer. Review
services/payment.tsfor potential bugs, security issues, and performance problems.”
AI 会在不修改任何代码的前提下,输出一份 code review 报告。
技巧 3:用 Plan 生成长篇文档
因为 Plan 模式不写代码文件,它的回复可以很长。如果你需要 AI 帮你写 API 文档、架构说明、设计文档,用 Plan 模式(或 Ask 模式)——它不会突然开始改代码。
技巧 4:先用 Plan 缩小上下文
面对大项目时,Agent 的上下文窗口容易爆。先用 Plan 模式让 AI 定位到相关的文件:
“在这个项目中,和用户通知相关的代码在哪些文件?列出关键文件和它们的职责。”
拿到准确的上下文后,再切换到 Agent 模式操作相关文件。这样 Agent 的上下文利用率更高。
技巧 5:在 Composer 中引用 Plan 的结论
Composer(Cmd+I)支持 @file 引用。你可以让 Plan 模式的方案输出到一个 markdown 文件中,然后在 Composer 中 @这个文件,告诉 Agent “按照这个方案执行”。这样可以保持 Plan 和 Agent 之间的上下文隔离。
09 Plan 模式的局限性
任何工具都有边界,Plan 模式也不例外:
| 局限性 | 说明 | 应对方式 |
|---|---|---|
| 不适用于小改动 | 改一行代码不需要 Plan | 直接用 Cmd+K |
| 不读外部文档 | Plan 模式只分析你项目内的代码 | 需要查外部 API 时用 @docs |
| 方案可能过于理想 | AI 可能低估复杂度 | 保持质疑,关键路径手动 review |
| 方案深度依赖上下文 | 文件越多、上下文给越准,方案越好 | 用 @file、@folder 明确限定范围 |
| 没有真正的”设计能力” | AI 不会像资深架构师一样考虑长期演进 | 架构决策需要你自己的判断 |
10 小结
| 问题 | 答案 |
|---|---|
| Plan 模式是什么 | Chat 的子模式,AI 只调研和出方案,不改代码 |
| 和 Agent 模式的区别 | Agent 直接动手写,Plan 只动嘴不动手 |
| 什么时候用 Plan | 架构决策、复杂功能、陌生代码库、评估改动影响 |
| 工作流 | 调研 → 方案 → Review → 执行(Agent) |
| 关键技能 | 写好 prompt 模板,要背景、目标、约束、问题 |
| 和 Agent 的关系 | 互补:Plan 思考,Agent 执行,循环迭代 |
| 心智模型 | AI 白板——写代码前的设计阶段 |
总结成一句话:
Plan 模式是 Cursor 给你的”刹车”——在这些 AI 疯狂输出代码的时代,有时候最珍贵的技能不是”让 AI 写得更多”,而是”让 AI 想清楚再写”。
下一篇:10 Agent 模式:从零到一的 AI 编程搭档 —— 让 AI 独立完成完整功能开发,从需求到代码到测试的全流程实战。