为什么需要工作流

很多人使用 AI 编程助手的方式是:直接输入需求,然后接受或拒绝 AI 的修改。这种方式对于简单任务没问题,但面对复杂需求时,往往会遇到:

  • AI 理解偏差,修改方向错误
  • 一次性修改太多文件,难以审查
  • 发现问题后难以回退
  • 缺乏上下文,AI 做出不合适的假设

Plan-Build-Review 工作流通过分阶段协作,解决这些问题。

三阶段工作流

阶段一:Plan(规划)

在 Plan 模式下,AI 只分析和规划,不实际修改文件。使用 Shift+Tab 切换到 Plan 模式:

> 我需要给这个 API 添加分页功能

[Plan 模式]
好的,我来分析一下:

1. 当前状态:
   - 发现 src/api/users.ts 中有 getUsers 函数
   - 当前返回所有用户,没有分页

2. 建议方案:
   - 修改 getUsers 接受 page 和 pageSize 参数
   - 使用 SQL OFFSET/LIMIT 实现分页
   - 返回 { data, total, page, pageSize } 格式

3. 需要修改的文件:
   - src/api/users.ts
   - src/types/api.ts(添加分页类型)

是否继续?

在这个阶段,你可以:

  • 审查 AI 的理解是否正确
  • 讨论方案的优劣
  • 补充遗漏的上下文
  • 迭代调整方案

阶段二:Build(构建)

确认方案后,切换回 Build 模式(Shift+Tab),让 AI 执行修改:

> 方案没问题,开始实施

[Build 模式]
正在修改文件...

✓ src/types/api.ts - 添加 PaginationResult 类型
✓ src/api/users.ts - 实现分页逻辑

修改完成。共修改 2 个文件。

阶段三:Review(审查)

审查 AI 的修改:

  • 使用 git diff 查看变更
  • 运行测试确认功能正常
  • 检查代码质量

如果发现问题,使用 /undo 回退:

> /undo

已撤销上一次修改。

然后回到 Plan 模式重新讨论方案。

实用操作技巧

@ 引用文件

使用 @ 可以引用特定文件,帮助 AI 理解上下文:

> @src/database/schema.ts 帮我写一个查询,获取这个表中的活跃用户

! 执行命令

使用 ! 前缀可以直接执行命令:

> !npm test

运行测试...
✓ 15 tests passed

多轮迭代

不要期望一次就完美。通过多轮对话迭代改进:

> 这个函数的错误处理不够完善

[AI 改进错误处理]

> 还需要添加日志

[AI 添加日志]

> 很好,现在帮我写单元测试

[AI 编写测试]

最佳实践

  1. 小步快跑:每次只处理一个小任务,避免一次性修改太多
  2. 明确上下文:提供足够的背景信息,减少 AI 的猜测
  3. 及时审查:每次修改后立即审查,不要积累太多变更
  4. 善用回退:发现问题立即 /undo,不要硬着头皮继续
  5. 保持对话:在一个会话中完成相关任务,保持上下文连贯

工作流示例

以下是一个完整的工作流示例:

# 1. 进入项目
cd my-project
opencode

# 2. Plan 模式:分析需求
[Shift+Tab 切换到 Plan]
> 我需要给这个 Express 应用添加 JWT 认证

# 3. 讨论方案
> 我倾向于使用 express-jwt 中间件
> 数据库用 PostgreSQL

# 4. Build 模式:执行修改
[Shift+Tab 切换回 Build]
> 方案确认,开始实施

# 5. Review:审查修改
!git diff
!npm test

# 6. 如有问题,回退重来
> /undo
> 我们换个方案...

总结

Plan-Build-Review 工作流的核心是:先理解,再行动,后验证。通过这种方式,你可以更好地控制 AI 的行为,获得更高质量的代码。