跳到主要内容

AI 系统的影子流量:在上线前验证模型变更的最安全方式

· 阅读需 11 分钟
Tian Pan
Software Engineer

大多数团队上线 LLM 变更的方式,与 2005 年上线 Web 变更如出一辙——跑几个离线评估,说服自己数字看起来不错,然后直接推上去。意外总在周一早上到来:一个通过了所有基准测试的系统提示词调整,悄无声息地破坏了评估集之外 40% 的用户查询。

影子流量就是解决方案。思路很简单:将候选模型或提示词与生产系统并行运行,向其输入每一个真实请求,对比输出结果,同时只让用户接触当前版本。零用户暴露、真实生产数据、上线前的统计置信度。但将这一方法应用于 LLM,需要重新思考几乎所有实现细节——因为语言模型是非确定性的、推理成本高昂,且其输出无法通过简单 diff 进行比较。

离线评估为何在边界处失效

每个 ML 团队都有评估套件。问题在于它覆盖不到的地方。你的黄金数据集是在开发阶段精心挑选的,这意味着它反映的是团队认为重要的查询——而非真实用户在周五凌晨 2 点发送的那些。生产数据有长尾:不寻常的措辞、多语言混用、出乎意料的对抗性输入,这些都会暴露合成基准测试无法触及的脆弱性。

一个在离线套件上得分 94% 的提示词变更,依然可能让真实用户的体验下降两位数。评估性能与生产性能之间的差距,是 LLM 工程中被持续低估的风险之一。影子流量通过在变更上线之前——而非之后——将生产查询纳入验证循环,弥合了这一差距。

离线评估的另一个问题是数据陈旧。生产分布会随时间漂移。如果你半年没有更新评估集,它已经无法代表用户真正在问什么了。影子测试在定义上始终是新鲜的——它针对的是今天的流量。

影子测试的实际架构

架构由三个组件构成:捕获层、比较层和分析层。

捕获层位于你的 API 网关或服务网格中,复制每一个进入的请求。原始请求照常发送给生产模型——用户体验完全不变。副本被发送到运行候选模型或提示词的影子部署。由于影子系统在生产响应已经发送之后异步运行,用户不会感受到任何延迟影响。

比较层接收来自生产系统和影子系统的输出,并将它们与共享的请求上下文一起记录下来。大部分工程复杂性都在这里。你需要存储:原始输入、生产输出、影子输出、各自的延迟和成本、模型返回的任何置信度分数或结构化字段,以及足够的请求元数据以便后续对数据进行切片分析。

分析层定期运行——通常是批处理任务——并对记录的配对计算比较指标。这里决定候选版本是否可以晋升。

GoReplay 等工具可以在基础设施层面处理流量捕获和回放,无需修改应用程序代码。AWS SageMaker 原生支持影子部署。对于已在使用 Kubernetes 的团队,Istio 和 Envoy 无需触碰服务代码即可路由影子流量。

选择合适的比较指标

这是 LLM 影子测试与传统影子测试差异最大的地方。当你对 SQL 查询优化进行影子测试时,你验证结果是否完全相同。当你对 LLM 进行影子测试时,完全相同的输出是不可能的——你是在将散文与散文进行比较,语义等价才是重点。

指标体系根据是否有基准答案分为两类。

当你有黄金答案——特定查询的预期输出——时,基于参考的指标效果很好。ROUGE 分数衡量 n-gram 重叠,计算速度快。BERTScore 使用上下文嵌入,能捕捉 ROUGE 遗漏的释义。对于结构化输出,格式合规性检查(有效 JSON、必填字段存在)几乎没有计算成本,却能发现相当大比例的回归。

当你没有黄金答案时——这是大多数生产流量的情况——你需要无参考评估。基于嵌入的语义相似度将两个输出视为向量,测量它们之间的余弦角。分数高于 0.8 通常表明输出在语义上等价。LLM-as-judge 使用 GPT-4 或 Claude 等强模型来逐对评估影子输出是否优于、劣于或等同于生产基线。GPT-4 与人类评估者在逐对比较上的一致率超过 80%,这使其可以作为大规模人类判断的代理。

实践中的做法是根据成本分层运行多个指标。正则表达式和格式检查几乎是免费的,应该对 100% 的影子流量运行。嵌入相似度的成本足够低,可以用于 10-20% 的流量。LLM-as-judge 评估成本高昂——每次比较需要 5-30 秒和真实的 API 费用——因此应该对 1-2% 的采样子集运行。

采样策略:在不支付完整 A/B 测试成本的情况下获得统计置信度

A/B 测试之所以昂贵,是因为它需要用户暴露。你需要将真实用户引导到候选版本,等待足够的转化或反馈信号,并接受在整个测试期间一定比例的用户体验了潜在退化的版本。

影子测试消除了暴露成本。你可以对 100% 的流量运行它——不影响任何用户——并且仍然可以选择只评估其中一部分配对,因为瓶颈是评估成本,而不是流量量。

分层采样策略可以简洁地处理这个问题:

  • 第 1 层(100% 影子配对):确定性检查——格式验证、结构化字段合规性、安全过滤器触发
  • 第 2 层(10-20%):基于嵌入的语义相似度、响应长度分布
  • 第 3 层(2-5%):LLM-as-judge 逐对评估
  • 第 4 层(<1%):人工审查采样的回归和边缘案例
加载中…
References:Let's stay in touch and Follow me for more thoughts and updates