Anthropic Engineering Blog 中文翻译

create: 2025-09-17
update: 2026-08-10
author: thinkycx
title: 【译】三个近期问题的事后复盘
description: Anthropic 对 2025 年 8-9 月间三个基础设施 Bug 的事后复盘。这些 Bug 导致部分 Claude 请求出现质量下降,涉及上下文窗口路由错误、输出乱码和 XLA:TPU 编译器缺陷。文章详细剖析了每个问题的根因、影响范围和修复方案,并公开了后续改进措施。
category: translation
tags: anthropic, engineering, translation, postmortem

三个近期问题的事后复盘

原文发布于 2025 年 9 月 17 日,作者 Sam McAllister

概述

2025 年 8 月至 9 月初,三个基础设施 Bug 间歇性地影响了 Claude 的响应质量,目前已全部修复。 本文是针对这三个问题的技术复盘报告。


背景

用户反馈的质量下降源于基础设施 Bug,而非任何主动降质行为。 8 月初,用户开始反馈 Claude 的响应质量有所下降。到 8 月下旬,负面反馈频率上升,促使我们启动了深入调查,最终发现了三个独立的基础设施 Bug。

Anthropic 在此明确声明:"我们绝不会因为需求量、时间段或服务器负载而降低模型质量。用户反馈的问题完全是基础设施 Bug 所致。"


Claude 如何大规模提供服务

Claude 运行在多平台、多硬件之上,每种组合都必须保证模型输出的严格一致性。 Claude 通过 Anthropic 第一方 API、Amazon Bedrock 和 Google Cloud Vertex AI 服务数百万用户,部署在 AWS Trainium、NVIDIA GPU 和 Google TPU 等不同硬件平台上。每种硬件需要专门的优化,但必须维持模型输出的严格等价标准。


事件时间线

事件时间线

第一个 Bug 于 8 月 5 日引入,影响约 0.8% 的 Sonnet 4 请求。 8 月 25 日和 26 日的部署又引入了两个新 Bug。8 月 29 日的负载均衡变更显著扩大了受影响的流量。

时间线图例:黄色 = 发现问题,红色 = 影响加剧,绿色 = 修复上线


三个重叠的问题

1. 上下文窗口路由错误

部分 Sonnet 4 请求被错误路由到为 1M token 上下文窗口配置的服务器。

  • 引入时间: 8 月 5 日
  • 问题本质: 部分 Sonnet 4 请求被误路由至为即将推出的 1M token 上下文窗口配置的服务器
平台 影响范围 时间段
Claude API(第一方) 初始 0.8%,最高峰 16%(8月31日某小时) 8月5日 - 9月4日
Amazon Bedrock 最高 0.18% Sonnet 4 请求 8月12日起
Vertex AI < 0.0004% 请求 8月27日 - 9月16日

关键细节:
- 路由具有"粘性"——一旦被误路由,后续的跟进请求很可能继续发往同一错误服务器
- 约 30% 在此期间发起请求的 Claude Code 用户至少有一条消息被错误路由

修复: 9 月 4 日部署修复后的路由逻辑,9 月 16 日完成对第一方平台和 Vertex AI 的全面推出,9 月 18 日完成 Bedrock 修复。


2. 输出乱码

TPU 服务器上的配置错误导致 token 生成时出现异常,偶尔产生完全不相关的字符。

  • 引入时间: 8 月 25 日
  • 问题本质: Claude API TPU 服务器上的配置错误导致 token 生成出错。一项运行时性能优化"偶尔会给本不该在当前上下文中出现的 token 分配高概率"

具体表现:
- 英文响应中突然出现泰语或中文字符(例如在英文回复中冒出"สวัสดี")
- 代码中出现明显的语法错误

模型 影响时间
Opus 4.1 / Opus 4 8月25日 - 28日
Sonnet 4 8月25日 - 9月2日
第三方平台 未受影响

修复: 9 月 2 日定位并回滚。在部署流程中增加了对意外字符输出的检测测试。


3. 近似 top-k XLA:TPU 编译器错误

部署的采样代码优化触发了 XLA:TPU 编译器中的一个潜在 Bug,影响 token 选择的正确性。

  • 引入时间: 8 月 25 日
  • 问题本质: 为改进文本生成中 token 选择而部署的代码无意中触发了 XLA:TPU 编译器[^1]中的一个潜在 Bug
  • 确认影响: Haiku 3.5,可能也影响了部分 Sonnet 4 和 Opus 3 的 Claude API 请求
  • 第三方平台: 未受影响

修复: Haiku 3.5 于 9 月 4 日回滚,Opus 3 于 9 月 12 日回滚,Sonnet 4 出于谨慎也进行了回滚。Anthropic 与 XLA:TPU 团队合作修复编译器 Bug,并推出了具有增强精度的精确 top-k 实现。


深入剖析 XLA 编译器 Bug

Claude 的文本生成过程

Claude 生成文本时,会计算每个可能下一个词的概率,然后通过 top-p 采样从分布中选取。 在 TPU 上,模型运行在多个芯片上[^2],概率计算分布在不同位置,需要进行分布式排序。top-p 采样的阈值通常设为 0.99 或 0.999。

2024 年 12 月的发现

2024 年底就曾发现 TPU 实现偶尔会在 temperature=0 时丢弃最高概率 token,当时部署了临时补丁。

2024年12月补丁代码

根因:混合精度运算

模型以 bf16(16位浮点)计算概率,但 TPU 向量处理器原生使用 fp32,编译器会静默提升部分运算的精度,导致不一致。

  • 模型以 bf16 计算 next-token 概率
  • TPU 向量处理器原生使用 fp32
  • XLA 编译器会将部分运算转换为 fp32(由 xla_allow_excess_precision 标志控制,默认开启)
  • 精度不匹配导致:应该对"最高概率 token"达成一致的运算在不同精度下执行,使得最高概率 token 有时完全消失

8 月 26 日的部署

新的采样代码移除了 12 月的临时补丁(认为已不再需要),暴露了更深层的编译器 Bug。

一次采样代码重写被部署,旨在修复精度问题并改进 top-p 阈值处的概率处理。但这次重写移除了 2024 年 12 月的临时补丁(当时认为已不再需要),从而暴露了更深层的问题。

最小化复现代码

更深层的 Bug

近似 top-k 操作——一种快速查找最高概率 token 的性能优化——在特定批次大小和模型配置下会返回完全错误的结果。

这个 Bug 存在于近似 top-k 操作中[^3]。12 月的临时补丁恰好无意中掩盖了这个问题。

Bug 的行为"令人沮丧地不一致"——它会随着不相关因素(如前后执行的操作、是否启用了调试工具)的变化而变化。

Slack 消息:与 XLA:TPU 工程师分享的复现代码

最终方案

Anthropic 发现精确 top-k 的性能开销已大幅降低,遂从近似 top-k 切换到精确 top-k,并将额外运算标准化为 fp32 精度。 "模型质量不可妥协,我们接受了微小的效率影响。"[^4]


为什么这些问题难以检测

多重因素叠加,使得常规监控和评估未能及时捕获问题。

因素 说明
评估覆盖不足 标准评估未能捕捉到用户反馈的质量下降——部分原因是 Claude 往往能从孤立错误中恢复
隐私保护限制调试 内部隐私管控限制了工程师对用户交互的访问权限,保护了隐私但也增加了调查难度
症状分散 每个 Bug 在不同平台、以不同频率产生不同的症状
评估噪声 过度依赖噪声较大的评估结果
间接关联 8 月 29 日的负载均衡变更未能立即与负面反馈激增建立关联

Anthropic 的改进措施

从评估灵敏度、覆盖范围和调试工具三个方向全面加强。

改进方向 具体措施
更灵敏的评估 开发了能更可靠地区分正常实现和故障实现的评估方法
更广泛的质量评估 在真实生产系统上持续运行评估,以捕获类似上下文窗口负载均衡错误的问题
更快的调试工具 构建基础设施,在不牺牲用户隐私的前提下,更好地利用社区反馈进行调试

Anthropic 鼓励用户继续通过以下渠道反馈问题:
- Claude Code 中的 /bug 命令
- Claude 应用中的"踩"按钮
- 邮件 [email protected]


注释

[^1]: XLA:TPU 是将 XLA 高级优化语言(通常使用 JAX 编写)编译为 TPU 机器指令的优化编译器。
[^2]: 模型被分布到数十个或更多芯片上,使排序变成分布式排序。TPU(以及 GPU 和 Trainium)需要向量化操作而非串行算法。
[^3]: 近似 top-k 通过接受对最低概率 token 的潜在误差来获得可观的性能提升——但当 Bug 导致最高概率 token 被丢弃时就出了大问题。
[^4]: 现在正确的 top-k 实现可能导致 top-p 阈值附近的 token 包含出现细微差异;在少数情况下,用户可能需要重新调优 top-p 参数的选择。