第4章:A/B测试入门
说实话,我刚入行那会儿,对A/B测试是有点不屑的。
我觉得提示词嘛,写得好不好,凭感觉就行了。直到有一次,我给一个客服机器人写提示词,自己觉得已经完美了,结果上线后用户满意度直接掉了15%。老板找我谈话,我才意识到——没有数据支撑的优化,都是玄学。
什么是A/B测试?
A/B测试,说白了就是做对比实验。
你有一个提示词版本A,还有一个修改后的版本B。你把它们分别扔给两组用户(或者同一组用户分两次),看看哪个效果更好。
我习惯把A/B测试拆成三个核心要素:
- 对照组(A):你当前在用的版本,也就是基线
- 实验组(B):你做了某个改动的新版本
- 评估指标:用来判断谁赢了的标尺
举个例子。你写了一个翻译提示词:
版本A:请将以下英文翻译成中文,保持原意。
版本B:请将以下英文翻译成中文,保持原意,使用更口语化的表达。
然后你让100个用户分别用这两个版本翻译同一段话。最后看哪个版本的用户满意度更高。这就是A/B测试。
核心原则:一次只改一个变量。改多了,你根本不知道是哪个改动起了作用。
如何设计提示词的A/B测试实验
设计实验这件事,我踩过不少坑。分享一下我现在用的流程:
第一步:明确你要测什么
别上来就改。先问自己:我到底想优化什么?
- 是想让回答更准确?
- 还是想让语气更友好?
- 或者是想减少幻觉?
我在项目中遇到过最典型的案例:客户说"帮我优化提示词",结果我问了半天,他自己都不知道想要什么效果。你想想看,目标都不清楚,测出来有啥意义?
第二步:设计变量
变量就是你改的那个东西。常见的有:
| 变量类型 | 举例 |
|---|---|
| 指令措辞 | "请详细解释" vs "请用一句话概括" |
| 角色设定 | "你是一名医生" vs "你是一名医学教授" |
| 输出格式 | "用列表输出" vs "用段落输出" |
| 约束条件 | "不超过200字" vs "不限字数" |
嗯,这里要注意:变量不要超过2个。我曾经一次改了3个地方,结果数据出来完全没法分析——到底是哪个改动导致的效果提升?鬼知道。
第三步:确定样本量
很多人忽略这一步。样本量太小,结果没有统计意义。
我个人的经验是:
- 简单任务(如翻译、摘要):每组至少30个样本
- 复杂任务(如创意写作、推理):每组至少50个样本
- 高精度要求(如医疗、法律):每组至少100个样本
避坑指南:我曾经只用10个样本就跑A/B测试,结果版本B胜出。上线后才发现,那10个样本恰好都是版本B擅长的类型。说白了,样本偏差害死人。
第四步:执行测试
执行的时候,有几种方式:
- 离线测试:用固定的测试集,分别跑A和B,然后人工评估
- 在线测试:把A和B部署到真实场景,随机分配用户
- 混合测试:先用离线测试筛选,再上线验证
我个人习惯先用离线测试。为什么呢?因为成本低、速度快。等离线测试有明确结论了,再上线做小范围验证。
评估指标的选择
指标选错了,测试就白做了。我见过太多人用"模型自己觉得好不好"来评估——这完全没意义。
我一般把指标分成三类:
1. 质量指标
直接衡量输出好不好:
- 准确性:回答是否正确?有没有事实错误?
- 完整性:有没有遗漏关键信息?
- 相关性:回答是否切题?有没有跑偏?
举个例子,你测一个问答提示词。版本A的回答总是很全面,但偶尔会编造数据。版本B的回答短一些,但每个数据都有出处。哪个好?这取决于你的业务场景。
2. 体验指标
用户用起来爽不爽:
- 可读性:句子通顺吗?逻辑清晰吗?
- 友好度:语气是否恰当?有没有冒犯性?
- 一致性:多次提问,风格是否稳定?
我记得有一次,我优化了一个客服提示词,准确性提升了20%,但用户投诉反而增加了。后来一查,原来是版本B的语气太生硬了。你看,光看质量指标是不够的。
3. 效率指标
快不快、省不省钱:
- 响应时间:生成速度有没有变慢?
- Token消耗:成本有没有增加?
- 迭代次数:用户需要追问几次才能得到满意答案?
我的建议:每个A/B测试至少选2个指标。一个核心指标(比如准确性),一个辅助指标(比如响应时间)。这样能避免"捡了芝麻丢了西瓜"。
一个完整的A/B测试案例
最后,我分享一个真实的案例。之前我做了一个代码生成提示词:
版本A:请用Python写一个函数,实现XXX功能。
版本B:请用Python写一个函数,实现XXX功能。要求:1. 包含类型注解 2. 添加docstring 3. 处理边界情况
我选了三个指标:
- 代码正确率(质量)
- 代码可读性评分(体验)
- 平均生成时间(效率)
测试了50个样本。结果呢?
| 指标 | 版本A | 版本B |
|---|---|---|
| 代码正确率 | 72% | 86% |
| 可读性评分 | 3.2/5 | 4.5/5 |
| 平均生成时间 | 2.1秒 | 3.8秒 |
版本B在质量和体验上完胜,但速度慢了近一倍。最后怎么选的?看业务场景。如果是给内部开发人员用,选B。如果是给用户实时生成代码,那就要权衡一下了。
小技巧:A/B测试的结果不要只看平均值。我习惯看分布——版本B是不是偶尔会出特别差的结果?如果是,那这个版本可能不稳定,需要再优化。
好了,这一章就到这里。记住一句话:没有数据支撑的优化,都是自我感动。下一章我们聊聊怎么用A/B测试的结果来迭代你的提示词。