最近两年,大模型几乎已经渗透到软件研发的每一个环节。
写业务代码、分析线上日志、生成单元测试、优化 SQL、评审需求、补接口文档、设计技术方案……
但在实际团队里,经常出现一个非常割裂的现象:
同样使用 GPT,有人已经把 AI 变成了稳定的开发搭档;有人却觉得 AI 生成的代码漏洞百出,不是无法运行,就是严重脱离项目实际。
问题往往不完全出在模型能力上。
很多时候,是因为工程师只告诉了模型“要做什么”,却没有告诉它:
- 当前项目是什么环境;
- 哪些内容可以修改;
- 哪些业务规则不能破坏;
- 最终结果应该以什么格式交付;
- 怎样才算真正完成任务。
一句“帮我优化一下代码”,本质上不是开发任务,更像一个模糊愿望。
真正高质量的 Prompt,也不是堆砌几个所谓的“咒语”,而是把需求、上下文、约束、验收标准和执行工具组织成一份模型能够理解的任务协议。
OpenAI 当前的准确性优化文档仍然总结了六类核心策略:
- 撰写清晰的指令;
- 提供参考文本;
- 将复杂任务拆成简单子任务;
- 给模型足够的处理空间;
- 使用外部工具;
- 系统化测试每一次变化。
这六条原则看起来简单,但真正放进软件研发流程,背后涉及的已经不只是“怎么提问”,而是上下文工程、任务编排、工具调用、质量评测和团队治理。
导读
很多 Prompt 教程只教你复制一句话:
你是一名拥有十年经验的高级 Java 架构师……
但模型输出是否可靠,真正取决于后面的任务信息,而不是“十年经验”这几个字。
这篇文章不整理网络上的万能提示词,而是结合国内常见的软件研发场景,重新拆解 OpenAI 官方六大原则,覆盖:
- 代码生成与代码优化;
- 线上故障定位;
- SQL 与性能分析;
- 单元测试和接口测试;
- 技术方案与需求评审;
- Function Calling 与企业工具接入;
- Prompt 版本管理与自动化评测;
- 团队级 Prompt 规范建设。
需要特别说明的是:OpenAI 针对当前推理模型的官方建议,已经不再鼓励用户反复要求模型“展示完整思维链”。更合适的做法,是明确目标、验收条件和检查步骤,让模型完成分析后输出结论、依据、假设和风险。
阅读目录
- Prompt 不是搜索关键词,而是任务接口
- 研发人员通用的 GCOB Prompt 框架
- OpenAI 官方六大原则的研发实战
- 五类高频开发 Prompt 模板
- 团队级 Prompt 工程体系如何落地
- 开发者最容易踩的七个坑
- 从 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 测试等内容,侧重测试实践、工具应用与工程经验整理。