OpenCode 实战:高效 Prompt 编写与任务拆解的十大技巧

OpenCode 实战:高效 Prompt 编写与任务拆解的十大技巧

引言

无论你用的是 OpenCode、Cursor 还是 GitHub Copilot,有一个铁律始终成立:垃圾入,垃圾出。AI 编程助手的能力上限,往往不取决于模型本身有多强,而取决于你给它下达的指令有多清晰。

OpenCode 作为一款开源的终端 AI 编程助手,提供了思考模式、并行 Agent、Skills 系统等一系列高级能力。但这些工具只有在搭配高质量的 Prompt 时,才能发挥出最大的威力。

本文将从实战角度出发,总结十条经过反复验证的 Prompt 编写与任务拆解技巧,帮助你把 OpenCode 从一个"会写代码的聊天机器人"变成"真正能独立交付任务的 AI 工程师"。

技巧一:说清"是什么"而非"怎么做"

很多开发者习惯把自己当成技术 Leader,给 AI 下指令时写得像伪代码:

# 错误的写法
把 users 表的数据查出来,循环遍历,对每个用户判断是否过期,
如果过期就更新 status 字段为 0,然后记录日志。

这种指令混杂了"需求"和"实现方案",限制了 AI 的发挥空间。更好的写法是:

# 正确的写法
实现一个用户过期状态批量更新功能:
- 输入:无
- 输出:将 is_expired=1 的用户 status 更新为 0
- 要求:更新过程中记录每次操作的日志,包含用户 ID、原状态、新状态、时间戳
- 边界条件:单次更新失败不影响其他用户

把"怎么做"留给 AI,它会给出你可能没想到的更优方案——比如它可能会建议用批量 SQL 而非逐行循环。

技巧二:用边界条件框定范围

没有边界的需求是噩梦。一个好的 Prompt 必须包含三类边界:

请为订单模块编写退款接口:

【正常路径】
- 订单状态为"已支付"时,用户可申请退款
- 退款金额原路返回支付渠道

【边界条件】
- 已发货的订单不可在线退款,需走售后流程
- 部分退款需要重新计算优惠分摊
- 退款金额不得超过实付金额

【异常处理】
- 支付渠道回调超时时,标记为"退款处理中"而非"退款失败"
- 并发退款请求需幂等

OpenCode 在阅读这类结构化 Prompt 时,会更有针对性地查找代码上下文、生成防御性代码,而不是只写一个 Happy Path。

技巧三:分而治之——多 Agent 并行拆解

OpenCode 支持同时启动多个 Agent 并行工作。面对大任务时,不要试图用一条 Prompt 解决所有问题。

错误做法:一条 Prompt 描述整个电商系统后台。

正确做法

# 在 OpenCode 中分别发起多个 Agent
"设计数据库 ER 图,输出 users/orders/products 三张表的 DDL"
"实现用户注册登录模块,包含 JWT 认证和邮箱验证"
"实现商品 CRUD 接口,支持分页和多条件筛选"
"实现订单创建流程,包含库存锁定和超时取消"

每个 Agent 聚焦一个独立模块,互相不干扰。完成后,OpenCode 会自动合并结果。这种并行拆解方式比串行逐一执行效率高出数倍。

技巧四:提供真实的数据样例

抽象描述不如一个具体示例。比如你想让 OpenCode 生成数据迁移脚本:

# 模糊描述
把旧格式的用户地址数据迁移到新格式

# 带示例的描述
将 address 字段从逗号分隔的字符串迁移为 JSON 对象:

旧格式:
"广东省,深圳市,南山区,科技园路1号"

新格式:
{
  "province": "广东省",
  "city": "深圳市",
  "district": "南山区",
  "detail": "科技园路1号"
}

处理缺失字段时用空字符串填充,不要抛异常。

AI 看到一个具体例子,理解的准确度远高于听一百句描述。这条规则适用于代码生成、测试用例编写、文档撰写等所有场景。

技巧五:要求"先计划,再执行"

OpenCode 的思考模式允许 AI 先进行深度推理再动手。但你还可以更进一步——在 Prompt 中显式要求两步走:

请为这个项目添加 Redis 缓存层。先分析现有代码的数据流,
给出缓存方案(包括哪些接口适合缓存、缓存键设计、过期策略),
等我确认后再动手实现。

这个技巧对于以下场景尤其有用:

  • 架构级别的改动
  • 涉及多文件的跨模块重构
  • 你不确定最佳方案的需求

分步确认可以避免 AI 在一开始就走错方向,浪费大量 token 还得回滚重来。

技巧六:善用 OpenCode 的 todo 系统

当你一次性提出多个需求时,OpenCode 会自动生成 todo 列表。你可以直接在 Prompt 中预定义任务优先级,引导任务排序:

我需要完成以下工作,请按我标注的优先级依次执行:

[P0] 修复登录页面的 CSRF token 失效问题
[P1] 为 UserController 的五个方法补充参数校验
[P2] 将旧的 mysqli 查询全部改为 PDO 预处理语句
[P3] 添加 PHPStan 静态分析到 CI 流程

P0 和 P1 完成后向我汇报,再继续 P2 和 P3。

显式指定优先级让 OpenCode 的 todo 管理器与你的真实预期对齐,避免它在次要任务上花费过多时间。

技巧七:引用项目上下文,减少重复解释

OpenCode 的一个核心优势是它对工作目录有完整的文件感知能力。你不需要在每次 Prompt 中重复描述项目结构,只需精准引用:

# 啰嗦的写法
这个项目用的是 Laravel 10,Eloquent ORM,数据库是 MySQL 8.0。
User 模型在 app/Models/User.php 里,表名是 users……
请帮我写一个查询最近 7 天注册用户的接口。

# 精简的写法
参考 app/Models/User.php,新增一个查询最近 7 天注册用户的接口。

OpenCode 会自动读取引用路径的文件,推断框架、ORM、命名空间等上下文信息。养成"引用文件路径"的习惯,能大幅节省上下文窗口的消耗。

技巧八:把验收标准写进 Prompt

软件开发中最耗时的是什么?不是写代码,而是来来回回的修改。在 Prompt 末尾加上验收标准,让 AI 自检后再输出:

实现用户密码重置接口:

功能:
1. 接受邮箱参数,生成 6 位验证码,有效期 10 分钟
2. 验证码通过后,允许设置新密码(至少 8 位,含大小写字母和数字)

验收标准:
- [ ] 验证码在 Redis 中的 key 以 `reset:` 为前缀
- [ ] 同一邮箱 1 分钟内不可重复发送验证码
- [ ] 新密码不能与旧密码相同
- [ ] 重置成功后,该用户的所有旧 token 全部失效
- [ ] 每个分支都有对应的单元测试

这条技巧的价值在于:它让 AI 在生成代码时有了自我检查的意识,输出质量明显提升。

技巧九:用"角色切换"激活领域知识

虽然 OpenCode 默认就是编程角色,但你可以在 Prompt 中进一步细化角色,激活模型更精准的领域知识:

# 通用 Prompt
帮我写一条复杂的 SQL 查询

# 角色化 Prompt
你是一名 DBA,正在审查一条慢查询。请将以下 ORM 代码改写为
原生 SQL,并给出三种优化方案,标注每种方案的适用场景和
潜在风险:
[粘贴代码]

角色切换会让 AI 在响应时调用更专业的思维框架。试试这些角色:

  • "你是一名安全审计专家" → 更适合做代码安全审查
  • "你是一名 SRE" → 更擅长分析系统可靠性和性能
  • "你是一名 Code Reviewer" → 会按团队规范给出结构化的 Review 意见

技巧十:迭代式对话——把 AI 当成结对编程伙伴

新手最容易犯的错误是把 AI 当成一次性代码生成器。正确的姿势是迭代式对话

# 第一轮:出方案
"这个支付回调接口需要考虑哪些异常场景?给我枚举出来"

# 第二轮:写主体
"好,按你列的场景,先实现正常回调处理逻辑"

# 第三轮:补边缘
"现在补充支付超时和重复通知两种场景的处理"

# 第四轮:加测试
"针对以上三种场景,各写两个测试用例"

# 第五轮:做优化
"审视刚才的代码,有没有可以提取出来的公共逻辑?帮我重构"

这种对话方式模拟了真实的结对编程节奏——每一轮聚焦一个小目标,步步为营。相比一次性把需求全倒给 AI,迭代式对话的错误率更低、代码质量更高。

总结

这十条技巧可以归纳为一个核心原则:把 AI 当成一个有超强执行力但需要清晰指引的高级工程师。你提供的上下文越精准、边界越明确、验收标准越具体,它交付的代码就越符合预期。

一个实用的记忆框架:

| 阶段 | 关键动作 |
|------|---------|
| 拆解 | 大任务拆成小任务,能并行就不串行 |
| 描述 | 说清楚"是什么",附上示例数据 |
| 约束 | 标注边界条件、异常处理、验收标准 |
| 执行 | 先计划后实现,迭代式推进 |
| 验收 | 让 AI 按标准自检后再交付 |

OpenCode 提供了思考模式、多 Agent 并行、文件上下文感知等强大能力,配合本文的技巧使用,你会发现它的产出质量跃升不止一个档次。从今天开始,尝试用这些技巧重构你的 Prompt,看看 AI 能给你带来怎样的惊喜。