提示词A/B测试:别再拍脑袋改Prompt,用数据说话

📅 2026/9/21 ✍️ 小文 📖 约 1 分钟

提示词优化不能靠感觉。本文讲如何设计提示词A/B测试:定义指标、构造测试集、控制变量、显著性判断,附完整实验流程。

“我觉得新版本提示词更好用。“——这是 AI 团队里最常见也最不可靠的一句话。提示词的改动,凭感觉判断几乎必然出错:你看到的几个例子上变好了,可能在整体上反而变差了。 要让提示词优化摆脱玄学,唯一的办法是——做 A/B 测试。

一、先定义”好”是什么

在测试之前,必须把目标量化。不同任务的指标不同:

任务类型核心指标
分类/抽取准确率、F1、格式合规率
问答事实正确率、引用准确率、拒答率
生成人工/模型打分、长度合规、不重复率
Agent任务完成率、步数、工具调用正确率

关键原则:一次只盯一到两个主指标,否则容易顾此失彼。

二、构造有代表性的测试集

这是整件事里最费功夫、也最重要的部分。

  • 规模:至少 50~100 条,太小噪声会掩盖真实差异。
  • 分布:覆盖高频问题(占 70%)、边界问题、长尾问题、以及”应当拒答”的问题。
  • 标准答案:能自动判定的用规则或模型判;不能的,人工标注或双人交叉评审。
  • 冻结版本:测试集一经确定就固定下来,所有实验都跑同一套,否则无法比较。

三、控制变量

提示词实验最常见的错误是同时改了好几处,然后不知道到底是哪处起了作用。

  • 若目标是”看整体效果”,可以整体替换,但要做多轮。
  • 若目标是”找到哪句话有用”,则每轮只改一个变量:只加一句约束、只换一个例子、只调一次语气。

推荐”消融实验”思路:在基线 A 的基础上,逐个叠加改进项,观察每一步的增量。

四、判断显著差异

不要看到 52% 对 48% 就下结论。样本量小时,这点差异完全可能是随机波动。

from scipy.stats import chi2_contingency
# A: 100次中52次正确, B: 100次中58次正确
table = [[52, 48], [58, 42]]
chi2, p, _, _ = chi2_contingency(table)
print("p值:", round(p, 3))  # p < 0.05 才认为差异显著

若 p 大于等于 0.05,说明差异不显著,需要更多样本才能判断。

五、一个可复用的实验流程

def ab_test(prompt_a, prompt_b, testset, model):
    res = {"A": 0, "B": 0}
    for q, gold in testset:
        for name, prompt in [("A", prompt_a), ("B", prompt_b)]:
            out = call_model(model, prompt, q)
            if is_correct(out, gold):
                res[name] += 1
    return res, {k: v / len(testset) for k, v in res.items()}

跑完之后再抽样人工复核——尤其是在两个版本接近时,人工能发现自动指标看不到的质量差异(比如措辞、语气、边界处理)。

六、四个执行纪律

1. 先立基线。 没有基线,任何”更好”都是空话。

2. 记录一切。 每次实验的提示词版本、模型版本、温度、测试集版本、结果,全部归档。否则你会在同一个坑里反复来回。

3. 警惕过拟合测试集。 反复在同一套题上调优,会”刷分”。定期用新数据验证。

4. 上线后持续监控。 测试环境的小胜,未必等于线上大胜。真实流量是最终裁判。

结语

提示词工程正在从”手艺”变成”工程”。A/B 测试是其中最基本的方法论:定义指标、构造测试集、控制变量、判断显著性。 当你开始用数据而不是感觉来决策,提示词优化的迭代速度和可信度都会上一个大台阶。

📤 分享到