让 AI 写出一段能运行的代码并不难,难的是让结果符合现有系统的业务规则、工程规范和修改边界。当请求只描述功能名称时,缺失的信息往往会被模型用默认假设补齐,随后带来偏差和返工。要改善这种协作效果,需要先明确一条编程 Prompt 应当提供哪些必要事实,以及如何定义可检查的交付结果。

不少开发者把 AI 编程效果不好,归结为“自己不会写 Prompt”。
于是开始寻找:
但在真实开发中,AI 输出不可靠,通常不是因为少了一句“你是一名资深工程师”。
更常见的原因是:
如果 Prompt 只是一句:
帮我写一个取消订单接口。
AI 当然可以写出代码。
但它不知道你的订单状态有哪些、谁可以取消、取消后如何处理库存、异常应该怎样返回、代码应该放在哪个模块。
所以,高质量编程 Prompt 的重点不是“写得多”,而是:
用最少但足够的信息,让 AI 知道要解决什么、在什么环境中解决、哪些事情不能擅自假设,以及结果如何验收。
本文不推荐万能 Prompt,也不比较不同模型。
我们只解决一个问题:
一条能够进入真实研发流程的编程 Prompt,到底应该包含什么?
为了避免把 Prompt 变成新的焦虑来源,先明确几件事:
Prompt 的作用是降低沟通成本,不是跳过工程流程。
先看一个常见请求:
帮我用 Java 写一个取消订单接口。
这句话的问题不在于太短,而在于关键决策全部缺失。
AI 需要自行猜测:
它最终给出的,只能是一种“通用假设下的答案”。
而真实项目需要的,是“符合当前系统约束的答案”。
可以把 Prompt 质量理解为下面这个公式:
Prompt 质量
= 明确任务
+ 足够上下文
+ 已确认规则
+ 可验证标准
+ 可审查交付方式
其中任何一项缺失,AI 都会用自己的默认假设补齐。
默认假设越多,返工概率通常越高。
在介绍具体模板前,先记住三个原则。
先说明已知的项目事实,再说明想让 AI 完成什么。
不要只说“实现取消订单”,而要说明项目技术栈、现有状态、相关模块和已经确认的业务规则。
对涉及状态流转、数据库、权限、金额、并发和跨模块修改的任务,第一轮不要直接要代码。
先让 AI 复述问题、列假设、给方案、标风险。
等关键决策确认后,再让 AI 生成最小实现。
对于不完整的信息,不要让 AI 悄悄补全。
应该明确要求它区分:
已确认事实
↓
可以给出实现建议的部分
↓
必须由产品、业务或开发者确认的假设
这样,AI 的回答会更接近一份可讨论的方案,而不是一个看似完整、实际建立在猜测上的答案。
任务目标要足够具体,最好包含:
例如:
任务目标:
在订单模块中新增用户取消待支付订单的能力。
范围:
只处理 PENDING_PAYMENT 状态的订单。
本次不处理:
已支付订单退款、库存恢复和优惠券返还。
相比“写一个取消订单接口”,这段描述已经明确了功能边界。
常见误区:
把目标写成“优化一下”“重构一下”“帮我完善一下”。
这类表述没有说明成功是什么样,AI 只能按自己的理解扩大或缩小修改范围。
项目上下文不是把整个仓库复制给 AI。
它是提供完成本次任务所必需的最小事实。
一般至少包含:
| 上下文类型 | 示例 |
|---|---|
| 技术栈 | Java + Spring Boot + JPA |
| 模块位置 | order 模块,业务逻辑放在 Service |
| 相关代码 | OrderService、订单状态枚举、现有异常类 |
| 现有规范 | 统一使用领域异常,Controller 不写业务逻辑 |
| 验证方式 | 单测命令、接口测试方式、静态检查要求 |
例如:
项目上下文:
- 后端使用 Java + Spring Boot。
- Controller 负责参数接收,业务逻辑位于 Service。
- 数据访问通过 OrderRepository。
- 业务错误统一抛出 DomainException。
- 当前订单状态定义在 OrderStatus 枚举中。
- 修改后需要补充 Service 层单元测试。
上下文越贴近当前任务,AI 的方案越容易适配项目。
这部分决定了 AI 生成内容是否会偏离业务。
需要把已经确认的规则写成可检查的条目:
已确认规则:
1. 只有订单所属用户可以取消订单。
2. 只有 PENDING_PAYMENT 状态允许用户取消。
3. 取消后订单状态改为 CANCELLED。
4. 请求必须携带取消原因,原因长度为 1 到 200 个字符。
5. 同一订单的并发取消请求只能有一个成功。
同时,也要写出限制条件:
实现约束:
- 不新增第三方依赖。
- 不修改数据库表结构。
- 不修改其他订单状态的处理逻辑。
- 不输出或记录用户隐私字段。
对于仍未确认的地方,可以直接要求 AI 标注:
如果遇到未提供的业务规则,请不要自行假设。
请列为“需要人工确认”的问题。
这句话往往比增加一大段角色设定更有价值。
没有验收标准,AI 无法判断自己的输出是否真的解决了问题。
可以明确四类内容:
例如:
接口约定:
- 输入:orderId、currentUserId、cancelReason。
- 成功:返回更新后的订单状态。
- 失败:订单不存在、无权限、状态不允许取消时抛出领域异常。
验收标准:
1. 待支付订单可以被订单所属用户取消。
2. 非订单所属用户取消时失败。
3. 已支付订单取消时失败。
4. 取消原因为空时失败。
5. 并发重复取消不会产生错误状态。
验收标准最好是开发者能够实际验证的,而不是“代码优雅”“性能更好”这样的抽象描述。
同一个问题,如果交付格式不同,答案的可用性会差很多。
对于复杂任务,可以先要求 AI 输出方案:
本轮暂时不要写完整代码。
请按以下格式输出:
1. 复述你理解的任务。
2. 列出需要人工确认的假设。
3. 给出涉及的类和方法。
4. 说明状态校验、事务和并发处理方案。
5. 列出测试矩阵。
6. 标出可能影响现有功能的风险。
规则确认后,再进入实现轮:
现在请只实现 Service 层的取消订单方法。
要求:
1. 不修改 Controller 和 Repository 接口。
2. 使用现有 DomainException。
3. 先说明改动点,再给出代码。
4. 最后补充对应单元测试。
5. 明确标出无法从上下文确定的部分。
交付格式的本质,是把 AI 的输出变成你容易审查、容易验证的结构。
下面把前面的 5 个要素合并成一条可直接使用的 Prompt。
任务目标:
在订单模块中新增“用户取消待支付订单”的能力。
本次只处理待支付订单,不处理退款、库存恢复和优惠券返还。
项目上下文:
- 后端使用 Java + Spring Boot。
- Controller 只负责参数接收和响应,业务逻辑位于 OrderService。
- 数据访问通过 OrderRepository。
- 订单状态位于 OrderStatus 枚举。
- 业务错误统一使用 DomainException。
- 已有 OrderServiceTest,可以在其中补充单元测试。
已确认规则:
1. 只有订单所属用户可以取消订单。
2. 只有 PENDING_PAYMENT 状态允许取消。
3. 取消后状态必须更新为 CANCELLED。
4. cancelReason 必填,长度为 1 到 200 个字符。
5. 同一订单的并发取消只允许一个请求成功。
输入、输出和验收:
- 输入:orderId、currentUserId、cancelReason。
- 成功:返回取消后的订单信息。
- 失败:订单不存在、无权限、状态不允许取消或参数非法时抛出领域异常。
- 必须覆盖:正常取消、无权限、订单不存在、已支付订单、空取消原因、重复取消。
本轮交付要求:
1. 先不要写完整代码。
2. 复述任务理解,并列出还需要人工确认的假设。
3. 说明 Service 层的处理步骤、事务和并发风险。
4. 列出建议修改的类和方法。
5. 输出测试矩阵。
注意,这不是“万能 Prompt”。
它只是把一个真实开发任务中最重要的信息显式写出来。
针对不同场景,你需要替换其中的业务规则、项目上下文和验收标准。
如果 AI 在第一轮回答中提出合理的待确认问题,再补充信息进入第二轮,通常比一次要求它输出完整代码更稳妥。
高质量 Prompt 不应该只存在于某一次聊天记录里。
建议按任务类型保存模板,而不是按工具保存模板:
| 模板类型 | 适用场景 |
|---|---|
| 需求澄清模板 | 需求模糊、规则不完整、需要拆任务 |
| 代码阅读模板 | 接手陌生模块、追调用链、确认影响范围 |
| 方案设计模板 | 多种实现方案、状态流转、跨模块修改 |
| 代码审查模板 | 检查异常、边界、安全、性能和可维护性 |
| 测试矩阵模板 | 正常、边界、异常和回归场景 |
| 排障模板 | 整理现象、日志、假设和验证步骤 |
你可以从下面这份最小模板开始:
任务目标:
[要实现、修改、审查或排查什么]
当前阶段:
[需求澄清 / 代码阅读 / 方案设计 / 实现 / 测试 / 排障]
项目上下文:
[技术栈、相关模块、现有代码和规范]
已确认规则:
[业务规则、状态、权限、数据约束]
输入与验收:
[输入、预期输出、异常、测试场景]
实现约束:
[修改范围、依赖限制、安全要求、兼容性要求]
本轮交付要求:
[先给方案 / 只改某个方法 / 输出测试矩阵 / 标出假设]
每次任务结束后,再补充两类信息:
本次有效:
[哪些背景信息、要求和输出格式最有帮助]
本次不足:
[AI 漏掉了什么,哪些规则仍然需要更早说明]
经过几次迭代后,你会得到一套符合自己项目和团队规范的 Prompt 库。
这比收藏几十条“万能提示词”更有长期价值。
一条高质量编程 Prompt,不需要写得华丽,也不需要堆很多角色设定。
它至少要回答 5 个问题:
当这 5 个要素足够清楚时,AI 的输出会更容易进入审查和验证流程。
请记住:
好 Prompt 不是一次问出最终答案,而是让每一轮协作都减少不必要的猜测。
下一篇文章,我们用一个真实场景实践这套方法:
用 AI 拆一个真实需求:从模糊描述到开发任务清单。