← 返回文章列表
2026-04-23

关于近期 Claude Code 质量问题的说明

An update on recent Claude Code quality reports

An update on recent Claude Code quality reports

Over the past month, we’ve been looking into reports that Claude’s responses have worsened for some users. We’ve traced these reports to three separate changes that affected Claude Code, the Claude Agent SDK, and Claude Cowork. The API was not impacted. All three issues have now been resolved as of April 20 (v2.1.116). In this post, we explain what we found, what we fixed, and what we’ll do differently to ensure similar issues are much less likely to happen again. We take reports about degradation very seriously. We never intentionally degrade our models, and we were able to immediately confirm that our API and inference layer were unaffected. After investigation, we identified three different issues:

在过去一个月中,我们一直在调查部分用户反映的 Claude 回答质量下降问题。经过排查,我们发现这些问题源于三个独立的变更,分别影响了 Claude Code、Claude Agent SDK 和 Claude Cowork。API 未受影响。 截至 4 月 20 日(v2.1.116),以上三个问题均已修复。 在这篇文章中,我们将说明我们发现了什么、修复了什么,以及我们将采取哪些不同的措施来防止类似问题再次发生。 我们高度重视质量退化的报告。我们从未故意降低模型质量,并且在第一时间确认了我们的 API 和推理层未受影响。 经过调查,我们发现了三个不同的问题:

  • On March 4, we changed Claude Code's default reasoning effort fromhightomediumto reduce the very long latency—enough to make the UI appear frozen—some users were seeing inhighmode. This was the wrong tradeoff. We reverted this change on April 7 after users told us they'd prefer to default to higher intelligence and opt into lower effort for simple tasks. This impacted Sonnet 4.6 and Opus 4.6.
  • 3 月 4 日,我们将 Claude Code 的默认推理强度(Reasoning Effort)从 high 调整为 medium,以降低部分用户在 high 模式下遇到的超长延迟——长到足以让界面看起来像卡住了一样。这是一个错误的取舍。在用户反馈表示更倾向于默认使用更高智能水平、并自行选择降低强度来处理简单任务后,我们于 4 月 7 日撤回了此变更。该变更影响了 Sonnet 4.6 和 Opus 4.6。
  • 3 月 26 日,我们上线了一项变更:在会话闲置超过一小时后清除 Claude 的历史思维记录,以减少用户恢复会话时的延迟。一个 bug 导致此操作在会话的后续每一轮都会重复执行,而不是仅执行一次,这使 Claude 表现出健忘和重复的行为。我们于 4 月 10 日修复了该问题。此变更影响了 Sonnet 4.6 和 Opus 4.6。
  • 4 月 16 日,我们在系统提示词(System Prompt)中添加了一条减少冗余输出的指令。该指令与其他提示词变更叠加后,损害了代码生成质量,于 4 月 20 日被撤回。此变更影响了 Sonnet 4.6、Opus 4.6 和 Opus 4.7。

high medium high

由于每个变更影响的流量范围和生效时间各不相同,整体效果看起来像是广泛且不一致的质量退化。虽然我们从 3 月初就开始调查这些反馈,但起初很难将其与用户反馈中的正常波动区分开来,而且我们的内部使用和评测最初也未能复现已确认的问题。 这不是用户对 Claude Code 应有的体验。截至 4 月 23 日,我们已为所有订阅用户重置了使用额度上限。

  • On March 26, we shipped a change to clear Claude's older thinking from sessions that had been idle for over an hour, to reduce latency when users resumed those sessions. A bug caused this to keep happening every turn for the rest of the session instead of just once, which made Claude seem forgetful and repetitive. We fixed it on April 10. This affected Sonnet 4.6 and Opus 4.6.
  • On April 16, we added a system prompt instruction to reduce verbosity. In combination with other prompt changes, it hurt coding quality and was reverted on April 20. This impacted Sonnet 4.6, Opus 4.6, and Opus 4.7.

Claude Code 默认推理强度的变更

Because each change affected a different slice of traffic on a different schedule, the aggregate effect looked like broad, inconsistent degradation. While we began investigating reports in early March, they were challenging to distinguish from normal variation in user feedback at first, and neither our internal usage nor evals initially reproduced the issues identified. This isn’t the experience users should expect from Claude Code. As of April 23, we’re resetting usage limits for all subscribers.

当我们于 2 月在 Claude Code 中发布 Opus 4.6 时,我们将默认推理强度设为 high。 不久后,我们收到用户反馈,称 Claude Opus 4.6 在 high 强度模式下偶尔会思考过久,导致界面看起来卡住,并为这些用户带来不成比例的延迟和 Token 消耗。 通常情况下,模型思考时间越长,输出质量越好。推理强度是 Claude Code 让用户在"更多思考"与"更低延迟、更少触发使用额度上限"之间做出权衡的方式。在为模型校准强度等级时,我们会考虑这一权衡,以便在测试时计算(Test-time Compute)曲线上选取能为用户提供最佳选择范围的点。在产品层面,我们选择将曲线上的哪个点设为默认值,并将其作为 effort 参数发送给 Messages API;其他选项则通过 /effort 命令供用户选择。 在我们的内部评测和测试中,medium 强度在大多数任务中以略低的智能水平换来了显著降低的延迟。它也不存在偶尔出现超长尾延迟的问题,并且有助于最大化用户的使用额度。因此,我们推出了一项变更,将 medium 设为默认强度,并通过产品内对话框解释了原因。 推出后不久,用户开始反馈 Claude Code 感觉变"笨"了。我们发布了多次设计迭代,试图让当前强度设置更加醒目,以提醒用户可以更改默认值(启动时的提示、内联强度选择器,以及重新引入 ultrathink),但大多数用户仍然使用 medium 作为默认强度。 在听取更多客户的反馈后,我们于 4 月 7 日撤回了这一决定。所有用户现在默认使用 xhigh 强度运行 Opus 4.7,其他所有模型默认使用 high 强度。

A change to Claude Code's default reasoning effort

一个导致历史推理记录丢失的缓存优化

When we released Opus 4.6 in Claude Code in February, we set the default reasoning effort tohigh. high Soon after, we received user feedback that Claude Opus 4.6 in high effort mode would occasionally think for too long, causing the UI to appear frozen and leading to disproportionate latency and token usage for those users. In general, the longer the model thinks, the better the output. Effort levels are how Claude Code lets users set that tradeoff—more thinking versus lower latency and fewer usage limit hits. As we calibrate effort levels for our models, we take this tradeoff into account in order to pick points along the test-time-compute curve that give people the best range of options. In the product layer, we then choose which point along this curve we set as our default, and that is the value we send to the Messages API as the effort parameter; we then make the other options available via/effort. /effort In our internal evals and testing, medium effort achieved slightly lower intelligence with significantly less latency for the majority of tasks. It also didn’t suffer from the same issues with occasional very long tail latencies for thinking, and it helped maximize users’ usage limits. As a result, we rolled out a change making medium the default effort, and explained the rationale via in-product dialog. Soon after rolling out, users began reporting that Claude Code felt less intelligent. We shipped a number of design iterations to make the current effort setting clearer in order to alert people they could change the default (notices on startup, an inline effort selector, and bringing back ultrathink), but most users retained the medium effort default. After hearing feedback from more customers, we reversed this decision on April 7. All users now default toxhigheffort for Opus 4.7, andhigheffort for all other models. xhigh high

当 Claude 通过推理完成一项任务时,其推理过程通常会保存在对话历史中,以便在后续每一轮对话中,Claude 都能看到自己之前做出修改和工具调用的原因。 3 月 26 日,我们上线了一项本意是提升效率的优化。我们使用提示词缓存(Prompt Caching)来使连续的 API 调用对用户来说更便宜、更快。Claude 在发起 API 请求时会将输入 Token 写入缓存,在一段时间不活动后,提示词会从缓存中被逐出,为其他提示词腾出空间。缓存利用率是我们精心管理的指标(了解更多关于我们的方法)。 设计本应很简单:如果一个会话闲置超过一小时,我们可以通过清除旧的思维记录来降低用户恢复该会话的成本。由于该请求无论如何都会产生缓存未命中(Cache Miss),我们可以从请求中裁剪不必要的消息,以减少发送给 API 的未缓存 Token 数量。之后我们会恢复发送完整的推理历史。为此,我们使用了 clear_thinking_20251015 API 请求头,并配合 keep:1 参数。 实现中存在一个 bug。它不是只清除一次思维历史,而是在会话剩余的每一轮中都持续清除。一旦会话跨过闲置阈值,该会话进程中的后续每个请求都会指示 API 仅保留最近一个推理块,丢弃之前的所有内容。这形成了累积效应:如果你在 Claude 执行工具调用的过程中发送了一条后续消息,这会在有问题的标志下启动新一轮对话,因此即使是当前轮次的推理记录也会被丢弃。Claude 会继续执行,但逐渐失去了对自己为何做出这些选择的记忆。这表现为用户反馈的健忘、重复和奇怪的工具调用选择。 由于此 bug 会持续从后续请求中丢弃思维块,这些请求也会导致缓存未命中。我们认为这正是导致部分用户反馈使用额度消耗速度异常加快的原因。 两个不相关的实验使我们最初难以复现该问题:一个是与消息队列相关的仅限内部的服务端实验;另一个是我们对思维展示方式的独立变更在大多数 CLI 会话中掩盖了这个 bug,因此即使在测试外部构建版本时也未能发现。 这个 bug 处于 Claude Code 的上下文管理、Anthropic API 和扩展思维(Extended Thinking)的交叉点。它引入的变更通过了多轮人工和自动化代码审查,以及单元测试、端到端测试、自动化验证和内部试用。再加上这只在一个边缘场景(过期会话)中出现,且复现困难,我们花了超过一周才发现并确认根本原因。 在调查过程中,我们使用 Opus 4.7 对导致问题的 Pull Request 进行了 Code Review 回测。在提供了必要的代码仓库以获取完整上下文后,Opus 4.7 发现了该 bug,而 Opus 4.6 未能发现。为防止此类问题再次发生,我们正在落地支持将额外的代码仓库作为 Code Review 的上下文。 我们于 4 月 10 日在 v2.1.101 中修复了此 bug。

A caching optimization that dropped prior reasoning

一项减少冗余输出的系统提示词变更

When Claude reasons through a task, that reasoning is normally kept in the conversation history so that on every subsequent turn, Claude can see why it made the edits and tool calls it did. On March 26, we shipped what was meant to be an efficiency improvement to this feature. We use prompt caching to make back-to-back API calls cheaper and faster for users. Claude writes the input tokens to the cache when it makes an API request, then after a period of inactivity the prompt is evicted from cache, making room for other prompts. Cache utilization is something we manage carefully (more on ourapproach). The design should have been simple: if a session has been idle for more than an hour, we could reduce users’ cost of resuming that session by clearing old thinking sections. Since the request would be a cache miss anyway, we could prune unnecessary messages from the request to reduce the number of uncached tokens sent to the API. We’d then resume sending full reasoning history. To do this we used theclear_thinking_20251015API header along withkeep:1. clear_thinking_20251015 keep:1 The implementation had a bug. Instead of clearing thinking history once, it cleared it on every turn for the rest of the session. After a session crossed the idle threshold once, each request for the rest of that process told the API to keep only the most recent block of reasoning and discard everything before it. This compounded: if you sent a follow-up message while Claude was in the middle of a tool use, that started a new turn under the broken flag, so even the reasoning from the current turn was dropped. Claude would continue executing, but increasingly without memory of why it had chosen to do what it was doing. This surfaced as the forgetfulness, repetition, and odd tool choices people reported. Because this would continuously drop thinking blocks from subsequent requests, those requests also resulted in cache misses. We believe this is what drove the separate reports of usage limits draining faster than expected. Two unrelated experiments made it challenging for us to reproduce the issue at first: an internal-only server-side experiment related to message queuing; and an orthogonal change in how we display thinking suppressed this bug in most CLI sessions, so we didn’t catch it even when testing external builds. This bug was at the intersection of Claude Code’s context management, the Anthropic API, and extended thinking. The changes it introduced made it past multiple human and automated code reviews, as well as unit tests, end-to-end tests, automated verification, and dogfooding. Combined with this only happening in a corner case (stale sessions) and the difficulty of reproducing the issue, it took us over a week to discover and confirm the root cause. As part of the investigation, we back-testedCode Reviewagainst the offending pull requests using Opus 4.7. When provided the code repositories necessary to gather complete context, Opus 4.7 found the bug, while Opus 4.6 didn't. To prevent this from happening again, we are now landing support for additional repositories as context for code reviews. We fixed this bug on April 10 in v2.1.101.

我们的最新模型 Claude Opus 4.7 相较于其前身有一个显著的行为特点:正如我们在发布时所介绍的,它倾向于输出较长的内容。这使其在处理困难问题时更加智能,但也产生了更多的输出 Token。 在发布 Opus 4.7 的几周前,我们开始为此调整 Claude Code。每个模型的行为都有细微差异,我们在每次发布前都会花时间为模型优化工具链和产品。 我们有多种工具来减少冗余输出:模型训练、提示词工程以及改进产品中的思维用户体验。最终我们全部用上了,但其中一条新增的系统提示词对 Claude Code 的智能水平产生了过大的影响:

A system prompt change to reduce verbosity

"Length limits: keep text between tool calls to ≤25 words. Keep final responses to ≤100 words unless the task requires more detail."

Our latest model, Claude Opus 4.7, has a notable behavioral quirk relative to its predecessor: as wewrote aboutat launch, it tends to be quite verbose. This makes it smarter on hard problems, but it also produces more output tokens. A few weeks before we released Opus 4.7, we started tuning Claude Code in preparation. Each model behaves slightly differently, and we spend time before each release optimizing the harness and product for it. We have a number of tools to reduce verbosity: model training, prompting, and improving thinking UX in the product. Ultimately we used all of these, but one addition to the system prompt caused an outsized effect on intelligence in Claude Code:

经过数周的内部测试,且在我们运行的一系列评测中未发现退化后,我们对这一变更充满信心,并于 4 月 16 日随 Opus 4.7 一同发布。 作为调查的一部分,我们使用更广泛的评测集进行了更多的消融实验(Ablation,即逐行移除系统提示词以了解每行的影响)。其中一项评测显示 Opus 4.6 和 4.7 均出现了 3% 的性能下降。我们立即在 4 月 20 日的发布中撤回了该提示词。

“Length limits: keep text between tool calls to ≤25 words. Keep final responses to ≤100 words unless the task requires more detail.”

后续改进

After multiple weeks of internal testing and no regressions in the set of evaluations we ran, we felt confident about the change and shipped it alongside Opus 4.7 on April 16. As part of this investigation, we ran more ablations (removing lines from the system prompt to understand the impact of each line) using a broader set of evaluations. One of these evaluations showed a 3% drop for both Opus 4.6 and 4.7. We immediately reverted the prompt as part of the April 20 release.

我们将采取以下几项不同的措施来避免类似问题:确保更大比例的内部员工使用与公众完全相同的 Claude Code 构建版本(而非用于测试新功能的版本);改进我们内部使用的 Code Review 工具,并将改进后的版本提供给客户。 我们还将对系统提示词变更施加更严格的控制。每次对 Claude Code 的系统提示词进行变更时,我们都将运行一套针对每个模型的广泛评测,持续进行消融实验以了解每行的影响,并且我们已构建了新的工具来使提示词变更更易于审查和审计。此外,我们已在 CLAUDE.md 中添加了指导说明,确保针对特定模型的变更仅限于该模型。对于任何可能影响智能水平的变更,我们将加入浸泡期(Soak Period)、更广泛的评测套件和灰度发布,以便更早发现问题。 我们最近在 X 上创建了 @ClaudeDevs 账号,以便有空间深入解释产品决策及其背后的推理。我们将在 GitHub 上以集中的主题帖分享相同的更新。 最后,我们要感谢我们的用户:那些使用 /feedback 命令与我们分享问题的人(或在网上发布具体、可复现示例的人),正是他们最终帮助我们识别并修复了这些问题。今天,我们已为所有订阅用户重置了使用额度上限。 我们衷心感谢您的反馈和耐心。

Going forward

We are going to do several things differently to avoid these issues: we’ll ensure that a larger share of internal staff use the exact public build of Claude Code (as opposed to the version we use to test new features); and we'll make improvements to ourCode Reviewtool that we use internally, and ship this improved version to customers. We’re also adding tighter controls on system prompt changes. We will run a broad suite of per-model evals for every system prompt change to Claude Code, continuing ablations to understand the impact of each line, and we have built new tooling to make prompt changes easier to review and audit. We've additionally added guidance to our CLAUDE.md to ensure model-specific changes are gated to the specific model they're targeting. For any change that could trade off against intelligence, we'll add soak periods, a broader eval suite, and gradual rollouts so we catch issues earlier. We recently created @ClaudeDevs on X to give us the room to explain product decisions and the reasoning behind them in depth. We'll share the same updates in centralized threads on GitHub. Finally, we’d like to thank our users: the people who used the/feedbackcommand to share their issues with us (or who posted specific, reproducible examples online) are the ones who ultimately allowed us to identify and fix these problems. Today we are resetting usage limits for all subscribers. /feedback We’re immensely grateful for your feedback and for your patience.

在过去一个月中,我们一直在调查部分用户反映的 Claude 回答质量下降问题。经过排查,我们发现这些问题源于三个独立的变更,分别影响了 Claude Code、Claude Agent SDK 和 Claude Cowork。API 未受影响。 截至 4 月 20 日(v2.1.116),以上三个问题均已修复。 在这篇文章中,我们将说明我们发现了什么、修复了什么,以及我们将采取哪些不同的措施来防止类似问题再次发生。 我们高度重视质量退化的报告。我们从未故意降低模型质量,并且在第一时间确认了我们的 API 和推理层未受影响。 经过调查,我们发现了三个不同的问题:

  • 3 月 4 日,我们将 Claude Code 的默认推理强度(Reasoning Effort)从 high 调整为 medium,以降低部分用户在 high 模式下遇到的超长延迟——长到足以让界面看起来像卡住了一样。这是一个错误的取舍。在用户反馈表示更倾向于默认使用更高智能水平、并自行选择降低强度来处理简单任务后,我们于 4 月 7 日撤回了此变更。该变更影响了 Sonnet 4.6 和 Opus 4.6。
  • 3 月 26 日,我们上线了一项变更:在会话闲置超过一小时后清除 Claude 的历史思维记录,以减少用户恢复会话时的延迟。一个 bug 导致此操作在会话的后续每一轮都会重复执行,而不是仅执行一次,这使 Claude 表现出健忘和重复的行为。我们于 4 月 10 日修复了该问题。此变更影响了 Sonnet 4.6 和 Opus 4.6。
  • 4 月 16 日,我们在系统提示词(System Prompt)中添加了一条减少冗余输出的指令。该指令与其他提示词变更叠加后,损害了代码生成质量,于 4 月 20 日被撤回。此变更影响了 Sonnet 4.6、Opus 4.6 和 Opus 4.7。

由于每个变更影响的流量范围和生效时间各不相同,整体效果看起来像是广泛且不一致的质量退化。虽然我们从 3 月初就开始调查这些反馈,但起初很难将其与用户反馈中的正常波动区分开来,而且我们的内部使用和评测最初也未能复现已确认的问题。 这不是用户对 Claude Code 应有的体验。截至 4 月 23 日,我们已为所有订阅用户重置了使用额度上限。

Claude Code 默认推理强度的变更

当我们于 2 月在 Claude Code 中发布 Opus 4.6 时,我们将默认推理强度设为 high。 不久后,我们收到用户反馈,称 Claude Opus 4.6 在 high 强度模式下偶尔会思考过久,导致界面看起来卡住,并为这些用户带来不成比例的延迟和 Token 消耗。 通常情况下,模型思考时间越长,输出质量越好。推理强度是 Claude Code 让用户在"更多思考"与"更低延迟、更少触发使用额度上限"之间做出权衡的方式。在为模型校准强度等级时,我们会考虑这一权衡,以便在测试时计算(Test-time Compute)曲线上选取能为用户提供最佳选择范围的点。在产品层面,我们选择将曲线上的哪个点设为默认值,并将其作为 effort 参数发送给 Messages API;其他选项则通过 /effort 命令供用户选择。 在我们的内部评测和测试中,medium 强度在大多数任务中以略低的智能水平换来了显著降低的延迟。它也不存在偶尔出现超长尾延迟的问题,并且有助于最大化用户的使用额度。因此,我们推出了一项变更,将 medium 设为默认强度,并通过产品内对话框解释了原因。 推出后不久,用户开始反馈 Claude Code 感觉变"笨"了。我们发布了多次设计迭代,试图让当前强度设置更加醒目,以提醒用户可以更改默认值(启动时的提示、内联强度选择器,以及重新引入 ultrathink),但大多数用户仍然使用 medium 作为默认强度。 在听取更多客户的反馈后,我们于 4 月 7 日撤回了这一决定。所有用户现在默认使用 xhigh 强度运行 Opus 4.7,其他所有模型默认使用 high 强度。

一个导致历史推理记录丢失的缓存优化

当 Claude 通过推理完成一项任务时,其推理过程通常会保存在对话历史中,以便在后续每一轮对话中,Claude 都能看到自己之前做出修改和工具调用的原因。 3 月 26 日,我们上线了一项本意是提升效率的优化。我们使用提示词缓存(Prompt Caching)来使连续的 API 调用对用户来说更便宜、更快。Claude 在发起 API 请求时会将输入 Token 写入缓存,在一段时间不活动后,提示词会从缓存中被逐出,为其他提示词腾出空间。缓存利用率是我们精心管理的指标(了解更多关于我们的方法)。 设计本应很简单:如果一个会话闲置超过一小时,我们可以通过清除旧的思维记录来降低用户恢复该会话的成本。由于该请求无论如何都会产生缓存未命中(Cache Miss),我们可以从请求中裁剪不必要的消息,以减少发送给 API 的未缓存 Token 数量。之后我们会恢复发送完整的推理历史。为此,我们使用了 clear_thinking_20251015 API 请求头,并配合 keep:1 参数。 实现中存在一个 bug。它不是只清除一次思维历史,而是在会话剩余的每一轮中都持续清除。一旦会话跨过闲置阈值,该会话进程中的后续每个请求都会指示 API 仅保留最近一个推理块,丢弃之前的所有内容。这形成了累积效应:如果你在 Claude 执行工具调用的过程中发送了一条后续消息,这会在有问题的标志下启动新一轮对话,因此即使是当前轮次的推理记录也会被丢弃。Claude 会继续执行,但逐渐失去了对自己为何做出这些选择的记忆。这表现为用户反馈的健忘、重复和奇怪的工具调用选择。 由于此 bug 会持续从后续请求中丢弃思维块,这些请求也会导致缓存未命中。我们认为这正是导致部分用户反馈使用额度消耗速度异常加快的原因。 两个不相关的实验使我们最初难以复现该问题:一个是与消息队列相关的仅限内部的服务端实验;另一个是我们对思维展示方式的独立变更在大多数 CLI 会话中掩盖了这个 bug,因此即使在测试外部构建版本时也未能发现。 这个 bug 处于 Claude Code 的上下文管理、Anthropic API 和扩展思维(Extended Thinking)的交叉点。它引入的变更通过了多轮人工和自动化代码审查,以及单元测试、端到端测试、自动化验证和内部试用。再加上这只在一个边缘场景(过期会话)中出现,且复现困难,我们花了超过一周才发现并确认根本原因。 在调查过程中,我们使用 Opus 4.7 对导致问题的 Pull Request 进行了 Code Review 回测。在提供了必要的代码仓库以获取完整上下文后,Opus 4.7 发现了该 bug,而 Opus 4.6 未能发现。为防止此类问题再次发生,我们正在落地支持将额外的代码仓库作为 Code Review 的上下文。 我们于 4 月 10 日在 v2.1.101 中修复了此 bug。

一项减少冗余输出的系统提示词变更

我们的最新模型 Claude Opus 4.7 相较于其前身有一个显著的行为特点:正如我们在发布时所介绍的,它倾向于输出较长的内容。这使其在处理困难问题时更加智能,但也产生了更多的输出 Token。 在发布 Opus 4.7 的几周前,我们开始为此调整 Claude Code。每个模型的行为都有细微差异,我们在每次发布前都会花时间为模型优化工具链和产品。 我们有多种工具来减少冗余输出:模型训练、提示词工程以及改进产品中的思维用户体验。最终我们全部用上了,但其中一条新增的系统提示词对 Claude Code 的智能水平产生了过大的影响:

"Length limits: keep text between tool calls to ≤25 words. Keep final responses to ≤100 words unless the task requires more detail."

经过数周的内部测试,且在我们运行的一系列评测中未发现退化后,我们对这一变更充满信心,并于 4 月 16 日随 Opus 4.7 一同发布。 作为调查的一部分,我们使用更广泛的评测集进行了更多的消融实验(Ablation,即逐行移除系统提示词以了解每行的影响)。其中一项评测显示 Opus 4.6 和 4.7 均出现了 3% 的性能下降。我们立即在 4 月 20 日的发布中撤回了该提示词。

后续改进

我们将采取以下几项不同的措施来避免类似问题:确保更大比例的内部员工使用与公众完全相同的 Claude Code 构建版本(而非用于测试新功能的版本);改进我们内部使用的 Code Review 工具,并将改进后的版本提供给客户。 我们还将对系统提示词变更施加更严格的控制。每次对 Claude Code 的系统提示词进行变更时,我们都将运行一套针对每个模型的广泛评测,持续进行消融实验以了解每行的影响,并且我们已构建了新的工具来使提示词变更更易于审查和审计。此外,我们已在 CLAUDE.md 中添加了指导说明,确保针对特定模型的变更仅限于该模型。对于任何可能影响智能水平的变更,我们将加入浸泡期(Soak Period)、更广泛的评测套件和灰度发布,以便更早发现问题。 我们最近在 X 上创建了 @ClaudeDevs 账号,以便有空间深入解释产品决策及其背后的推理。我们将在 GitHub 上以集中的主题帖分享相同的更新。 最后,我们要感谢我们的用户:那些使用 /feedback 命令与我们分享问题的人(或在网上发布具体、可复现示例的人),正是他们最终帮助我们识别并修复了这些问题。今天,我们已为所有订阅用户重置了使用额度上限。 我们衷心感谢您的反馈和耐心。

Over the past month, we’ve been looking into reports that Claude’s responses have worsened for some users. We’ve traced these reports to three separate changes that affected Claude Code, the Claude Agent SDK, and Claude Cowork. The API was not impacted. All three issues have now been resolved as of April 20 (v2.1.116). In this post, we explain what we found, what we fixed, and what we’ll do differently to ensure similar issues are much less likely to happen again. We take reports about degradation very seriously. We never intentionally degrade our models, and we were able to immediately confirm that our API and inference layer were unaffected. After investigation, we identified three different issues:

  • On March 4, we changed Claude Code's default reasoning effort fromhightomediumto reduce the very long latency—enough to make the UI appear frozen—some users were seeing inhighmode. This was the wrong tradeoff. We reverted this change on April 7 after users told us they'd prefer to default to higher intelligence and opt into lower effort for simple tasks. This impacted Sonnet 4.6 and Opus 4.6.

high medium high

  • On March 26, we shipped a change to clear Claude's older thinking from sessions that had been idle for over an hour, to reduce latency when users resumed those sessions. A bug caused this to keep happening every turn for the rest of the session instead of just once, which made Claude seem forgetful and repetitive. We fixed it on April 10. This affected Sonnet 4.6 and Opus 4.6.
  • On April 16, we added a system prompt instruction to reduce verbosity. In combination with other prompt changes, it hurt coding quality and was reverted on April 20. This impacted Sonnet 4.6, Opus 4.6, and Opus 4.7.

Because each change affected a different slice of traffic on a different schedule, the aggregate effect looked like broad, inconsistent degradation. While we began investigating reports in early March, they were challenging to distinguish from normal variation in user feedback at first, and neither our internal usage nor evals initially reproduced the issues identified. This isn’t the experience users should expect from Claude Code. As of April 23, we’re resetting usage limits for all subscribers.

A change to Claude Code's default reasoning effort

When we released Opus 4.6 in Claude Code in February, we set the default reasoning effort tohigh. high Soon after, we received user feedback that Claude Opus 4.6 in high effort mode would occasionally think for too long, causing the UI to appear frozen and leading to disproportionate latency and token usage for those users. In general, the longer the model thinks, the better the output. Effort levels are how Claude Code lets users set that tradeoff—more thinking versus lower latency and fewer usage limit hits. As we calibrate effort levels for our models, we take this tradeoff into account in order to pick points along the test-time-compute curve that give people the best range of options. In the product layer, we then choose which point along this curve we set as our default, and that is the value we send to the Messages API as the effort parameter; we then make the other options available via/effort. /effort In our internal evals and testing, medium effort achieved slightly lower intelligence with significantly less latency for the majority of tasks. It also didn’t suffer from the same issues with occasional very long tail latencies for thinking, and it helped maximize users’ usage limits. As a result, we rolled out a change making medium the default effort, and explained the rationale via in-product dialog. Soon after rolling out, users began reporting that Claude Code felt less intelligent. We shipped a number of design iterations to make the current effort setting clearer in order to alert people they could change the default (notices on startup, an inline effort selector, and bringing back ultrathink), but most users retained the medium effort default. After hearing feedback from more customers, we reversed this decision on April 7. All users now default toxhigheffort for Opus 4.7, andhigheffort for all other models. xhigh high

A caching optimization that dropped prior reasoning

When Claude reasons through a task, that reasoning is normally kept in the conversation history so that on every subsequent turn, Claude can see why it made the edits and tool calls it did. On March 26, we shipped what was meant to be an efficiency improvement to this feature. We use prompt caching to make back-to-back API calls cheaper and faster for users. Claude writes the input tokens to the cache when it makes an API request, then after a period of inactivity the prompt is evicted from cache, making room for other prompts. Cache utilization is something we manage carefully (more on ourapproach). The design should have been simple: if a session has been idle for more than an hour, we could reduce users’ cost of resuming that session by clearing old thinking sections. Since the request would be a cache miss anyway, we could prune unnecessary messages from the request to reduce the number of uncached tokens sent to the API. We’d then resume sending full reasoning history. To do this we used theclear_thinking_20251015API header along withkeep:1. clear_thinking_20251015 keep:1 The implementation had a bug. Instead of clearing thinking history once, it cleared it on every turn for the rest of the session. After a session crossed the idle threshold once, each request for the rest of that process told the API to keep only the most recent block of reasoning and discard everything before it. This compounded: if you sent a follow-up message while Claude was in the middle of a tool use, that started a new turn under the broken flag, so even the reasoning from the current turn was dropped. Claude would continue executing, but increasingly without memory of why it had chosen to do what it was doing. This surfaced as the forgetfulness, repetition, and odd tool choices people reported. Because this would continuously drop thinking blocks from subsequent requests, those requests also resulted in cache misses. We believe this is what drove the separate reports of usage limits draining faster than expected. Two unrelated experiments made it challenging for us to reproduce the issue at first: an internal-only server-side experiment related to message queuing; and an orthogonal change in how we display thinking suppressed this bug in most CLI sessions, so we didn’t catch it even when testing external builds. This bug was at the intersection of Claude Code’s context management, the Anthropic API, and extended thinking. The changes it introduced made it past multiple human and automated code reviews, as well as unit tests, end-to-end tests, automated verification, and dogfooding. Combined with this only happening in a corner case (stale sessions) and the difficulty of reproducing the issue, it took us over a week to discover and confirm the root cause. As part of the investigation, we back-testedCode Reviewagainst the offending pull requests using Opus 4.7. When provided the code repositories necessary to gather complete context, Opus 4.7 found the bug, while Opus 4.6 didn't. To prevent this from happening again, we are now landing support for additional repositories as context for code reviews. We fixed this bug on April 10 in v2.1.101.

A system prompt change to reduce verbosity

Our latest model, Claude Opus 4.7, has a notable behavioral quirk relative to its predecessor: as wewrote aboutat launch, it tends to be quite verbose. This makes it smarter on hard problems, but it also produces more output tokens. A few weeks before we released Opus 4.7, we started tuning Claude Code in preparation. Each model behaves slightly differently, and we spend time before each release optimizing the harness and product for it. We have a number of tools to reduce verbosity: model training, prompting, and improving thinking UX in the product. Ultimately we used all of these, but one addition to the system prompt caused an outsized effect on intelligence in Claude Code:

“Length limits: keep text between tool calls to ≤25 words. Keep final responses to ≤100 words unless the task requires more detail.”

After multiple weeks of internal testing and no regressions in the set of evaluations we ran, we felt confident about the change and shipped it alongside Opus 4.7 on April 16. As part of this investigation, we ran more ablations (removing lines from the system prompt to understand the impact of each line) using a broader set of evaluations. One of these evaluations showed a 3% drop for both Opus 4.6 and 4.7. We immediately reverted the prompt as part of the April 20 release.

Going forward

We are going to do several things differently to avoid these issues: we’ll ensure that a larger share of internal staff use the exact public build of Claude Code (as opposed to the version we use to test new features); and we'll make improvements to ourCode Reviewtool that we use internally, and ship this improved version to customers. We’re also adding tighter controls on system prompt changes. We will run a broad suite of per-model evals for every system prompt change to Claude Code, continuing ablations to understand the impact of each line, and we have built new tooling to make prompt changes easier to review and audit. We've additionally added guidance to our CLAUDE.md to ensure model-specific changes are gated to the specific model they're targeting. For any change that could trade off against intelligence, we'll add soak periods, a broader eval suite, and gradual rollouts so we catch issues earlier. We recently created @ClaudeDevs on X to give us the room to explain product decisions and the reasoning behind them in depth. We'll share the same updates in centralized threads on GitHub. Finally, we’d like to thank our users: the people who used the/feedbackcommand to share their issues with us (or who posted specific, reproducible examples online) are the ones who ultimately allowed us to identify and fix these problems. Today we are resetting usage limits for all subscribers. /feedback We’re immensely grateful for your feedback and for your patience.