OpenAI 官方 Prompt 六大黄金法则:开发者从“会提问”到“可上线”的全流程实操手册

举报
霍格沃兹测试开发学社 发表于 2026/07/28 15:03:24 2026/07/28
【摘要】 最近两年,大模型几乎已经渗透到软件研发的每一个环节。写业务代码、分析线上日志、生成单元测试、优化 SQL、评审需求、补接口文档、设计技术方案……但在实际团队里,经常出现一个非常割裂的现象:同样使用 GPT,有人已经把 AI 变成了稳定的开发搭档;有人却觉得 AI 生成的代码漏洞百出,不是无法运行,就是严重脱离项目实际。问题往往不完全出在模型能力上。很多时候,是因为工程师只告诉了模型“要做什么...
最近两年,大模型几乎已经渗透到软件研发的每一个环节。

写业务代码、分析线上日志、生成单元测试、优化 SQL、评审需求、补接口文档、设计技术方案……

但在实际团队里,经常出现一个非常割裂的现象:

同样使用 GPT,有人已经把 AI 变成了稳定的开发搭档;有人却觉得 AI 生成的代码漏洞百出,不是无法运行,就是严重脱离项目实际。

问题往往不完全出在模型能力上。

很多时候,是因为工程师只告诉了模型“要做什么”,却没有告诉它:

  • 当前项目是什么环境;
  • 哪些内容可以修改;
  • 哪些业务规则不能破坏;
  • 最终结果应该以什么格式交付;
  • 怎样才算真正完成任务。

一句“帮我优化一下代码”,本质上不是开发任务,更像一个模糊愿望。

真正高质量的 Prompt,也不是堆砌几个所谓的“咒语”,而是把需求、上下文、约束、验收标准和执行工具组织成一份模型能够理解的任务协议

OpenAI 当前的准确性优化文档仍然总结了六类核心策略:

  1. 撰写清晰的指令;
  2. 提供参考文本;
  3. 将复杂任务拆成简单子任务;
  4. 给模型足够的处理空间;
  5. 使用外部工具;
  6. 系统化测试每一次变化。

这六条原则看起来简单,但真正放进软件研发流程,背后涉及的已经不只是“怎么提问”,而是上下文工程、任务编排、工具调用、质量评测和团队治理。


导读

很多 Prompt 教程只教你复制一句话:

你是一名拥有十年经验的高级 Java 架构师……

但模型输出是否可靠,真正取决于后面的任务信息,而不是“十年经验”这几个字。

这篇文章不整理网络上的万能提示词,而是结合国内常见的软件研发场景,重新拆解 OpenAI 官方六大原则,覆盖:

  • 代码生成与代码优化;
  • 线上故障定位;
  • SQL 与性能分析;
  • 单元测试和接口测试;
  • 技术方案与需求评审;
  • Function Calling 与企业工具接入;
  • Prompt 版本管理与自动化评测;
  • 团队级 Prompt 规范建设。

需要特别说明的是:OpenAI 针对当前推理模型的官方建议,已经不再鼓励用户反复要求模型“展示完整思维链”。更合适的做法,是明确目标、验收条件和检查步骤,让模型完成分析后输出结论、依据、假设和风险。


阅读目录

  1. Prompt 不是搜索关键词,而是任务接口
  2. 研发人员通用的 GCOB Prompt 框架
  3. OpenAI 官方六大原则的研发实战
  4. 五类高频开发 Prompt 模板
  5. 团队级 Prompt 工程体系如何落地
  6. 开发者最容易踩的七个坑
  7. 从 Prompt Engineering 走向 AI Engineering

一、Prompt 不是搜索关键词,而是任务接口

很多研发人员第一次使用大模型时,延续的还是搜索引擎思维:

写一个用户登录接口。

模型确实可以生成代码,但它并不知道:

  • 项目使用 Spring Boot 2 还是 Spring Boot 3;
  • 使用 JWT、Session 还是 OAuth 2.0;
  • 用户密码采用什么加密算法;
  • 是否需要验证码和登录失败锁定;
  • 返回值是否使用团队统一 Result 对象;
  • 是否需要兼容已有客户端;
  • 哪些异常需要记录审计日志。

于是,模型只能根据训练数据中的常见写法,自行补全这些信息。

最终生成的代码看起来完整,却未必能进入你的项目。

OpenAI 当前的 Prompt Engineering 文档建议,将稳定的系统规则放在 developer 指令中,将用户每次变化的任务信息放在 user 输入中。官方将两者类比为“函数定义”和“函数参数”:前者定义业务规则和行为边界,后者提供本次调用的实际输入。

从研发视角看,一个高质量 Prompt 更接近下面这份接口定义:

输入:
- 当前代码
- 报错日志
- 项目技术栈
- 业务约束

处理规则:
- 不修改公开接口
- 不增加未经批准的依赖
- 遵守现有编码规范
- 优先给出最小改动方案

输出:
- 根因分析
- 修改后的代码
- 影响范围
- 测试用例
- 风险说明

这已经不是普通问答,而是一份可以检查、复用和评测的任务协议。


二、研发人员通用的 GCOB Prompt 框架

结合 OpenAI 强调的清晰指令、上下文分层和输出约束,可以把研发 Prompt 归纳成一个简单的 GCOB 框架。

要素
含义
需要回答的问题
Goal
任务目标
到底要解决什么问题
Context
项目上下文
当前技术栈、代码、日志和业务背景是什么
Output
输出要求
最终需要代码、表格、文档还是 JSON
Boundary
约束边界
哪些内容不能修改,哪些方案不能使用

需要更严格时,还可以增加第五项:

Check:验收标准。

也就是明确告诉模型,什么结果才算完成。

低效写法

帮我优化订单查询代码。

GCOB 标准写法

# Goal

优化 Spring Boot 订单分页查询接口,解决数据库 N+1 查询问题。

# Context

- Spring Boot 3.2
- MyBatis-Plus 3.5
- MySQL 8.0
- 当前实现先查询订单列表,再循环查询订单明细
- 高并发场景下接口出现明显超时

<current_code>
在这里粘贴现有 Service 代码
</current_code>

# Output

1. 输出修改后的完整 Service 代码;
2. 列出修改前后的 SQL 执行差异;
3. 说明可能受影响的业务逻辑;
4. 补充对应的单元测试场景。

# Boundary

- 不更换 ORM 框架;
- 不修改数据库表结构;
- 不改变现有接口入参和返回值;
- 不新增 Maven 依赖。

# Acceptance Criteria

- 消除循环中的数据库查询;
- 原有分页和排序逻辑保持不变;
- 所有新增代码可以在当前技术栈中编译。

两段 Prompt 的差距不在于后者使用了什么“高级词汇”,而在于它减少了模型需要自行猜测的信息。


使用分隔符,不要把代码和指令混在一起

OpenAI 官方文档建议使用 Markdown 标题、列表和 XML 标签区分不同类型的内容;在较早的基础指南中,也推荐使用 ### 或三引号分隔指令与输入文本。它们的作用不是提升模型智商,而是帮助模型识别任务边界。

例如:

# Task

分析下面的异常日志并定位根因。

# Log

<error_log>
java.lang.NullPointerException
    at OrderService.createOrder(OrderService.java:67)
</error_log>

# Source Code

<source_code>
在这里粘贴相关代码
</source_code>

# Output

按照“现象、根因、修复方案、回归测试点”的顺序输出。

需要注意:分隔符只是结构化工具,不存在“使用三引号就能减少 80% 错误”这样的固定结论。效果仍然需要通过实际测试集验证。


三、OpenAI 官方六大原则的研发实战

原则一:指令必须清晰、具体、可以验收

模型最怕的不是任务复杂,而是任务模糊。

下面这些词看起来很常见,但几乎没有明确标准:

  • 优化一下;
  • 写得专业一点;
  • 提高性能;
  • 完善测试;
  • 帮我重构;
  • 看看有没有问题。

“提高性能”到底是减少 SQL 数量、降低响应时间,还是减少内存占用?

“完善测试”到底是补单元测试、接口测试,还是异常路径和并发测试?

OpenAI 官方建议明确描述所需的上下文、结果、长度、格式和风格,而不是让模型自行猜测。

代码生成模板

# Identity

你是一名熟悉 Spring Boot、MySQL 和 Redis 的后端工程师。

# Goal

实现商品库存扣减接口,并处理并发超卖问题。

# Context

- Spring Boot 3.2
- MySQL 8.0
- Redis 7
- 库存表字段:id、product_id、stock_num、version
- 项目已经引入 Redisson
- 接口可能被重复调用

# Output

1. Controller、Service、Mapper 完整代码;
2. 请求和响应 JSON 示例;
3. 核心异常处理逻辑;
4. 对应的 JUnit 5 测试场景。

# Boundary

- 不新增第三方依赖;
- 不修改现有库存表;
- 必须处理接口幂等;
- 不能只依赖前端防止重复提交。

# Acceptance Criteria

- 并发请求下库存不能扣成负数;
- 重复请求不能重复扣减;
- 扣减失败必须返回明确业务错误码。

“角色设定”不是越资深越好

“你是一名十年经验架构师”并不会自动让答案变正确。

只有当角色会影响下面这些内容时,它才真正有价值:

  • 使用什么专业视角分析;
  • 采用什么术语;
  • 面向什么读者;
  • 重点检查哪些风险;
  • 输出什么形式的结果。

例如:

你是一名支付系统测试负责人,请重点检查幂等、重复回调、
金额精度、超时重试和状态机流转问题。

这比单纯强调“十年经验”有效得多。


原则二:提供参考文本,让模型基于项目事实回答

模型不可能天然知道企业内部的:

  • 业务规则;
  • 数据库设计;
  • 自研框架;
  • 错误码规范;
  • 历史故障;
  • 代码提交要求;
  • 测试准入标准。

这些信息要么直接放进 Prompt,要么通过知识库和检索系统动态补充。

OpenAI 将上下文优化适用于三类典型问题:模型缺少相关知识、知识已经过时,或者任务依赖企业私有信息。官方文档也将 RAG 定义为先检索相关内容,再把它补充到模型上下文中生成回答。

示例:让生成代码遵守公司规范

# Task

根据下面的公司规范生成用户注册接口。

# Reference

<company_java_standard>
1. 所有接口入参必须使用 DTO;
2. 禁止使用 select *;
3. 业务异常统一抛出 BizException;
4. Controller 不允许直接调用 Mapper;
5. 所有写操作必须记录操作日志;
6. 方法注释需要说明入参、返回值和异常。
</company_java_standard>

# Requirement

- Spring Boot 3.2
- MyBatis-Plus
- 用户名和手机号均不能重复
- 密码使用项目已有 PasswordEncoder
- 注册成功后返回用户 ID

# Output

输出 Controller、Service、Mapper 和 DTO 代码。

参考资料还要增加使用规则

仅仅把文档粘贴进去还不够,还要告诉模型如何使用。

回答时必须遵守以下规则:

1. 只能依据 Reference 中的业务规则进行判断;
2. Reference 没有提供的信息,明确标记为“待确认”;
3. 不得自行补充不存在的接口、字段和错误码;
4. 每个结论需要标注对应的参考条目。

这样可以降低模型把“行业常见做法”误当成“公司真实规定”的风险。

长文档不要全部塞进 Prompt

将几十份需求文档、代码规范和故障复盘一次性放入上下文,不一定更准确。

OpenAI 的准确性优化文档提醒,超长上下文可能出现信息被忽略的问题,因此不同上下文长度仍然需要配合评测。

更合理的做法是:

用户任务
   ↓
检索相关业务文档
   ↓
过滤无关内容
   ↓
拼接最相关的上下文
   ↓
模型生成结果
   ↓
引用检查与结果评测

RAG 的重点从来不是“把所有资料都交给模型”,而是“把当前任务真正需要的资料交给模型”。


原则三:复杂任务必须拆分,不要试图一次生成整个系统

下面这类 Prompt 看起来目标明确,实际却包含了太多任务:

帮我把单体订单系统拆成订单、库存、支付三个微服务,
设计数据库、MQ 消息、接口、分布式事务,并生成全部代码和测试。

它至少包含:

  • 业务边界识别;
  • 服务拆分;
  • 数据归属设计;
  • 接口协议设计;
  • 消息模型设计;
  • 一致性方案设计;
  • 代码实现;
  • 测试方案;
  • 迁移方案。

一次性交给模型,最容易出现的问题不是完全不会,而是前后不一致:

前面设计使用事件驱动,后面代码又直接同步调用;数据库已经按服务拆分,查询代码却仍然跨库 Join。

OpenAI 官方建议将复杂任务拆成简单子任务,并让前一步输出成为后一步输入。

推荐的四阶段流程

第一步:只做需求和架构分析

请分析当前订单系统,输出:

1. 业务模块划分;
2. 服务边界;
3. 数据归属;
4. 服务间调用关系;
5. 需要进一步确认的问题。

本阶段不要生成代码。

第二步:冻结关键协议

基于已经确认的服务边界,设计:

1. REST 接口;
2. MQ 事件;
3. 幂等键;
4. 错误码;
5. 状态机。

所有协议以表格或 JSON Schema 输出。

第三步:分服务生成代码

基于已经确认的接口和事件协议,
只生成订单服务的核心代码。

不得修改上一步已经确定的字段、接口名称和消息结构。

第四步:测试和一致性检查

检查架构设计、接口协议和实现代码是否一致。

重点检查:

- 接口字段是否一致;
- 消息生产和消费结构是否一致;
- 状态流转是否完整;
- 失败补偿是否存在死循环;
- 是否存在重复扣款或重复扣库存风险。

这种流程的价值不只是让模型“多想一会儿”,而是给每个阶段建立明确的输入、输出和检查点。


原则四:给模型处理空间,但不要强迫它展示完整思维链

早期 Prompt 教程常见这样的写法:

请一步一步思考,并完整展示所有推理过程。

对于当前推理模型,这已经不再是 OpenAI 推荐的通用做法。

OpenAI 官方明确说明,推理模型本身会在内部完成推理,提示它“逐步思考”或“解释完整推理过程”通常没有必要,有时甚至可能影响效果。官方更推荐简单、直接的指令,明确最终目标、限制条件和成功标准。

研发场景真正需要的不是模型的内部思维记录,而是可审核的工作产物

不推荐

请展示你分析这个线上故障时的完整思维链,
不要省略任何中间推理。

更推荐

请先完成故障分析,再按照下面的结构输出:

1. 已确认事实;
2. 可能原因及对应证据;
3. 当前无法确认的信息;
4. 推荐的排查顺序;
5. 最可能根因;
6. 最小修复方案;
7. 修复后的回归测试点。

不要把猜测写成已经确认的事实。

再例如,分析 SQL 性能问题时,可以这样写:

在给出最终优化方案前,请检查:

- 是否命中索引;
- 是否存在隐式类型转换;
- 是否出现回表和临时表;
- 是否存在无效排序;
- 是否会改变原有查询语义;
- 新索引是否可能增加写入成本。

最终仅输出检查结果、优化方案、修改后的 SQL 和风险说明。

这套方法可以概括为:

Plan → Execute → Verify

也就是先规划任务,再执行,最后按照验收条件检查结果。

输出的是计划、证据和检查结果,而不是要求模型公开内部思维过程。


原则五:让模型调用工具,不要让它凭空猜测事实

大模型擅长理解自然语言、生成内容和处理模糊信息,但不应该依赖模型记忆完成这些任务:

  • 查询实时订单状态;
  • 获取线上数据库数据;
  • 计算复杂财务结果;
  • 执行代码和测试;
  • 查询最新接口文档;
  • 创建工单;
  • 修改项目状态;
  • 执行退款;
  • 调用企业内部服务。

OpenAI 的 Function Calling,也称 Tool Calling,允许模型根据任务决定是否调用外部函数。模型负责理解意图和生成参数,真正的数据查询或业务操作仍由应用系统执行。

一个标准工具调用流程

用户提出任务
   ↓
模型判断需要哪个工具
   ↓
模型生成工具名称和参数
   ↓
应用程序校验权限与参数
   ↓
应用程序执行真实操作
   ↓
执行结果返回模型
   ↓
模型组织最终回答

示例:订单状态查询工具

{
  "name""query_order_status",
  "description""根据订单编号查询订单当前状态",
  "parameters": {
    "type""object",
    "properties": {
      "order_id": {
        "type""string",
        "description""系统中的订单编号"
      }
    },
    "required": ["order_id"],
    "additionalProperties"false
  }
}

用户询问:

帮我查一下订单 202607200001 为什么还没有发货。

模型不应该编造订单状态,而应该调用:

{
  "order_id""202607200001"
}

应用系统查询数据库后,再把真实结果返回模型。

研发中的三类工具

工具类型
典型能力
研发场景
数据工具
查询真实信息
数据库、日志平台、项目管理系统、知识库
执行工具
运行程序或计算
单元测试、SQL Explain、代码扫描、脚本执行
操作工具
修改外部系统
创建缺陷、更新工单、发送通知、触发流水线

工具接入不等于放开所有权限

模型生成了一个工具调用,不代表系统必须执行。

生产环境至少要增加:

  • 参数校验;
  • 身份认证;
  • 权限控制;
  • 幂等控制;
  • 超时和重试;
  • 操作审计;
  • 高风险操作二次确认;
  • 工具结果可信度检查;
  • 失败后的人工接管。

OpenAI 的 Agent 实践指南也把模型、工具和指令视为 Agent 的三个基础组件,并强调工具需要配合明确的边界和 Guardrails。

Prompt 决定模型“想做什么”,但系统必须决定它“被允许做什么”。


原则六:Prompt 必须测试、版本化和持续迭代

很多团队管理 Prompt 的方式是:

  • 某位工程师写了一段;
  • 发到群里让大家复制;
  • 后来有人改了几句话;
  • 不知道为什么效果变差;
  • 也找不到之前的版本。

这不是 Prompt 工程,更像 Prompt 玄学。

OpenAI 官方强调,Prompt 优化需要建立基线、评估结果、提出假设、修改方案,再重新评估,而不是凭单次对话判断效果。

第一步:建立测试集

可以从 10~20 条真实任务开始,逐步扩充。

例如 Bug 分析 Prompt 的测试集应包含:

  • 空指针异常;
  • 数据库连接超时;
  • 慢 SQL;
  • 线程池耗尽;
  • Redis 缓存穿透;
  • MQ 重复消费;
  • 接口幂等失败;
  • 第三方服务超时;
  • 日志信息不完整;
  • 无法根据现有信息确定根因。

测试集不能只包含“容易答对”的正常样本,还要覆盖:

  • 边界情况;
  • 信息缺失;
  • 相互冲突的上下文;
  • 不应回答的任务;
  • 高风险操作;
  • 恶意或异常输入。

第二步:定义评测指标

代码生成场景可以关注:

指标
说明
编译通过率
代码能否在目标项目中编译
测试通过率
生成结果能否通过已有自动化测试
需求覆盖率
是否实现全部明确需求
约束遵守率
是否违反依赖、接口和架构限制
格式正确率
JSON、表格或代码结构能否被程序解析
安全问题数
是否引入注入、越权、敏感信息泄露等问题
人工修改量
工程师需要修改多少内容才能使用
延迟与成本
达到目标质量需要多少时间和 Token

文档生成场景则可以评估:

  • 信息完整度;
  • 事实准确度;
  • 引用正确率;
  • 结构一致性;
  • 术语规范度;
  • 冗余内容比例。

第三步:进行版本对比

Prompt v1
   ↓
运行固定测试集
   ↓
记录失败案例
   ↓
分析失败原因
   ↓
修改为 Prompt v2
   ↓
重新运行同一测试集
   ↓
判断提升还是回归

每次修改只解决明确问题,不要一次改十处,否则很难判断究竟是哪项变化产生了效果。

第四步:将 Prompt 纳入代码管理

截至 2026 年 7 月,OpenAI 当前 API 文档已经建议将生产 Prompt 管理在应用代码中,通过类型化输入、代码评审、自动化测试和正常发布流程控制变更。

OpenAI 还说明,API 中原有的 Reusable Prompt Objects 正在弃用,v1/prompts 计划于 2026 年 11 月 30 日关闭。因此,新系统不应再把官方 Prompt Object 当作长期的团队 Prompt 仓库方案。

一个简单的代码仓库结构可以是:

prompts/
├── common/
│   ├── security-review.md
│   └── document-style.md
├── development/
│   ├── java-code-generation.md
│   ├── sql-optimization.md
│   └── bug-analysis.md
├── testing/
│   ├── api-test-case.md
│   ├── unit-test-generation.md
│   └── requirement-review.md
└── evals/
    ├── bug-analysis-cases.json
    ├── code-generation-cases.json
    └── evaluation-rules.json

每个 Prompt 至少记录:

name: java-code-generation
version: 2.3.0
owner: backend-platform
model: production-default
updated_at: 2026-07-20
change_reason: 增加接口兼容性检查
evaluation_set: code-generation-cases-v4

Prompt 一旦影响生产系统行为,就应该像代码一样可以评审、测试、发布、监控和回滚。


四、五类高频开发 Prompt 模板

下面五套模板可以直接改造成团队内部版本。

1. 代码开发类

# Identity

你是一名熟悉【技术栈】的研发工程师。

# Goal

【描述需要实现的功能】

# Context

- 项目技术栈:【版本信息】
- 当前模块:【模块说明】
- 已有公共组件:【组件说明】
- 业务规则:【关键业务规则】

<existing_code>
粘贴现有代码
</existing_code>

# Output

1. 输出需要新增或修改的文件;
2. 输出完整代码;
3. 说明关键设计;
4. 补充测试场景。

# Boundary

- 不修改:【不能修改的接口或模块】
- 不新增:【依赖限制】
- 必须兼容:【兼容性要求】
- 必须遵守:【编码规范】

# Acceptance Criteria

- 代码能够编译;
- 通过现有测试;
- 覆盖正常、异常和边界流程;
- 不引入明显安全风险。

2. 故障排查与性能优化类

# Identity

你是一名负责 Java、MySQL 和分布式系统故障排查的工程师。

# Goal

根据日志、监控和代码定位问题,并给出最小风险修复方案。

# Evidence

<error_log>
粘贴异常日志
</error_log>

<monitoring>
粘贴监控指标
</monitoring>

<source_code>
粘贴相关代码
</source_code>

# Output

1. 已确认事实;
2. 可能原因及证据;
3. 最可能根因;
4. 仍需补充的信息;
5. 推荐排查顺序;
6. 修复方案;
7. 回归测试点;
8. 长期预防措施。

# Boundary

- 不得把猜测表述为事实;
- 不进行无依据的大规模重构;
- 优先给出可回滚的最小改动;
- 涉及数据修复时单独提示风险。

3. 单元测试与自动化测试类

# Identity

你是一名熟悉【JUnit 5 / Pytest】的测试开发工程师。

# Goal

为给定业务代码生成可执行的自动化测试。

<business_code>
粘贴待测试代码
</business_code>

# Coverage Requirements

必须覆盖:

- 正常流程;
- 参数为空;
- 边界值;
- 外部依赖异常;
- 重复请求;
- 权限不足;
- 数据不存在;
- 状态不允许;
- 并发相关风险。

# Output

1. 测试场景表;
2. 完整测试代码;
3. Mock 对象说明;
4. 每条用例对应的业务风险;
5. 当前无法测试的部分及原因。

# Boundary

- 使用项目已有测试框架;
- 不新增测试依赖;
- 不为了让测试通过而修改业务逻辑;
- 测试名称需要体现业务场景和预期结果。

4. 技术文档类

# Identity

你是一名负责研发方案评审的技术负责人。

# Goal

根据提供的背景,输出一份可用于团队评审的技术方案。

# Background

<requirement>
粘贴需求和业务背景
</requirement>

# Output Structure

1. 背景与目标;
2. 当前问题;
3. 方案概述;
4. 核心流程;
5. 接口和数据改动;
6. 兼容性方案;
7. 风险与应对;
8. 测试范围;
9. 发布和回滚方案;
10. 待确认问题。

# Style

- Markdown 格式;
- 使用清晰的小标题;
- 避免堆砌无关架构术语;
- 关键决策必须说明依据;
- 无法确认的信息标记为“待确认”。

5. 需求评审与研发管理类

# Identity

你是一名研发负责人和质量负责人。

# Goal

分析需求的可开发性、可测试性和交付风险。

<requirement>
粘贴产品需求
</requirement>

# Review Dimensions

- 业务流程是否完整;
- 状态流转是否闭环;
- 异常场景是否明确;
- 权限规则是否明确;
- 数据口径是否一致;
- 是否存在幂等和并发风险;
- 是否影响已有接口;
- 是否需要数据迁移;
- 是否具备可测试的验收标准。

# Output

使用表格输出:

| 模块 | 问题 | 风险等级 | 需要确认的人 | 建议方案 |

最后补充:

1. 可直接进入开发的内容;
2. 必须确认后才能开发的内容;
3. 建议拆分的研发任务;
4. 测试重点;
5. 上线风险。

五、团队级 Prompt 工程体系如何落地

个人使用 Prompt,追求的是这一次结果好不好。

团队建设 Prompt,追求的是不同工程师、不同任务、不同时间调用时,结果是否仍然稳定。

至少需要建设下面五层能力。

第一层:统一指令层

在 API 场景中,可以通过 developer 指令维护稳定规则,例如:

# Identity

你是公司内部研发辅助系统。

# Global Rules

- 遵守公司编码规范;
- 不编造内部接口、字段和错误码;
- 无法确认的信息必须标记;
- 代码修改优先采用最小变更;
- 涉及删除数据、修改权限和生产操作时必须提示人工确认;
- 输出代码前检查安全、兼容性和异常处理;
- 输出结论时区分事实、推测和建议。

具体任务再通过用户输入传入:

请分析下面的支付回调重复处理问题。

全局规则与任务输入分离后,团队不需要每次重复粘贴相同要求。


第二层:业务知识层

将下面这些内容建设为可检索知识库:

  • 产品需求;
  • 接口文档;
  • 数据字典;
  • 编码规范;
  • 测试规范;
  • 历史故障复盘;
  • 公共组件手册;
  • 安全规范;
  • 发布流程;
  • 常见问题和标准答案。

但知识库不是“存进去就完成了”。

还要持续评估:

  • 是否检索到了正确文档;
  • 是否返回了过期版本;
  • 是否混入无关内容;
  • 文档之间是否存在冲突;
  • 模型是否正确使用了检索结果。

第三层:工具执行层

让模型接入真正的研发系统:

  • Git 仓库;
  • CI/CD;
  • 自动化测试平台;
  • 日志和监控平台;
  • 缺陷管理系统;
  • 数据库只读查询;
  • 接口文档平台;
  • 项目管理系统;
  • 企业知识库。

模型负责理解任务和规划动作,确定性系统负责真实执行。


第四层:评测与观测层

需要持续记录:

  • 用户输入;
  • 实际检索内容;
  • 使用的 Prompt 版本;
  • 调用的模型;
  • 工具调用参数;
  • 工具执行结果;
  • 最终输出;
  • 用户是否采用;
  • 人工修改内容;
  • 自动化评测分数;
  • Token、延迟和成本。

否则,当输出质量下降时,团队很难判断究竟是:

  • Prompt 改坏了;
  • 模型版本变化了;
  • 检索内容不正确;
  • 工具执行失败了;
  • 上下文太长;
  • 业务规则本身发生了变化。

第五层:安全与人工接管层

以下场景不适合让模型直接做最终决策:

  • 删除生产数据;
  • 发起退款;
  • 修改用户权限;
  • 关闭安全策略;
  • 发布高风险版本;
  • 执行不可逆数据库变更;
  • 对外发送敏感信息;
  • 自动判定重大事故责任。

合理的分工应该是:

模型:理解、分析、规划、生成建议
系统:校验、授权、执行、记录
人工:审批高风险操作、处理异常和最终兜底

AI 辅助研发不是让模型取代所有工程控制,而是把模型放进已有的软件工程治理体系。


六、开发者最容易踩的七个坑

1. 把 Prompt 写成搜索关键词

写个登录接口。

缺少技术栈、业务规则、输出要求和验收条件,模型只能自由发挥。


2. 一次性塞入整个项目

上下文越多不代表结果越准确。

无关代码、重复文档和过期设计会干扰模型判断。应该先定位任务相关范围,再提供必要信息。


3. 只说“不要做什么”

不要写错。
不要有漏洞。
不要改变业务。

这些要求无法直接执行。

应该改成:

必须使用参数化查询;
所有用户输入必须校验;
保持现有接口字段不变;
新增逻辑必须覆盖异常分支;
输出前按照安全检查表自检。

4. 示例和指令互相冲突

Prompt 要求返回 JSON,示例却使用 Markdown 表格;要求字段使用蛇形命名,示例却全部是驼峰命名。

模型通常会同时参考指令和示例,二者冲突时,输出很容易不稳定。

OpenAI 对推理模型的建议同样强调:Few-shot 示例必须与实际指令高度一致。


5. 要求模型展示完整思维链

研发真正需要的是:

  • 结论;
  • 证据;
  • 假设;
  • 风险;
  • 检查结果;
  • 可执行方案。

不是模型内部所有推理文字。


6. 生成代码后不执行测试

AI 生成的代码即使语法正确,也可能存在:

  • 依赖版本不兼容;
  • 接口字段错误;
  • 业务状态遗漏;
  • 并发安全问题;
  • 越权漏洞;
  • 异常未处理;
  • 测试只覆盖正常路径。

代码生成只是研发流程中的一个环节,不是代码验收。


7. 没有测试集,只凭“感觉不错”

单次回答漂亮,不代表 Prompt 可以上线。

只有在固定测试集上稳定达到团队设定的质量标准,Prompt 才具备复用价值。


七、从 Prompt Engineering 走向 AI Engineering

OpenAI 官方六大原则可以概括成六句话:

把任务说清楚。把必要资料提供给模型。把复杂工作拆开执行。给模型明确的目标和检查步骤。把模型连接到真实工具和数据。用测试而不是感觉判断效果。

但对于研发团队来说,这还只是起点。

当 Prompt 真正进入生产环境,它会逐渐演变成一套完整工程体系:

Prompt Engineering
        ↓
Context Engineering
        ↓
Tool Engineering
        ↓
Workflow Orchestration
        ↓
Evaluation Engineering
        ↓
AI Engineering

个人工程师需要掌握的是:

  • 怎样描述任务;
  • 怎样提供代码和日志;
  • 怎样约束模型输出;
  • 怎样验证生成结果。

研发负责人需要进一步考虑:

  • Prompt 如何统一管理;
  • 企业知识如何动态注入;
  • 工具权限如何控制;
  • 输出质量如何自动评测;
  • 模型升级如何避免回归;
  • 高风险任务如何人工接管。

真正成熟的 Prompt,不一定最长,也不一定看起来最复杂。

它应该具备几个非常工程化的特征:

  • 输入明确;
  • 输出稳定;
  • 约束可执行;
  • 结果可验证;
  • 版本可追踪;
  • 问题可定位;
  • 变更可回滚。

所以,Prompt Engineering 的终点从来不是背下一套“万能提示词”。

它的本质,是把人类模糊的研发意图,转换成模型可以理解、系统可以执行、团队可以验证的工程协议。

当 Prompt 能够被测试、被复用、被监控、被持续优化时,AI 才真正从一个偶尔好用的聊天工具,变成研发流程中可靠的一部分。



官方资料说明

本文依据 OpenAI 当前 Prompt Engineering、Reasoning Best Practices、Function Calling、Optimizing LLM Accuracy 与 Agent 实践指南整理,并结合 Java 后端、软件测试、微服务和企业研发管理场景进行了工程化改写。

本文部分内容参考了霍格沃兹测试开发学社整理的相关技术资料,主要涉及软件测试、自动化测试、测试开发及 AI 测试等内容,侧重测试实践、工具应用与工程经验整理。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。