Plan 模式深度解析
5.3K字·14分钟·
需求分析、任务拆解、AskUserQuestion苏格拉底式提问
引言
Plan 模式是 CodeBuddy 最具特色的功能之一,它让 AI 从"直接执行者"转变为"思考伙伴"。在 Plan 模式下,CodeBuddy 不会立即编写代码,而是先理解需求、提出澄清问题、制定实现方案,确认后再执行。
这种"先想后做"的工作方式,特别适合处理复杂需求、大型重构和架构设计等场景。本章将深入解析 Plan 模式的工作流程、提问策略和实战应用。
一、Plan 模式 vs 普通模式对比
1.1 核心差异
| 特性 | 普通模式 | Plan 模式 |
|---|---|---|
| 工作方式 | 理解需求后立即执行 | 理解需求→提问→方案→确认→执行 |
| 适用场景 | 简单明确的任务 | 复杂模糊的需求 |
| 用户参与度 | 低,主要在开始和结束 | 高,全程参与决策 |
| 错误风险 | 较高,可能理解偏差 | 较低,多次确认减少误解 |
| 输出质量 | 依赖 AI 理解准确度 | 经过人工审核,质量更高 |
| 执行速度 | 快,直接开始 | 前期慢,后期快(减少返工) |
1.2 何时使用 Plan 模式
适合使用 Plan 模式的场景:
- 需求模糊或有多种实现方式
- 涉及多个模块的大型重构
- 架构设计和技术选型
- 学习和理解复杂代码库
- 团队协作项目的关键决策
不适合使用 Plan 模式的场景:
- 简单明确的 bug 修复
- 格式化和 lint 修复
- 简单的文件操作
- 已经有详细规范的任务
二、5 步工作流详解
2.1 流程总览
启动 Plan 模式 → 探索代码库 → 提出澄清问题 → 制定实现方案 → 确认后执行
↓ ↓ ↓ ↓ ↓
/plan 读取文件 AskUser 输出方案 自动执行
或 plan: 分析结构 Question 等待确认 逐步实施
2.2 步骤一:启动 Plan 模式
# 方式一:使用斜杠命令
/plan
# 方式二:在需求描述前加上 plan:
plan: 重构用户认证模块,支持多种登录方式
# 方式三:在对话中明确要求
"请先做一个实现方案,不要直接写代码"
2.3 步骤二:探索代码库
CodeBuddy 进入 Plan 模式后,会主动探索相关代码:
# CodeBuddy 会自动执行:
# 1. 读取项目结构
# 2. 分析相关文件
# 3. 理解现有架构
# 4. 识别依赖关系
# 你也可以引导探索方向:
"请先看一下 src/auth/ 目录的结构"
"重点看看现有的认证中间件是怎么实现的"
2.4 步骤三:提出澄清问题
这是 Plan 模式最核心的环节——CodeBuddy 通过提问来澄清需求:
CodeBuddy: 我分析了现有的认证模块,有几个问题需要确认:
1. 你说的"多种登录方式"具体包括哪些?
- 用户名/密码
- 手机号/验证码
- 第三方 OAuth(微信/Google/GitHub)
- 以上全部?
2. 现有的 JWT token 策略是否需要调整?
- 当前:access_token 15分钟,refresh_token 7天
- 是否需要支持"记住我"功能?
3. 数据库方面:
- 用户表是否需要新增字段?
- 第三方登录信息存储在独立表还是扩展用户表?
2.5 步骤四:制定实现方案
根据你的回答,CodeBuddy 输出详细的实现方案:
## 实现方案:多方式登录认证模块
### 架构设计
- 采用策略模式(Strategy Pattern)统一处理不同登录方式
- 新增 AuthProvider 接口,各登录方式实现该接口
- 使用 Passport.js 作为认证框架
### 文件变更
| 文件 | 操作 | 说明 |
|------|------|------|
| src/auth/providers/ | 新增 | 各登录方式的 Provider |
| src/auth/auth.service.ts | 修改 | 集成多种登录方式 |
| src/auth/auth.controller.ts | 修改 | 新增登录接口 |
| prisma/schema.prisma | 修改 | 扩展用户表 |
### 实施步骤
1. 定义 AuthProvider 接口
2. 实现 EmailProvider(用户名/密码)
3. 实现 PhoneProvider(手机/验证码)
4. 实现 OAuthProvider(第三方登录)
5. 修改 AuthService 集成各 Provider
6. 更新 API 接口
7. 编写测试用例
### 预计工作量
- 代码编写:约 2-3 小时
- 测试验证:约 1 小时
- 总计:约 3-4 小时
2.6 步骤五:确认后执行
# 确认方案
"方案没问题,开始执行吧"
# 或者提出修改
"第3步先做 OAuth,手机号验证后面再加"
# 或者要求细化
"请详细说明 Passport.js 的配置方式"
三、AskUserQuestion 四种场景
3.1 需求模糊场景
用户:"优化一下首页性能"
CodeBuddy (Plan 模式):
我需要了解更多背景:
1. 当前首页有哪些性能问题?
- 加载速度慢?(白屏时间长)
- 交互卡顿?(点击响应慢)
- 还是 Lighthouse 分数低?
2. 目标指标是什么?
- FCP < 1.5s?
- LCP < 2.5s?
- CLS < 0.1?
3. 是否有现成的性能监控数据?
3.2 技术选型场景
用户:"我想给项目加一个状态管理库"
CodeBuddy (Plan 模式):
项目目前使用 React,状态管理有几个主流选择:
| 方案 | 优点 | 缺点 | 适用场景 |
|------|------|------|----------|
| Zustand | 轻量、简单 | 生态较小 | 中小型项目 |
| Redux Toolkit | 生态成熟 | 样板代码多 | 大型复杂项目 |
| Jotai | 原子化、高性能 | 学习曲线 | 高性能要求 |
| Context + useReducer | 无额外依赖 | 性能问题 | 简单状态 |
几个问题:
1. 项目规模和团队熟悉度?
2. 是否需要持久化和离线支持?
3. 对包大小有要求吗?
3.3 复杂重构场景
用户:"重构现有的 API 层,支持统一错误处理"
CodeBuddy (Plan 模式):
当前 API 层的问题我看到了:
- 错误处理分散在各个 controller
- 没有统一的错误码体系
- 响应格式不一致
重构方案需要确认:
1. 错误码体系:使用 HTTP 状态码还是自定义业务码?
2. 响应格式:是否统一为 { code, data, message } ?
3. 是否需要支持国际化错误消息?
4. 现有 API 是否需要全部迁移,还是渐进式重构?
3.4 学习探索场景
用户:"帮我理解这个项目的认证流程"
CodeBuddy (Plan 模式):
我来帮你梳理。先确认几个问题:
1. 你想了解哪个层面?
- 整体架构概览
- 具体代码实现
- 安全机制设计
- 还是扩展开发指南
2. 你目前对哪些概念熟悉?
- JWT
- OAuth 2.0
- 中间件模式
四、苏格拉底式提问法
4.1 什么是苏格拉底式提问
苏格拉底式提问法是一种通过连续提问引导思考的方法。CodeBuddy 的 Plan 模式借鉴了这种方法,通过提问帮助你:
- 发现需求中隐藏的假设
- 考虑被忽略的边界情况
- 明确真正的需求目标
- 理清实现的优先级
4.2 提问层次
# 第一层:事实性提问
"当前系统的用户量是多少?"
# 第二层:澄清性提问
"你说的'优化'是指响应时间还是吞吐量?"
# 第三层:假设性提问
"如果用户量增长10倍,当前方案还能支撑吗?"
# 第四层:开放性提问
"你觉得理想的用户体验应该是什么样的?"
五、完整实战案例
场景:设计一个实时聊天功能
# 用户输入
/plan 实现一个实时聊天功能
# CodeBuddy 的 Plan 模式响应
CodeBuddy: 我来帮你规划实时聊天功能。首先需要了解几个关键点:
## 需求澄清
1. **聊天类型**:
- 一对一私聊
- 群组聊天
- 还是两者都要?
2. **实时性要求**:
- 消息延迟容忍度?(< 100ms 还是 < 1s)
- 是否需要消息送达回执?
- 是否需要在线状态显示?
3. **功能范围**:
- 文本消息
- 图片/文件发送
- 消息撤回
- 历史消息加载
- 消息搜索
4. **技术约束**:
- 是否有现成的 WebSocket 基础设施?
- 消息存储方案偏好?(MySQL/MongoDB/Redis)
# 用户回答
一对一和群聊都要,延迟<500ms,先做文本消息,
使用现有的 Socket.io,消息存 MySQL
# CodeBuddy 输出方案
## 实时聊天实现方案
### 技术选型
- WebSocket:Socket.io(已有基础)
- 消息存储:MySQL + Redis 缓存
- 消息队列:Redis Pub/Sub
### 数据库设计
- conversations 表:会话信息
- messages 表:消息记录
- participants 表:会话参与者
### API 设计
- POST /api/conversations:创建会话
- GET /api/conversations/:id/messages:获取历史消息
- WebSocket event:message:send / message:receive
### 实施步骤
1. 数据库迁移
2. Socket.io 事件定义
3. 消息发送/接收逻辑
4. 离线消息处理
5. 前端 UI 组件
确认后开始执行?
六、常见陷阱与最佳实践
常见错误
- 过度使用 Plan 模式:简单任务也用 Plan 模式,降低效率
- 需求描述太模糊:导致 AI 提问过多,流程冗长
- 跳过确认环节:方案未确认就执行,可能偏离需求
- 不回答澄清问题:AI 无法准确理解需求
最佳实践
- 明确使用场景:复杂需求用 Plan 模式,简单任务用普通模式
- 提供充分背景:在启动 Plan 模式时尽量描述清楚需求
- 认真回答问题:AI 的提问是为了更好地理解你的需求
- 审阅实现方案:在确认前仔细检查方案是否符合预期
- 灵活调整方案:可以要求 AI 修改方案的任何部分
总结
Plan 模式是 CodeBuddy 处理复杂需求的利器:
- 先想后做:避免理解偏差导致的返工
- 苏格拉底式提问:通过连续提问澄清需求
- 方案可视化:输出结构化的实现方案
- 人工确认:确保方向正确后再执行
- 灵活适用:适合需求模糊、技术选型、复杂重构等场景
下一章我们将探索 Subagents 子代理系统,了解如何通过并行执行提升效率。