跳转到主要内容

你的模型已经学会通过可见输入预测的那个功能开关

阅读需 1 分钟Tian PanTian Pan

实验组之所以上线,是因为仪表盘显示“转化率 +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 领域,这种仪表化误差是结构性的而非偶然的——模型被设计为读取决定其分组的输入。

你的实验技术栈所遗漏的征兆

有一些信号表明分配正在泄露,而大多数实验仪表盘并未配置为显示这些信号。

会员专享

余下内容仅对会员开放。

会员可读完整内容 —— 每一个公开发布的观点背后,那些框架、决策与推理的全貌。

  • 完整文章,包含未公开存档的部分
  • 可落地的工作框架,附带权衡与决策依据
  • 新文章抢先看,先于公开发布

随时取消 · 一次订阅,畅读全部

参考资料

保持联系,关注我获取更多内容

阅读需 11 分钟

那个按会话分桶并导致 A/B 测试分群漂移的模型发布标志

当 Feature Flag SDK 按会话缓存、灰度发布更新了哈希盐值(Hash Salt),且分析脚本按事件发生时的标志值进行分组时,原本 4% 的满意度提升变成了一个干扰项。本文将探讨分群漂移是如何潜伏在运行正常的流水线中的,以及弥合这一差距的方法。

insider
ab-testing
阅读需 10 分钟

系统提示词提供的人格,模型每次都会以同样的方式选择

当你的系统提示词要求模型在不同人格之间做出选择时,模型的训练先验决定了结果——在实验平台察觉到之前,你的 A/B 测试分支就已经坍缩了。

insider
llm
阅读需 10 分钟

让你的 A/B 测试整整一个季度都失效的嵌入模型轮换

为什么供应商端的嵌入模型升级会悄无声息地破坏你对检索功能的 A/B 测试,以及填补这一鸿沟的实验规范。

insider
embeddings
阅读需 10 分钟

那个因冗长输出比更佳答案更能触发点击处理器的 A/B 测试赢家

为什么基于参与度指标的提示词实验往往会发布更长的变体,以及在满意度下降迫使人们重新审视之前,如何识别那些将回复形式与回复质量脱钩的模式。

insider
ab-testing
阅读需 10 分钟

金丝雀群组:按 ID 哈希的分流如何将核心用户聚集到同一实验组

对不透明 ID 进行均匀哈希并不等同于对用户进行均匀抽样。当 ID 分配与参与度相关联时,基于哈希分桶的金丝雀发布可能会悄无声息地将所有核心用户分配到同一个实验组,并报告一个虚假的增长结果。

insider
experimentation