大模型应用如何做 A/B 测试?
简化版
大模型 A/B 测试要比较完整版本组合,而不是只写“模型 A 对模型 B”。先定义一个主要业务指标,再设质量、安全、延迟和成本护栏;按用户或会话稳定随机分流,避免同一用户来回切版本造成污染。
实验前做功效和样本量估算,运行中保留曝光日志,结束后按 Intent-to-Treat 分析,并检查分流比例、租户/长度分层与多重检验。安全违规等红线指标不等待统计显著,一旦超过阈值立即停止。
详细版
实验单位通常选用户或会话:用户级适合长期体验,会话级避免上下文跨版本;请求级虽然样本多,但容易产生串扰。候选与控制应固定模型、Prompt、索引、策略等 Manifest。
eligible traffic -> stable hash(unit_id, experiment_id)
-> control / treatment
-> exposure log -> outcome join
主要指标可为任务成功率、转化或问题解决率;护栏包括事实错误、安全违规、P95/P99、每成功任务成本、人工转接和投诉。先跑 A/A 验证分流与指标,再小流量 A/B;未达到预设样本量前不因短期波动反复看结果。
完整版教学
1. 先写清实验假设
假设应包含变更、目标群体、预期方向和最小有意义提升。例如“新检索策略使中文知识问答解决率提升至少 2%,且 P95 与安全违规不恶化”。
没有预注册假设,团队容易在几十个指标中挑出偶然显著结果。
2. 实验版本必须不可变
控制组和实验组分别绑定完整 Manifest:模型、Prompt、索引、工具和安全策略。实验中途静默更新其中一项,会使结果无法解释。
紧急安全修复需同步应用两组并记录;若只改一组,通常应重启实验或分段分析。
3. 随机化单位如何选择
| 单位 | 优点 | 风险 |
|---|---|---|
| 请求 | 样本增长快 | 同一用户体验混杂 |
| 会话 | 上下文一致 | 跨会话影响未控制 |
| 用户 | 长期体验稳定 | 样本相关、周期更长 |
| 租户 | 防组织内串扰 | 可用单位数量少 |
选择最小但不会互相影响的单位。协作产品常需租户级,聊天助手多用用户或会话级。
4. 稳定分流如何实现
对 experiment_id 与稳定单位 ID 做哈希,映射到桶;服务端记录 eligibility、assignment 和实际 exposure。用户被分配但未真正看到功能时,要区分分配与曝光。
租户、区域和设备等关键维度可分层随机,减少基线不平衡。不能让客户端自行选择组别。
5. 为什么先跑 A/A
A/A 两组使用同一版本,用来验证分流比例、日志连接、指标方差和告警。若同版本也持续出现显著差异,A/B 基础设施不可信。
同时检查 Sample Ratio Mismatch:实际分组比例偏离设计,可能是路由、缓存或过滤逻辑有 Bug。
6. 指标体系如何设计
只选一个或少数主要指标决定实验成败;诊断指标解释原因;护栏保护不能牺牲的边界。
| 层次 | 示例 |
|---|---|
| 主要指标 | 任务解决率、转化率 |
| 诊断指标 | 引用点击、工具成功、输出长度 |
| 护栏指标 | 安全违规、事实错误、P99、成本 |
模型“点赞率”可能受表达风格影响,最好同时有任务完成等客观指标。
7. 样本量为什么要事前估算
给定基线、最小可检测效应、显著性水平和统计功效,估算需要的独立实验单位。指标方差越大、希望发现的提升越小,需要样本越多。
standard_error ∝ 1 / sqrt(independent_sample_size)
实验运行时间还应覆盖工作日/周末和业务周期,避免一天流量恰好偏向某类请求。
8. LLM 输出随机性怎么处理
线上采样随机并不会破坏随机对照,只会增加方差。可在离线配对评测中固定 Seed 或对同一输入多次采样,理解输出波动。
不要为实验强行改成生产不会使用的 temperature=0,否则外部有效性不足。记录实际解码配置以便分层分析。
9. 缓存会造成什么污染
若控制组和实验组共享不含版本的响应缓存,实验组可能返回控制组结果。缓存键必须包含实验版本,或实验期间隔离命名空间。
前缀缓存若计算语义相同可共享,但必须确认模型、Prompt 与权限完全兼容;不能为了省成本破坏实验处理差异。
10. 如何处理早停与反复查看
每天查看 P 值并在第一次显著时停止,会抬高假阳性。应使用预定样本量,或采用序贯检验等支持持续观察的方法。
安全与严重故障护栏例外:超过绝对阈值立即停止,不需要等待统计显著性。这是风险控制,不是效果结论。
11. Intent-to-Treat 为什么重要
ITT 按最初随机分配分析,即使部分请求 Fallback 或功能未触发,也保留随机化带来的可比性。只分析“成功使用新功能”的人会引入选择偏差。
可额外报告实际曝光分析解释机制,但不能用它替代主 ITT 结论。
12. 分层和异质性怎样分析
总体提升可能掩盖长上下文、中文或高风险任务退化。按预先定义的语言、任务、长度和租户等级看异质性。
切片越多,偶然显著越多,需要控制多重检验并把探索性发现标注为待复验,不能事后挑最漂亮人群。
13. 如何做决策
结果需同时满足主要指标、护栏、成本和置信区间。统计显著但提升小于业务最小价值,未必值得增加复杂度。
结论可以是上线、否决、延长或针对特定人群上线。保存实验代码、Manifest、样本定义和分析结果,便于复核。
A/B 测试的价值不是为候选版本寻找一个显著指标,而是用预先约定的证据判断它是否值得承担上线风险。
14. 常见误区与追问
- 误区:随机分请求总是最好。 会话和用户串扰会污染体验。
- 误区:只看平均点赞率。 风格偏好不等于任务完成或事实正确。
- 误区:结果一显著就停止。 反复窥视会提高假阳性。
- 误区:实验中可以继续修改 Prompt。 版本变化使处理组含义不再固定。
- 误区:总体指标提升即可。 安全、P99 或关键切片可能已经退化。
- 追问:为何记录曝光? 分配不等于用户真正经过候选路径。
- 追问:缓存如何处理? 响应缓存按实验版本隔离,避免跨组污染。
15. 加强记忆
- 先定假设:人群、指标、最小提升和护栏。
- 再固版本:比较完整 Manifest。
- 再选单位:请求、会话、用户或租户,避免串扰。
- 再验系统:A/A 与分流比例检查。
- 再定统计:样本量、周期、早停规则。
- 再做分析:ITT 为主,预设切片与多重检验。
- 最后做决策:效果、风险、延迟和成本共同达标。