跳到主要内容

13 篇博文 含有标签「experimentation」

查看所有标签

以 Token 数量而非结果驱动的 A/B 测试

· 阅读需 14 分钟
Tian Pan
Software Engineer

我曾合作过的一个团队发布了一次 prompt 变更,将输出 token 减少了 22%。实验仪表盘上一片绿意——方差极小,p 值非常清晰,外推后的成本节省每年高达六位数。两周后,一位研究转化漏斗的产品分析师指出,在同一时间段内,下游任务完成率下降了 11%。较短的输出省略了一个澄清步骤,而用户一直默默依赖该步骤来了解下一步该点击哪里。

实验平台没有撒谎。它报告的正是团队配置的核心指标,而且该指标确实朝着正确的方向移动了。问题在于,该指标衡量的是团队实际上并不关心的东西。Token 统计成本低,实验基础设施对其有现成的集成,而衡量结果却很难——因此团队选择了平台提供的便捷方案。结果是仪表盘上的完胜,却是产品层面的退化。

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

· 阅读需 11 分钟
Tian Pan
Software Engineer

你干净利落地运行了实验。两个实验组,一个功能开关,一个明确的指标,统计团队也认可了该设计。十二周后,你上线了胜出的方案,然而提升效果却在一个 Sprint 内悄然消失。复盘(Post-mortem)结果显示代码没问题,功能开关的滚动发布没问题,分析端也没问题。发生变动的是实验清单上没人负责的东西:你检索调用背后的托管嵌入模型(embedding model),在第三周、第七周,以及你开会审阅结果的那个早上,为同一个查询返回了略微不同的向量。你的 A/B 测试是真实的,但它运行的底层基座却不是。

这是每一个运行检索增强生成(RAG)的团队最终都会遇到的失败模式,而且几乎没人针对它进行设计。嵌入端点被视为像 Postgres 一样的稳定基座。但它不是。它是一个模型,其发布节奏由厂商控制,你不会去阅读它的更新日志,它的行为表现面(behavior surface)可能会发生偏移,而无需改变维度数量、SLA 或你签署的 API 合约。你以为实验测量的是功能变化,实际上测量的是检索机制的变迁,而功能开关带来的波动只是其上的噪声。

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

· 阅读需 11 分钟
Tian Pan
Software Engineer

实验组之所以上线,是因为仪表盘显示“转化率 +4%,p < 0.01,n = 2.3M”。但在全球推行 6 周后,这一增长消失了。由于没有其他合理解释,团队将这次复盘报告归类为“规模效应”。然而,真正的原罪一直潜伏在提示词组装器(prompt assembler)中:决定实验分组的路由哈希(routing hash)派生自一个用户层级(user-tier)属性,而三行代码后,同样的属性被插值到了提示词模板中。模型直接在带内(in band)读取了分组分配。所谓的“实验干预”(treatment)并非提示词的改变,真正的干预是提示词改变后所吸引的用户群体。

这是一种在团队从 Web 时代继承的实验手册中并不存在的失效模式。按钮颜色不会读取用户层级并决定表现不同,但提示词会。一旦你的实验干预是一个由模型解释的字符串,那么任何触及路由决策且同时触及提示词的输入,都会变成实验无法关闭的后门。

那些悄悄共享长期记忆的智能体 A/B 测试变体

· 阅读需 12 分钟
Tian Pan
Software Engineer

你运行了职业生涯中最干净的一次 A/B 测试。流量分配是 50/50,哈希函数看起来没问题,指标流水线没有造假,留存样本(holdout)得到了保留,经过三周的分析,得出了一个明确的胜者:变体 B 将任务完成率提升了 4 个点,统计团队对 p 值也没有异议。你将其 100% 发布了。发布两周后,你启动时所依据的核心指标却漂回了基准线,而且没人能解释原因。

这就是那个花了一些时间才看清的部分。两个变体都在向同一个长期记忆库写入并从中读取。变体 A 中的用户写入了一条记忆,比如 “该客户更喜欢直截了当的总结”,第二天,当同一个用户恰好处于变体 B 时,变体 B 的 Agent 加载了该记忆并将其读入其提示词(prompt)中。反向的情况也在另一个方向发生。实验并不是在比较提示词 A 与提示词 B。它是在比较 “读取提示词 B 形状记忆的提示词 A” 与 “读取提示词 A 形状记忆的提示词 B”。结果是受污染的联合分布的平均值,而发布则是回归到了同一曲面上的另一个点。

当评估指标全看“感觉”时,你的 A/B 测试无法区分两个模型

· 阅读需 9 分钟
Tian Pan
Software Engineer

你在实验中上线了一个模型替换。两周过去了,控制面板只变动了 0.1%,读数显示“无显著差异”。你得出结论,新模型与旧模型基本相同,然后继续进行其他工作。

它们并不相同。你的指标从未敏感到足以区分它们。

撒谎的 AI A/B 测试:LLM 实验中的新奇效应、结转偏差与锚定偏差

· 阅读需 12 分钟
Tian Pan
Software Engineer

你的 AI 功能在信心满满中上线了。A/B 测试显示用户参与度有了 12% 的统计学显著提升。置信区间没有重叠。样本量大小合适。p 值远低于 0.05。六周后,指标回落到了基准线。三个月后,它实际上已经低于基准线。实验告诉你该功能有效,但实验撒了谎。

这并不是你统计工具的 bug。这是标准 A/B 测试所测量的指标,与人类随着时间的推移与概率性 AI 系统互动之间存在的根本性错配。三种特定的偏差——新奇效应膨胀、锚定偏差和结转偏差——共同导致了每个 AI 功能实验的虚高,而增加留置组(holdout group)的常规补救措施并不能解决其中的任何一个问题。

为什么 AI 功能会让 A/B 测试失效(以及不会撒谎的因果推断方法)

· 阅读需 12 分钟
Tian Pan
Software Engineer

你上线了一个 AI 功能,运行了一次干净的两周 A/B 测试,看到参与度提升了 4%,然后宣告成功。六个月后,功能全量发布,参与度却持平甚至下滑。测试结果不是因为噪声——而是根本就在衡量错误的东西。

A/B 测试建立在一个假设之上:实验组和对照组的用户在统计上是相互独立的。而 AI 功能会系统性地打破这一假设。用户相互交流、从彼此的行为中学习,并共享 AI 工具的输出结果。当真正的机制是长期的行为适应时,两周内处理效应并不会趋于稳定。忽视这一点,你的实验会给出一个内部自洽却因果无意义的数字。

A/B 测试陷阱:为什么标准实验设计在 AI 功能中会失效

· 阅读需 10 分钟
Tian Pan
Software Engineer

一个团队上线了一个改进的 LLM 提示词。A/B 测试运行了两周。指标上升了 1.2%,p=0.03。他们将其视为胜利并向所有人发布。六个月后,一次客户审计发现,新提示词一直产生细微的错误摘要——这种语义偏移是点击率和会话时长无法察觉的。A/B 测试并没有完全撒谎。它用一种从未针对 LLM 特性设计的评估方法测量了错误的东西。

标准的 A/B 测试是为确定性系统构建的:按钮更改颜色、页面加载变快、推荐算法调整排名。在给定相同输入的情况下,输出是稳定的,方差较小且易于理解,教科书中的样本量计算公式也适用。然而,对于由 LLM 驱动的功能,这些属性都不成立。如果团队不考虑这一点,他们就不是在进行实验——而是在产生带有统计显著性标签的噪声。

方差正在吞噬实验:为什么传统的 A/B 测试功效计算不适用于 LLM 功能

· 阅读需 12 分钟
Tian Pan
Software Engineer

模型团队可以演示新功能并展示十个令人信服的并排对比获胜案例。增长团队将其作为为期两周的 A/B 测试运行,得到 p = 0.31,读数显示“无显著效果”。两个团队都是正确的。实验是错误的。

这种模式在每个将 LLM 强行接入产品但未重建其实验栈的组织中不断重复。增长团队使用的数学模型是为按钮颜色、排名变化和定价页面设计的——这些功能的输出在给定用户和上下文的情况下是确定性的。LLM 功能打破了该数学模型赖以生存的两个假设,而标准的 80% 效能、5% 显著性、两周扩量模板在两个方向上都系统性地输出了错误的判断:真实的获胜被读取为无效结果,而噪声则被读取为置信的获胜。

缺失的实验组:你的 AI 实验缺少 “关闭 AI” 的对照组

· 阅读需 10 分钟
Tian Pan
Software Engineer

看看你的团队最近发布的六份关于 AI 功能的实验报告。实验组都有哪些?很可能你测试的是“新提示词 vs. 旧提示词”、“GPT-5 路由 vs. GPT-4 备选”、“推理模型 vs. 快速模型”或者“有检索 vs. 无检索”。你报告了参与度、任务完成度或会话时长的提升。你称之为产品影响力。一个季度过去了。推理成本不断攀升。没人停下来问一个首席财务官 (CFO) 最终会问的问题:如果这个功能根本不存在,会发生什么?

这个问题就是那个缺失的实验组。你的实验不断衡量的提升是“更好的 AI vs. 较差的 AI”,但支撑你业务的是“AI vs. 什么都没有”——或者更尴尬的是,“AI vs. 我们从未记录下来的三行启发式代码”。这是结论完全不同的两种实验,而 2026 年大多数 AI 产品项目只运行过第一种。第二种实验才能告诉你,该功能是否配得上它的推理账单。

当处理方案不确定时如何对 AI 功能进行 A/B 测试

· 阅读需 12 分钟
Tian Pan
Software Engineer

你的团队上线了一个基于 LLM 的新功能,进行了为期两周的干净 A/B 测试,并看到了具有统计显著性的提升。你将其全量发布。三周后,留存指标毫无变化,客服工单却在攀升。究竟哪里出了问题?你用教科书式的实验方法去测试了一个不符合教科书假设的处理方案——"处理方案是稳定的"这一前提,在无声无息中已然被打破。

标准 A/B 测试是为确定性或近确定性的处理方案而设计的:按钮颜色变更、参数固定的排序算法、结账流程。而 LLM 功能几乎违反了使经典频率派实验可靠的所有假设。处理方案的方差很高,处理方案本身会因服务商推送模型更新而在实验进行中途发生变化,"成功"难以被清晰量化,而且新鲜感效应足够强烈,足以产生在用户适应后就烟消云散的实验结果。

本文将介绍在这些挑战下使实验仍然有效的调整方法。

为什么 A/B 测试对 AI 功能失效(以及应该改用什么)

· 阅读需 10 分钟
Tian Pan
Software Engineer

你的 AI 功能上线了。A/B 测试运行了两周。处理组看起来更好——参与度提升 4%,p 值低于 0.05。你将其全量发布。

六周后,收益消失了。参与度回到了原点,甚至更低。你的实验说了一件事;现实说了另一件事。

这不是偶发案例,而是将标准双样本 A/B 测试应用于 AI 功能时的默认结果——你没有考虑这种方法论中内嵌假设被打破的方式。这些失败模式是结构性的,而非统计性的——你可以按教科书完美地运行实验,却仍然得到错误答案。