8.1 影子模式与AB测试


8.1 影子模式与AB测试

本节摘要:《Jev 决策编程》8.2 节在决策系统语境给出"影子模式 + A/B"的安全上线法;本节把它推广到一切 LLM 应用。影子模式(shadow mode):新版本对真实流量旁路运行但不生效——用户看到的仍是线上版本的输出,新版本的输出只留给裁判打分对照。它回答"新版本在真实分布上表现如何"这一离线回归集回答不好的问题(回归集终归是历史的快照,第 3.1 节)。工程三件事:旁路不改线(复制请求、超时放弃)、成本要记账(推理成本近似翻倍,示意按 20%~30% 流量采样)、对照要裁判(第 5 章裁判给新旧输出打分,成对比较须换序)。A/B 测试则是真刀真枪的分流实验,统计纪律四条:单一变量、事先算样本量(本节附两比例样本量脚本,纯标准库)、跑满完整周期(至少一周,覆盖周内节律)、停止规则先定(不许天天偷看 p 值)。最后拼出晋级流水线:离线回归 → 影子 → 小流量 A/B → 全量,每级都有明确的晋级判据与回退点(8.3 节)。

学习目标

阅读完本节,你应当能够:

  1. 设计影子模式的旁路架构与成本采样策略。
  2. 写出新版本的影子晋级判据(裁判对照 + 红线检查)。
  3. 用脚本估算 A/B 测试所需样本量与最小可检出效应。
  4. 复述统计纪律四条,解释"偷看 p 值"为什么毁掉实验。

一、影子模式:先旁观,再上岗

用户请求 ──▶ 线上版本(v12)──▶ 用户看到 │ └─旁路复制──▶ 影子版本(v13)──▶ 输出仅入库 │ 裁判对 (v12 输出, v13 输出) 成对打分(换序) │ 影子日志(3.1 节)+ 对照报表

工程三条纪律(与第 3.1 节影子日志同源,多一层"跑模型"):

  1. 旁路不改线:影子公司挂在上报通道之后异步执行,超时即放弃——影子挂了不许影响用户;影子输出绝不返回给用户;
  2. 成本记账:影子流量按比例采样(示意:20%~30% 起步),推理成本 ≈ 采样比例 × 全量成本,进第 4.4 节成本账;
  3. 对照用裁判:新旧输出进第 5 章裁判成对比较(必换序),同时跑规则断言(格式、拒答率、长度)——判据分流在线上的翻版。

晋级判据(示意,按业务定):

检查项 通过条件
裁判成对胜率 影子版本胜率 ≥ 45%(不要求碾压,不显著变差即可进下一级)
红线指标 拒答率、空输出率、幻觉抽检(4.3)均不劣化超 1pp
成本与延迟 单请求成本 ≤ 基线 × 1.1;p95 延迟不超基线 +500ms(示意)
影子时长 ≥ 7 天且覆盖一个完整周期(周内节律)

💡 影子模式与影子日志(3.1 节)的区别只有一句话:前者跑新版本留输出,后者只留输入。基础设施(旁路、脱敏、元数据)完全复用。

二、A/B 测试:统计纪律四条

影子通过后进入小流量对照:一部分真实用户拿 v13,其余拿 v12,比较在线指标。

纪律一:单一变量。一次实验只改一个东西(prompt 或模型或检索参数),否则赢了也不知道该谢谁。

纪律二:样本量事先算。在线指标多为比例(负反馈率、采纳率),两比例检验的样本量:

# ab_sample_size.py(纯标准库,可直接运行) """两比例 A/B 样本量估算:正态近似,双侧 95% 置信、80% 功效。""" import math def sample_size(p_base: float, mde: float, alpha: float = 0.05, power: float = 0.80) -> int: """p_base: 基线比例;mde: 想检出的最小绝对提升(如 0.02)。""" z_a = 1.959964 # 双侧 95% 的 z 值 z_b = 0.841621 # 80% 功效的 z 值 p_alt = p_base + mde p_bar = (p_base + p_alt) / 2 var = p_bar * (1 - p_bar) * 2 # 两组各贡献一份方差 n = ((z_a * math.sqrt(var) + z_b * math.sqrt( p_base * (1 - p_base) + p_alt * (1 - p_alt))) ** 2) / (mde ** 2) return math.ceil(n) if __name__ == "__main__": for mde in [0.01, 0.02, 0.03, 0.05]: n = sample_size(p_base=0.10, mde=mde) # 基线负反馈率 10%(示意) print(f"基线 10%,想检出 {mde:.0%} 绝对提升:" f"每组约需 {n:,} 次 request")

运行输出(实测,本机 Python 3.12):基线 10% 时,检出 1pp 提升每组约需 1.5 万次请求,2pp 约 3.8 千次,5pp 约 7 百次——想看的效应越小,弹药越贵;样本量算完发现攒不够,就调大 MDE 或延长周期,而不是硬跑一个检不出的实验。

纪律三:跑满完整周期。至少 7 天:工作日与周末的用户行为差异巨大,只跑周三到周四的实验结论不可迁移。

纪律四:停止规则先定。开跑前写下"第 N 天、达到多少样本才看结果";天天偷看 p 值,碰上显著就停,等于在噪声里反复抽奖——多重比较会把假阳性当战果(观点:A/B 里最贵的错误不是没检出来,是把噪声当成改进发版)。

三、在线指标:用什么比较两组

指标 定义 采集 注意
负反馈率 👎 / 总评价 用户反馈(6.2 第 1 路评分) 评价本身有偏(爱评价的用户偏极端)
采纳率 用户复制/使用了输出 前端埋点 任务型应用最硬的代理指标
重试/改写率 同一会话立即重问 trace 会话聚合(6.2) 隐性不满的信号
转人工率 低置信路由触发比例 第 7.2 节阈值网关 阈值变了要归一化再比
会话解决率 会话无升级、无重复 客服工单系统 滞后指标,适合做结论不适合做告警

⚠️ 在线指标全是代理指标:它们距离"用户真的满意"都隔着一层。结论要三角互证——在线指标、裁判抽检、季度问卷,两条腿以上的证据才发版(观点)。

四、晋级流水线:每级都有回退点

离线回归(第 3~5 章考卷,第 9.2 节 CI 门禁) │ 通过:通过率红线、hard 子集、安全子集 ▼ 影子模式(7 天,20%~30% 流量) │ 通过:裁判胜率 + 红线 + 成本延迟 ▼ A/B(5%~10% 真实流量,样本量与周期算好) │ 通过:主指标不劣化且至少一个次指标显著改善 ▼ 全量(灰度推进:10% → 50% → 100%,每步观察 24~48h) └─ 任一级失败 → 回退点:关掉分流开关即回上一版(8.3 节)

本节要点回顾

  1. 影子三纪律:旁路不改线、成本按采样比例记账、裁判换序对照;晋级看胜率 + 红线 + 成本延迟。
  2. 统计四纪律:单一变量、样本量先算(脚本给出)、跑满周期、停止规则先定。
  3. 在线指标全是代理:负反馈率、采纳率、重试率三角互证,别拿单一指标拍板。
  4. 流水线:离线 → 影子 → A/B → 灰度全量,每级一个回退点。

版本换上去了,接下来要有一双眼睛盯住它——技术层、语义层、漂移层三层指标怎么摆进一页面板、告警阈值怎么定,下一节展开。


作者与出处
原作者: 灏天文库
整理: 灏天文库整理
本站整理收录,版权归原作者/开源协议所有;欢迎通过原文链接访问源仓库。
发布者: 作者: 灏天文库 转发
评论区 (0)
U