实验组之所以上线,是因为仪表盘显示“转化率 +4%,p < 0.01,n = 2.3M”。但在全球推行 6 周后,这一增长消失了。由于没有其他合理解释,团队将这次复盘报告归类为“规模效应”。然而,真正的原罪一直潜伏在提示词组装器(prompt assembler)中:决定实验分组的路由哈希(routing hash)派生自一个用户层级(user-tier)属性,而三行代码后,同样的属性被插值到了提示词模板中。模型直接在带内(in band)读取了分组分配。所谓的“实验干预”(treatment)并非提示词的改变,真正的干预是提示词改变后所吸引的用户群体。
这是一种在团队从 Web 时代继承的实验手册中并不存在的失效模式。按钮颜色不会读取用户层级并决定表现不同,但提示词会。一旦你的实验干预是一个由模型解释的字符串,那么任何触及路由决策且同时触及提示词的输入,都会变成实验无法关闭的后门。
模型是参与者,而非结果
在经典的 A/B 测试中,实验干预是渲染页面的一个属性,用户是 passive 的接收者。你更改一个行动召唤(CTA)按钮,衡量点击量,然后结束工作。随机化单元(用户)和实验干预应用单元(页面)被网络边界隔开,除非你选择泄露,否则用户的属性不会泄露到实验干预本身。
LLM 实验瓦解了这一边界。实验干预是一个提示词,而提示词是用户属性的函数。你并不是在渲染一个不同的段落,而是在渲染一个不同的“指令集”,模型随后会结合请求中的其他所有内容对该指令集进行条件化处理。如果你的提示词模板在组装器早期就根据用户层级进行分支——几乎所有生产环境的组装器都会这样做,因为企业级用户拥有更长的推理预算,而免费层级用户则会收到更简洁的拒绝——那么模型就会直接看到分配轴。它不需要知道自己处于哪个实验组,它已经知道自己在和哪种类型的用户交谈,而且由于构造原因,这种知识与实验分组具有共线性。
这就是经典因果推断中实验干预泄露(treatment leakage)在 LLM 领域的对应物:当分配信号与同样影响结果的混杂因素(confounder)相关时,分配的估计效应就会受到混杂因素效应的污染。随机化可以保护你免受未测量的混杂因素的影响,但前提是分配本身必须与实验干预摄取的输入正交。对于 LLM,这种正交性几乎从不是免费的,你必须在设计中考虑这一点。
虚假提升是如何产生的
让我们端到端地梳理一下这个失效模式。你的路由层使用用户 ID 和盐(salt)进行哈希处理以分配组别。到目前为止,一切正常。但这个盐是实验 ID,而哈希桶的键是一个包含用户层级的元组——因为去年有人想“确保每个层级都能获得平衡的曝光”。同一个用户层级值被传递到提示词组装器中,由其选择系统提示词片段(“你是企业客户的高级顾问”对比“你是一个得力的助手”)。现在,模型接收到的提示词结构在子实验组(sub-arm)级别上与群体变量相关。
在对照组中,两个层级都得到旧的提示词。在实验组中,两个层级都得到新的提示词。从理论上讲,这目前仍然没问题:每个层级都以正确的比例看到两个组别。但是,新提示词 对层级的敏感度与旧提示词不同。也许新提示词在企业背景下扩展得更激进,因为作者是针对企业级数据进行调优的。也许它对免费层级请求的截断方式不同,因为新格式在长输入上达到了 Token 限制。结果是,作为两个层级边际平均值计算出的实验效应,最终被新提示词所青睐的层级所主导。
在全量上线时,人群构成发生了变化。新提示词现在服务于 100% 的流量,包括实验从未覆盖到的边缘用户:试用账户、路由器默默合并到“免费”类别的已弃用层级、以及根本不经过分配层的地理队列。“转化率 +4%”是分配窗口内层级构成的属性,而不是提示词本身的属性。构成改变,提升消失,复盘报告虚构了一个从未存在过的规模效应。
这与泰曼定律(Twyman's Law)的逻辑一致:实验结果越不寻常,就越有可能源于仪表化误差(instrumentation error)。在 LLM 领域,这种仪表化误差是结构性的而非偶然的——模型被设计为读取决定其分组的输入。
你的实验技术栈所遗漏的征兆
有一些信号表明分配正在泄露,而大多数实验仪表盘并未配置为显示这些信号。
第一种是实验组条件下的输入散度(arm-conditional input divergence) 。提取提示词端每个输入的分布——系统片段 ID、工具目录哈希、模型温度、最大 Token 数、用户层级字符串、检索到的文档数量——并在不同组别之间进行比较。如果其中任何一个在对照组和实验组之间存在显著的 KL 散度,那么你就存在泄露:各组看到的输入分布并不相同。在一个干净的实验中,各组之间唯一不同的应该是实验正在测试的提示词变体。
第二种是与分配轴对齐的提升异质性(lift heterogeneity) 。如果按用户层级切分的实验效应在不同切片之间存在剧烈差异——且分配哈希包含层级信息——你应该怀疑边际提升是人群混合产生的假象,而非真实效应。在移除哈希中的层级信息后,针对重新随机化的分配运行相同的实验组,看看提升是否依然存在。
第三种是在无人监控的切片上出现样本比例失调(SRM) 。SRM 检测是顶层分组切分的标准配置,但大多数团队并不会在每个提示词端输入上运行它。如果一个实验组内的用户层级分布偏离人群基线的程度超过了卡方检验 p 值 0.01,那么分桶机制就在默默进行过滤,且这种过滤与实验组相关。即使在没有 LLM 参与的情况下,这种情况在大约 6–10% 的在线实验中也会出现,而 LLM 流水线使其变得更加普遍,因为提示词组装器有更多可能导致短路的地方。
第四种是上线时的提升蒸发(lift evaporation) 。这在事后具有诊断意义,但不具预测性。如果你的实验在分配窗口内显示出真实的提升,而提升在全量流量下消失了,那么在这两个阶段之间人群构成发生了变化。要么是实验未覆盖到的边缘用户具有不同的敏感度,要么是分配层在进行某种全量上线时不存在的过滤。这两者都是同一个潜在问题的表现:提升是以分配窗口内的人群为条件的,而你却将其视为无条件的。
设计实验,防止模型“作弊” 要填补这一鸿沟,需要一套严谨的方法,采用这套方法的团队才能保住实验结果的有效性。这在统计学上并非创新,只是将因果推断中已知的规则,应用到比按钮颜色更需要这些规则的实验载体上。
对 Prompt 不可见的信息进行哈希处理。 分配键(assignment key)的生成应源自模型读取的请求负载(payload)中完全不出现的数值——通常是使用稳定的用户 ID 结合每个实验特有的盐值(salt)进行哈希,绝不要使用用户层级、订阅方案名称或地理位置。分配机制是实验正交性的唯一保证;请务必保护好它。
审计各实验组(arm)的输入分布。 在读取转化指标之前,对比各组之间 Prompt 端的所有输入。如果除了实验测试的变量外,其他部分的差异不是空操作(no-op),那么你的随机化实验还不成立。在读取结果之前,先修复组装器(assembler)。
对无法解耦的维度进行分层。 有时泄露是结构性的——新 Prompt 确实需要根据层级表现出不同的行为,因为不同层级的 Token 预算不同。在这种情况下,应将实验作为分层发布(stratified rollout)来运行,每个层级都是一个独立的随机化子实验,而整体提升(top-line lift)是各层级内提升的总体加权平均值。Statsig 和 Eppo 风格的实验平台支持这种做法;这并不罕见。罕见的是专门针对 Prompt 实验这样做,因为大多数团队将 Prompt 视为一种单一的全局处理方式。
预留一个重新随机化的实验组。 在实验组内部,切出一小块样本,使用不包含“层级”的另一种哈希方式进行重新随机化。对比这部分样本的层内提升与主实验组的层内提升。如果提升效果一致,说明你的分配机制没有泄露。如果不一致,那么其中的差异就是由于层级人口统计学特征产生的偏差(artifact)。
对模型屏蔽分配维度。 在可能的情况下,在模型看到 Prompt 之前,从中剥离与分配相关的特征。这是最激进的方案,仅在实验关注 Prompt 质量而非个性化时才有意义。但这能迫使模型根据内容而非用户层级来对 Prompt 进行评分。
架构层面的认知 人们的本能反应是将实验中的 LLM 视为一个结果变量:输入分组分配,输出转化结果。这种框架是错误的。LLM 是一个实验向量(treatment vector) ,一旦任何与分配相关的特征触及 Prompt,它就会在瞬间将分配信息作为输入进行读取。你测量的并不是单纯 Prompt 变更的效果;你测量的是 Prompt 变更的效果,加上模型根据泄露的分配信号进行调节(conditioning)的效果,而后者往往比前者影响更大。
Web 时代的 A/B 测试可以忽略这一点,因为处理手段(如改变按钮颜色)不会读取其输入。但 Prompt 会读取一切。如果不针对模型进行分配屏蔽,团队运行的实验其实就没有对照组——对照组同样在被一个“知道自己身处何处”的模型评分,而实验组的“提升”不过是模型在表达一种实验并未要求它表达的偏好。
修复的方法不是停止运行 Prompt 实验,而是将分配层和 Prompt 组装器视为一个必须从一开始就针对泄露进行设计的耦合系统。审计每个实验组的输入。对 Prompt 不可见的数值进行哈希。对无法解耦的维度进行分层。预留一个重新随机化的切片作为交叉校验。否则,你将不断上线那些在分配窗口内看起来是大获全胜、但在全量发布时却迅速失效的 Prompt,而事后分析会不断将原因归咎于规模效应,而实际上,那只是你在决定按层级分桶那天,亲手埋入管道的混杂因素(confounder)。
会员专享
余下内容仅对会员开放。 会员可读完整内容 —— 每一个公开发布的观点背后,那些框架、决策与推理的全貌。
— 完整文章,包含未公开存档的部分 — 可落地的工作框架,附带权衡与决策依据 — 新文章抢先看,先于公开发布 登录以继续阅读→ 随时取消 · 一次订阅,畅读全部