AB测试LLM特性 本节摘要:传统 A/B 测试不是为非确定性的 LLM 设计的。关键区分:评测(evals)回答「模型能不能完成任务」,A/B 测试回答「用户在不在乎」——两者缺一不可,靠「感觉」上线已经行不通。2026 年可测的三条轴:提示工程(措辞)、模型选择(GPT-5 vs GPT-4o-mini vs 开源;准确率 vs 成本 vs 延迟)、生成参数(温度、top-p)。真实案例:某聊天机器人奖励模型变体带来 +70% 对话长度和 +30% 留存;Nextdoor 邮件主题行实验在奖励函数打磨后带来 +1% 点击率;Khan Academy Khanmigo 在延迟 vs 数学准确率轴上反复迭代。
本节摘要:传统 A/B 测试不是为非确定性的 LLM 设计的。关键区分:评测(evals)回答「模型能不能完成任务」,A/B 测试回答「用户在不在乎」——两者缺一不可,靠「感觉」上线已经行不通。2026 年可测的三条轴:提示工程(措辞)、模型选择(GPT-5 vs GPT-4o-mini vs 开源;准确率 vs 成本 vs 延迟)、生成参数(温度、top-p)。真实案例:某聊天机器人奖励模型变体带来 +70% 对话长度和 +30% 留存;Nextdoor 邮件主题行实验在奖励函数打磨后带来 +1% 点击率;Khan Academy Khanmigo 在延迟 vs 数学准确率轴上反复迭代。平台分野:Statsig(2025 年 9 月被 OpenAI 以 11 亿美元收购)——序贯检验、CUPED、全家桶;GrowthBook——开源、仓库原生、贝叶斯+频率派+序贯三引擎、CUPED、SRM 检查、Benjamini-Hochberg 与 Bonferroni 多重比较校正。选哪个,看你是否偏好仓库 SQL 取数姿势,以及「被 OpenAI 收购」对你的组织是否构成考量。
对应原课程:Phase 17 · Lesson 21 ·
21-ab-testing-llm-features(原英文phases/17-infrastructure-and-production/21-ab-testing-llm-features/docs/en.md)。
阅读完本节,你应当能够:
你手工调了一个系统提示。感觉更好。你上线了。转化率随噪声波动。你怪指标。或者你换了个新模型,转化率纹丝不动——是模型变差了,还是改动小到测不出来?你不知道,因为你没有做 A/B 就上线了。
评测回答的是:模型在固定分布上输出是否正确/有用/安全。A/B 测试回答的是:新变体是否真的撬动了那个「重要」的用户级指标。评测在暴露前抓回归,A/B 在上线后确认产品影响——少了任何一道,你都在靠「感觉」上线。
「靠感觉」是最普遍的反模式。每个资深工程师都能举出一个「因为感觉更好」就上线、却悄悄拖累产品指标数月没人察觉的特性。A/B 是把纪律焊进流程的强制函数。
| 维度 | 评测 Eval | A/B 测试 |
|---|---|---|
| 环境 | 离线 | 在线 |
| 数据 | 标注集 | 真实用户、随机分桶 |
| 裁判 | 评分细则/LLM-as-judge/人工 | 用户级行为指标 |
| 回答 | 这个固定分布上输出好不好 | 新变体是否撬动了关键指标 |
两者缺一不可。评测在暴露前抓回归,A/B 在上线后确认产品价值。
CUPED(Controlled-experiments Using Pre-Experiment Data)用实验前数据回归掉预期间方差,再比较实验后指标。典型方差削减 30~70%,等效样本量「免费」变大。Statsig 与 GrowthBook 都内建实现。
经典 A/B 假设固定样本量。序贯检验(「边看边判」)在反复查看的情况下仍能控制假阳性率。always-valid 序贯过程(mSPRT、Howard 置信序列)让你在出现明显赢家时提前停止,不必死等预设样本量。
同时跑 20 个 95% 置信的 A/B,光靠运气也会出一个假阳性。Bonferroni 把 α 除以检验次数(最严);Benjamini-Hochberg 控制错误发现率(False Discovery Rate, FDR,较宽松)。GrowthBook 两者都实现。
分桶哈希把用户随机分到变体。若 50/50 设定跑出 47/53,说明分桶坏了——SRM 检查会标记它。两个平台都实现。
同一提示产生不同输出。经典功效计算假设 IID 观察;LLM 非确定性下,有效样本量低于名义值。把所需样本量乘 1.3~1.5 作为安全裕度。
Statsig:
GrowthBook:
原课程 code/main.py 模拟一个带固定边界与序贯边界的 A/B 测试,展示序贯如何让你提前停止。下面给最小可读的序贯判定骨架。
def sequential_ab_test(conversions_a, conversions_b, n, alpha=0.05): """简化版序贯判定:比较两变体转化率,序贯边界用正态近似。 conversions_a/b: 两变体累计成功数 n: 每变体当前样本量(假设等量) alpha: 单次检验显著性水平 返回: (判决, Z 统计量, 序贯边界) """ p_a = conversions_a / n p_b = conversions_b / n p_pool = (conversions_a + conversions_b) / (2 * n) se = (p_pool * (1 - p_pool) * (2 / n)) ** 0.5 z = (p_b - p_a) / se # Z 统计量 # always-valid 序贯边界比固定 α/2 更严,这里用收紧的近似 seq_boundary = 2.24 # mSPRT 近似,对应 ~alpha 收紧 if z > seq_boundary: verdict = "B 显著优于 A,可提前停止" elif z < -seq_boundary: verdict = "A 显著优于 B,可提前停止" else: verdict = "继续收集样本" return verdict, round(z, 3), seq_boundary # 案例:基线转化 3%,A=90/3000,B=135/3000(实测 +1.5pp) v, z, b = sequential_ab_test(90, 135, 3000) print(f"判决={v}, Z={z}, 序贯边界={b}")
💡 序贯检验的真正价值不是「更快出结论」,而是「在明显赢家出现时合法地提前停」。没有序贯校正的「边看边判」会膨胀假阳性率——你以为赢了,其实是多重偷看的运气。
| 维度 | Statsig | GrowthBook |
|---|---|---|
| 许可/归属 | 闭源 SaaS,2025 年 9 月被 OpenAI 收购 | 开源 MIT,可自托管 |
| 数据姿势 | 自带事件管道 | 仓库原生,直读 Snowflake/BigQuery/Redshift |
| 统计引擎 | 序贯 + CUPED + 频率派 | 贝叶斯 + 频率派 + 序贯(三引擎可选) |
| 多重比较 | 支持 | Bonferroni + Benjamini-Hochberg |
| SRM 检查 | 内建 | 内建 |
| 全家桶 | 特性 flag + 实验 + 可观测 | 实验为主,与外部 flag 配合 |
| 适合谁 | 想要打包产品、不在意 OpenAI 归属 | 仓库 SQL 派、数据团队掌管指标、想要 OSS |
心法:你的取数姿势(是否仓库 SQL 原生)和你的供应商归属考量(被 OpenAI 收购是否构成合规/采购阻力),往往比功能清单更能决定选型。
本节产出 outputs/skill-ab-plan.md(原课程目录)。给定特性改动、工作负载、基线,它产出:
样本量计算:基线转化 3%,预期提升 5%(相对),要 80% 功效需要多少样本?叠加 LLM 非确定性裕度后呢?
平台选型:一个受医疗监管、必须本地部署的客户,选 Statsig 还是 GrowthBook?给出理由。
三指标设计:设计一个对比 GPT-5 与 GPT-4o-mini、以「每解决工单成本」为终点的 A/B。主指标、护栏指标、次要指标分别是什么?
金丝雀过了但 A/B 没过:金丝雀五门全过,但 A/B 显示 -1.2% 转化。上不上?写出升级判定标准。
CUPED 收益:预期间方差占实验后方差 60%。算出 CUPED 带来的有效样本量提升。
下一节,我们转向负载测试——看 k6、Locust 为何在 LLM 上「撒谎」,以及 LLMPerf、GenAI-Perf 如何用流式感知与真实提示分布还原真相。