三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

一条高质量编程 Prompt,应该包含什么?

一条高质量编程 Prompt,应该包含什么?

文章目录

    • 开篇
    • 本文不会讨论什么
    • 一、为什么一句话 Prompt 容易产生返工
    • 二、一条高质量编程 Prompt 的基本原则
      • 1. 先给事实,再给要求
      • 2. 先要方案,再要完整代码
      • 3. 明确什么需要 AI 回答,什么需要人工决定
    • 三、一条高质量编程 Prompt,包含这 5 个要素
      • 1. 任务目标:这次到底要解决什么
      • 2. 项目上下文:这段代码要放在哪里
      • 3. 业务规则和约束:哪些事情不能自行猜测
      • 4. 输入、输出和验收标准:什么才算完成
      • 5. 交付格式:希望 AI 用什么方式回答
    • 四、一个完整示例:把“取消订单接口”问清楚
    • 五、把 Prompt 变成你的工程资产
    • 六、总结

✍创作者:全栈弄潮儿²⁰²⁶

🏡 个人主页:全栈弄潮儿²⁰²⁶

📙 专栏地址:AI 编程进阶实战

开篇

不少开发者把 AI 编程效果不好,归结为“自己不会写 Prompt”。

于是开始寻找:

  • 万能编程 Prompt。
  • 高级角色设定。
  • 超长提示词模板。
  • 让 AI 一次生成完整项目的咒语。

但在真实开发中,AI 输出不可靠,通常不是因为少了一句“你是一名资深工程师”。

更常见的原因是:

  • 任务目标没有说清楚。
  • 项目上下文没有提供。
  • 业务规则仍然存在歧义。
  • 验收标准没有定义。
  • 输出格式不方便审查和验证。

如果 Prompt 只是一句:

帮我写一个取消订单接口。

AI 当然可以写出代码。

但它不知道你的订单状态有哪些、谁可以取消、取消后如何处理库存、异常应该怎样返回、代码应该放在哪个模块。

所以,高质量编程 Prompt 的重点不是“写得多”,而是:

用最少但足够的信息,让 AI 知道要解决什么、在什么环境中解决、哪些事情不能擅自假设,以及结果如何验收。

本文不推荐万能 Prompt,也不比较不同模型。

我们只解决一个问题:

一条能够进入真实研发流程的编程 Prompt,到底应该包含什么?

本文不会讨论什么

为了避免把 Prompt 变成新的焦虑来源,先明确几件事:

  • 不会要求你为每次提问都写几百行背景。
  • 不会认为角色设定比项目事实更重要。
  • 不会把 AI 的第一版输出当作最终答案。
  • 不会鼓励把敏感代码、密钥、生产数据直接粘贴到对话中。
  • 不会让 Prompt 代替需求澄清、代码审查和测试验证。

Prompt 的作用是降低沟通成本,不是跳过工程流程。

一、为什么一句话 Prompt 容易产生返工

先看一个常见请求:

帮我用 Java 写一个取消订单接口。

这句话的问题不在于太短,而在于关键决策全部缺失。

AI 需要自行猜测:

  • 使用什么 Web 框架?
  • 订单有哪些状态?
  • 哪些角色可以取消订单?
  • 已支付订单是否可以取消?
  • 是否需要恢复库存?
  • 是否需要记录取消原因?
  • 是否使用事务?
  • 异常如何处理?

它最终给出的,只能是一种“通用假设下的答案”。

而真实项目需要的,是“符合当前系统约束的答案”。

可以把 Prompt 质量理解为下面这个公式:

Prompt 质量 = 明确任务 + 足够上下文 + 已确认规则 + 可验证标准 + 可审查交付方式

其中任何一项缺失,AI 都会用自己的默认假设补齐。

默认假设越多,返工概率通常越高。

二、一条高质量编程 Prompt 的基本原则

在介绍具体模板前,先记住三个原则。

1. 先给事实,再给要求

先说明已知的项目事实,再说明想让 AI 完成什么。

不要只说“实现取消订单”,而要说明项目技术栈、现有状态、相关模块和已经确认的业务规则。

2. 先要方案,再要完整代码

对涉及状态流转、数据库、权限、金额、并发和跨模块修改的任务,第一轮不要直接要代码。

先让 AI 复述问题、列假设、给方案、标风险。

等关键决策确认后,再让 AI 生成最小实现。

3. 明确什么需要 AI 回答,什么需要人工决定

对于不完整的信息,不要让 AI 悄悄补全。

应该明确要求它区分:

已确认事实 ↓ 可以给出实现建议的部分 ↓ 必须由产品、业务或开发者确认的假设

这样,AI 的回答会更接近一份可讨论的方案,而不是一个看似完整、实际建立在猜测上的答案。

三、一条高质量编程 Prompt,包含这 5 个要素

1. 任务目标:这次到底要解决什么

任务目标要足够具体,最好包含:

  • 修改或实现的功能。
  • 影响的模块或范围。
  • 本次明确不处理的内容。

例如:

任务目标: 在订单模块中新增用户取消待支付订单的能力。 范围: 只处理 PENDING_PAYMENT 状态的订单。 本次不处理: 已支付订单退款、库存恢复和优惠券返还。

相比“写一个取消订单接口”,这段描述已经明确了功能边界。

常见误区:

把目标写成“优化一下”“重构一下”“帮我完善一下”。

这类表述没有说明成功是什么样,AI 只能按自己的理解扩大或缩小修改范围。

2. 项目上下文:这段代码要放在哪里

项目上下文不是把整个仓库复制给 AI。

它是提供完成本次任务所必需的最小事实。

一般至少包含:

上下文类型示例
技术栈Java + Spring Boot + JPA
模块位置order模块,业务逻辑放在 Service
相关代码OrderService、订单状态枚举、现有异常类
现有规范统一使用领域异常,Controller 不写业务逻辑
验证方式单测命令、接口测试方式、静态检查要求

例如:

项目上下文: - 后端使用 Java + Spring Boot。 - Controller 负责参数接收,业务逻辑位于 Service。 - 数据访问通过 OrderRepository。 - 业务错误统一抛出 DomainException。 - 当前订单状态定义在 OrderStatus 枚举中。 - 修改后需要补充 Service 层单元测试。

上下文越贴近当前任务,AI 的方案越容易适配项目。

3. 业务规则和约束:哪些事情不能自行猜测

这部分决定了 AI 生成内容是否会偏离业务。

需要把已经确认的规则写成可检查的条目:

已确认规则: 1. 只有订单所属用户可以取消订单。 2. 只有 PENDING_PAYMENT 状态允许用户取消。 3. 取消后订单状态改为 CANCELLED。 4. 请求必须携带取消原因,原因长度为 1 到 200 个字符。 5. 同一订单的并发取消请求只能有一个成功。

同时,也要写出限制条件:

实现约束: - 不新增第三方依赖。 - 不修改数据库表结构。 - 不修改其他订单状态的处理逻辑。 - 不输出或记录用户隐私字段。

对于仍未确认的地方,可以直接要求 AI 标注:

如果遇到未提供的业务规则,请不要自行假设。 请列为“需要人工确认”的问题。

这句话往往比增加一大段角色设定更有价值。

4. 输入、输出和验收标准:什么才算完成

没有验收标准,AI 无法判断自己的输出是否真的解决了问题。

可以明确四类内容:

  • 输入参数和类型。
  • 成功时的结果。
  • 失败时的错误类型。
  • 必须覆盖的测试场景。

例如:

接口约定: - 输入:orderId、currentUserId、cancelReason。 - 成功:返回更新后的订单状态。 - 失败:订单不存在、无权限、状态不允许取消时抛出领域异常。 验收标准: 1. 待支付订单可以被订单所属用户取消。 2. 非订单所属用户取消时失败。 3. 已支付订单取消时失败。 4. 取消原因为空时失败。 5. 并发重复取消不会产生错误状态。

验收标准最好是开发者能够实际验证的,而不是“代码优雅”“性能更好”这样的抽象描述。

5. 交付格式:希望 AI 用什么方式回答

同一个问题,如果交付格式不同,答案的可用性会差很多。

对于复杂任务,可以先要求 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 变成你的工程资产

高质量 Prompt 不应该只存在于某一次聊天记录里。

建议按任务类型保存模板,而不是按工具保存模板:

模板类型适用场景
需求澄清模板需求模糊、规则不完整、需要拆任务
代码阅读模板接手陌生模块、追调用链、确认影响范围
方案设计模板多种实现方案、状态流转、跨模块修改
代码审查模板检查异常、边界、安全、性能和可维护性
测试矩阵模板正常、边界、异常和回归场景
排障模板整理现象、日志、假设和验证步骤

你可以从下面这份最小模板开始:

任务目标: [要实现、修改、审查或排查什么] 当前阶段: [需求澄清 / 代码阅读 / 方案设计 / 实现 / 测试 / 排障] 项目上下文: [技术栈、相关模块、现有代码和规范] 已确认规则: [业务规则、状态、权限、数据约束] 输入与验收: [输入、预期输出、异常、测试场景] 实现约束: [修改范围、依赖限制、安全要求、兼容性要求] 本轮交付要求: [先给方案 / 只改某个方法 / 输出测试矩阵 / 标出假设]

每次任务结束后,再补充两类信息:

本次有效: [哪些背景信息、要求和输出格式最有帮助] 本次不足: [AI 漏掉了什么,哪些规则仍然需要更早说明]

经过几次迭代后,你会得到一套符合自己项目和团队规范的 Prompt 库。

这比收藏几十条“万能提示词”更有长期价值。

六、总结

一条高质量编程 Prompt,不需要写得华丽,也不需要堆很多角色设定。

它至少要回答 5 个问题:

  1. 要做什么?明确任务目标和范围。
  2. 在哪里做?提供必要的项目上下文。
  3. 哪些不能猜?写清业务规则和实现约束。
  4. 怎样算完成?定义输入、输出和验收标准。
  5. 怎样交付?规定方案、代码、测试和风险的输出格式。

当这 5 个要素足够清楚时,AI 的输出会更容易进入审查和验证流程。

请记住:

好 Prompt 不是一次问出最终答案,而是让每一轮协作都减少不必要的猜测。

下一篇文章,我们用一个真实场景实践这套方法:

用 AI 拆一个真实需求:从模糊描述到开发任务清单。


如果这篇文章对你有帮助,欢迎点赞、收藏、关注专栏。
也欢迎在评论区留言:你现在最常让 AI 帮你完成哪一类任务?


✍坚持原创,求关注,点赞,收藏

← 返回列表