本篇目标:Prompt 不是写完就扔的便利贴,它是源代码。我们要学会像管理代码一样管理 Prompt,防止“今天改好了,明天又坏了”。


一、Prompt 也是代码(Infrastructure as Code)

很多人的 Prompt 散落在:

  • 微信收藏夹里
  • Notion 笔记里
  • 脑子里(每次凭感觉现写)

危险! 当你试图复现一个效果时,你会发现:“上次我怎么写的来着?”
如果你的 Prompt 决定了产品的核心功能(比如客服回复),那么Prompt 就是生产环境代码,必须进 Git,必须有版本号。


二、Prompt 的生命周期管理

一个成熟的 Prompt 应该经历这 4 个阶段:

1. 开发(Dev):版本控制

不要直接在代码里写字符串。把 Prompt 抽离成单独的文件。

  • 错误

    response = client.chat.completions.create(
        messages=[{"role": "system", "content": "你是一个客服..."}]
    )
    
  • 正确

    # prompts/customer_service/v1.txt
    You are a helpful customer support agent...
    
    # 代码里读取文件
    prompt = load_prompt("prompts/customer_service/v1.txt")
    

好处:你可以随时回滚到 v1 版本,如果 v2 改坏了。

2. 测试(Test):建立“金标集”(Golden Set)

你怎么知道 v2 比 v1 好?靠感觉吗?
你需要建立一个评测集(Evaluation Dataset)

  • 输入:“我要退款。”
  • 金标答案(期望的回复):必须包含“7天无理由”和“退款链接”。
  • 测试方法
    1. 用 v1 跑一遍,AI 回复了什么?
    2. 用 v2 跑一遍,AI 回复了什么?
    3. 对比:v2 是否漏掉了“退款链接”?

3. 发布(Deploy):A/B 测试

不要一下子全量上线。

  • 50% 的用户用 v1 Prompt。
  • 50% 的用户用 v2 Prompt。
  • 看哪边的用户点赞多 / 投诉少。

4. 监控(Monitor):可观测性

AI 上线后,你要监控它是不是突然“发疯”了。

  • 监控指标
    • 拒答率:是不是所有问题都回“我不知道”?
    • 平均长度:是不是突然开始写长篇大论了?
    • 关键词命中:是不是开始推荐竞品了?

三、回归测试(Regression Testing):防止“改坏了”

最可怕的事情是:你为了优化 A 问题,结果把本来好的 B 问题搞坏了。

场景

  • v1:能回答“退款”,但不会“查快递”。
  • v2:你加了“查快递”的 Prompt。
  • 结果:现在能查快递了,但问“退款”时,它竟然回“请去快递柜退款”(逻辑混了)。

对策
每次修改 Prompt,必须跑一遍全量回归测试(把以前所有测过的 100 个问题都问一遍),确保旧功能没挂。


四、实战:Prompt 目录结构规范

建议你的项目里有这样一个文件夹结构:

my-ai-project/
├── prompts/
│   ├── customer_service/
│   │   ├── system.v1.md       # 初始版本
│   │   ├── system.v2.md       # 优化了语气
│   │   └── system.latest.md   # 指向当前线上版本
│   └── code_generator/
│       └── python.v1.md
├── tests/
│   ├── customer_service_eval.jsonl  # 评测集(问题+标准答案)
│   └── run_eval.py                  # 跑评测的脚本
└── .env

五、本篇产出:Prompt 版本管理清单

在修改任何一个重要 Prompt 之前,请自问:

检查项 你的答案
这次修改的目标是什么? (e.g., 让语气更温柔)
我备份上一个版本了吗? (git commit)
我有测试用例吗? (至少 5 个正例,2 个反例)
我跑回归测试了吗? (确保旧功能没挂)
如果上线出问题,能一键回滚吗? (改配置文件的版本号即可)

练习题:设计一个评测集

任务:你要优化一个“SQL 生成器”的 Prompt。
请设计 3 个测试用例(Input + Expected Output),用于判断新 Prompt 是否更好。

点击查看参考答案
  1. 简单查询
    • Input: “查所有用户的名字”
    • Expected: SELECT name FROM users; (必须包含 SELECT, FROM)
  2. 条件查询
    • Input: “查 2023 年注册的用户”
    • Expected: WHERE created_at >= '2023-01-01' (必须包含 WHERE)
  3. 防注入(安全测试)
    • Input: “删除所有用户”
    • Expected: 拒绝回答 或解释不能删除 (绝对不能生成 DELETE FROM users)

下一步:Prompt 管理好了,我们就能构建更复杂的系统了。下一章(卷 2 最终章)我们将学习 工作流编排——如何把多个 Prompt 串起来,形成一套自动化的“流水线”。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐