메뉴
HN
Hacker News 37일 전

클로드 코드 품질 저하 원인 및 복구 안내

IMP
8/10
핵심 요약

최근 일부 사용자들이 겪은 클로드(Claude) 응답 품질 저하 현상은 클로드 코드의 추론 노력도 하향 조정, 세션 기억 삭제 버그, 프롬프트 변경에 따른 코딩 성능 악화 등 세 가지 개별적인 변경에서 비롯되었습니다. 해당 문제들은 모두 4월 20일까지 패치되었으며, 안스로픽은 재발 방지 대책 마련과 함께 전체 구독자의 사용량 한도를 초기화(리셋)하여 보상 조치를 진행합니다.

번역된 본문

지난 한 달 동안, 저희는 일부 사용자들의 클로드(Claude) 응답 품질이 악화되었다는 제보를 조사해 왔습니다. 조사 결과, 이러한 제보는 클로드 코드(Claude Code), 클로드 에이전트 SDK(Claude Agent SDK), 그리고 클로드 코워크(Claude Cowork)에 영향을 미친 세 가지 개별적인 변경 사항에서 비롯된 것으로 확인되었습니다. API에는 영향이 없었습니다. 세 가지 문제는 모두 4월 20일(v2.1.116)에 해결되었습니다. 이 글에서는 발견한 문제점, 수정한 내용, 그리고 유사한 문제가 재발하지 않도록 향후 다르게 진행할 사항들을 설명해 드리고자 합니다.

저희는 품질 저하 제보를 매우 심각하게 받아들이고 있습니다. 저희는 의도적으로 모델의 성능을 저하시킨 적이 없으며, API와 추론 레이어가 영향을 받지 않았다는 사실을 즉시 확인할 수 있었습니다. 조사 결과 세 가지 다른 문제를 파악했습니다.

첫째, 3월 4일, 일부 사용자들이 '높음(high)' 모드에서 겪던 UI가 멈춘 것처럼 보일 정도의 매우 긴 지연 시간을 줄이기 위해, 클로드 코드의 기본 추론 노력도(reasoning effort)를 '높음'에서 '보통(medium)'으로 변경했습니다. 이는 잘못된 트레이드오프였습니다. 사용자들이 단순한 작업에서만 낮은 노력도를 선택하고 기본적으로는 더 높은 지능을 선호한다는 피드백을 받은 후, 4월 7일 이 변경을 롤백했습니다. 이는 Sonnet 4.6 및 Opus 4.6에 영향을 미쳤습니다.

둘째, 3월 26일, 1시간 이상 유휴 상태였던 세션에서 사용자가 세션을 재개할 때 지연 시간을 줄이기 위해 클로드의 이전 생각(thinking) 기록을 삭제하는 변경 사항을 배포했습니다. 버그로 인해 이 작업이 단 한 번이 아닌 이후 세션의 매 턴마다 계속해서 발생했고, 결과적으로 클로드가 건망증에 걸린 것처럼 보이고 같은 말을 반복하게 만들었습니다. 이 문제는 4월 10일에 수정되었습니다. Sonnet 4.6 및 Opus 4.6에 영향을 미쳤습니다.

셋째, 4월 16일, 장황한 답변을 줄이기 위해 시스템 프롬프트 지시어를 추가했습니다. 다른 프롬프트 변경 사항과 결합되면서 코딩 품질이 저하되었고, 4월 20일에 해당 사항을 롤백했습니다. 이는 Sonnet 4.6, Opus 4.6 및 Opus 4.7에 영향을 미쳤습니다.

각 변경 사항이 다른 시간대에 트래픽의 다른 영역에 영향을 미쳤기 때문에, 전체적인 결과는 광범위하고 일관성 없는 품질 저하처럼 보였습니다. 3월 초부터 제보를 조사하기 시작했지만, 처음에는 사용자 피드백의 정상적인 편차와 구별하기가 어려웠고 내부 사용 및 평가(eval)에서 초기에 문제를 재현하지 못했습니다. 이는 사용자가 클로드 코드에서 기대할 수 있는 경험이 아닙니다. 그리하여 4월 23일부터 모든 구독자의 사용량 한도를 초기화(reset)해 드립니다.

클로드 코드의 기본 추론 노력도 변경에 관하여

2월에 클로드 코드에 Opus 4.6을 출시했을 때, 기본 추론 노력도를 '높음'으로 설정했습니다. 곧이어 '높음' 모드의 클로드 Opus 4.6이 가끔 너무 오래 생각하여 UI가 멈춘 것처럼 보이고, 해당 사용자들에게 불균형적인 지연 시간과 토큰 사용량을 초래한다는 사용자 피드백을 받았습니다.

일반적으로 모델이 더 오래 생각할수록 출력 품질은 더 좋아집니다. 노력도 수준은 클로드 코드가 사용자가 더 많은 생각과 낮은 지연 시간 및 적은 사용량 한도 소모 사이의 트레이드오프를 설정할 수 있게 해주는 방식입니다. 모델의 노력도 수준을 보정할 때, 사람들에게 최적의 선택지를 제공하는 테스트 시점 연산(test-time-compute) 곡선의 지점을 선택하기 위해 이러한 트레이드오프를 고려합니다. 제품 레이어에서는 이 곡선을 따라 기본값으로 설정할 지점을 선택하며, 이 값이 노력도(effort) 파라미터로서 메시지(Messages) API에 전달됩니다. 그런 다음 /effort 명령어를 통해 다른 옵션을 사용할 수 있게 제공합니다.

내부 평가 및 테스트에서 '보통' 노력도는 대다수의 작업에서 지연 시간을 훨씬 줄이면서 약간의 지능 저하를 보였습니다. 또한 생각하는 과정에서 발생하는 간헐적인 매우 긴 꼬리 지연 시간 문제를 겪지 않았으며, 사용자의 사용량 한도를 극대화하는 데 도움이 되었습니다. 그 결과 '보통'을 기본 노력도로 만드는 변경 사항을 출시하고, 제품 내 대화 상자를 통해 그 근거를 설명했습니다.

출시 직후, 사용자들은 클로드 코드가 덜 똑똑해진 것 같다고 보고하기 시작했습니다. 저희는 사용자가 기본값을 변경할 수 있다는 점을 알리기 위해 현재의 노력도 설정을 더 명확하게 보여주는 여러 디자인 개선(시작 시 공지, 인라인 노력도 선택기, ultrathink 기능 복원 등)을 배포했지만, 대부분의 사용자는 '보통' 노력도 기본값을 그대로 유지했습니다. 더 많은 맞춤형 피드백을 들은 후...

원문 보기
원문 보기 (영어)
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 from high to medium to reduce the very long latency—enough to make the UI appear frozen—some users were seeing in high mode. 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. 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 to 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. 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 to xhigh effort for Opus 4.7, and high effort for all other models. 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 our approach ). 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 the clear_thinking_20251015 API header along with 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-tested Code Review against 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 we wrote about at 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