Context Rot: How Increasing Input Tokens Impacts LLM Performance (리뷰)
2025년 6월 한 Hacker News 댓글에서 context가 커질수록 LLM이 덜 효과적으로 되는 현상을 가리켜 "Context Rot"이라는 표현을 처음 만들었고, 이후 Chroma가 7월에 널리 읽힌 Technical report를 발표했다. 에이전트나 LLM을 사용하다보면 많은 사람들이 느꼈을 것이다.
링크
- Chroma (includes all figures in this page): https://www.trychroma.com/research/context-rot
- Youtube: https://www.youtube.com/watch?v=TUjQuC4ugak
- Github: https://github.com/chroma-core/context-rot

Repeated words task: 이 report에서 가장 단순한 실험. 단어를 n번 반복 출력하게 시키는 것.
Problem
Context Rot은 LLM의 input context가 길어질수록 performance가 저하되는 현상. LLM은 보통 context를 uniform하게 처리한다고 가정되지만 (10,000번째 token도 100번째 token만큼 reliable하게) 실제로는 이 가정이 성립하지 않는다.
Contribution
- GPT-4.1, Claude 4, Gemini 2.5, Qwen3를 포함한 18개 LLM을 평가했고, 결과적으로 모델들은 context를 uniform하게 사용하지 않으며 input length가 길어질수록 performance가 점점 unreliable해진다.
- 긴 context benchmark 설계는 어렵다. input length가 길어지면 task 복잡도도 함께 올라가는 경향이 있어, performance degrade가 긴 input 때문인지 본질적으로 어려운 문제 때문인지 분리하기 어렵다. 그래서 이 연구는 task 복잡도를 고정하고 input length만 변화시켜 length의 효과만 직접 측정
- Needle in a Haystack(NIAH) 같은 벤치마크에서 near-perfect 점수를 받기 때문에 long-context task에서도 성능이 uniform하다고 흔히 가정되지만, NIAH는 단순 retrieval task에 불과.
NIAH(Needle in a Haystack): 긴 문서(haystack, 건초더미) 안에 무관한 텍스트를 잔뜩 채우고, 그 어딘가에 사실 한 문장(needle, 바늘)을 끼워 넣은 뒤, 모델에게 그 needle을 찾아내게 하는 테스트. long-context 능력 평가에 가장 널리 쓰이는 벤치마크. NIAH는 근본적으로 단순한 retrieval task로, 알려진 문장(needle)을 무관한 텍스트(haystack) 속에 넣고 모델에게 그것을 찾게 하는 것이다. 확장성은 좋지만 보통 직접적인 어휘 매칭(lexical matching, semantic의 반대, 단어 자체가 존재하는지 위주)을 평가하는데, 이는 유연하고 의미 중심적인 task를 대표하지 못할 수 있다고 언급

Experiments
uniform하지 않다는 걸 보여주기 위한 실험들
1. Needle-Question Similarity (의미적 유사도)
NIAH는 직접적 lexical matching에 의존한다. 그러나 실제 long-context 사용은 정확한 키워드 없이 의미적으로 관련 정보를 추론해야 하는 경우가 많다. 예를 들어 agent가 큰 corpus를 검색할 때 사용자는 정확한 키워드를 잘 지정하지 않는다. question 하나에 대해 needle 8개를 작성하되, 각 needle의 needle-question cosine similarity를 다르게 함(5개 embedding model 평균). PG essays는 similarity 0.445–0.775, arXiv는 0.521–0.829 범위. needle이 haystack 주제(writing/retrieval cluster)에 자연스럽게 섞이도록 0.9 이상 확률로 클러스터에 속하게 설계. 답이 haystack에 우연히 존재하지 않음을 vector DB로 사전 검증해 hallucination만 오답이 되도록 통제. 이 실험의 목표는 needle-question cosine similarity를 바꿔가면서 성능이 어떻게 되는지 보기.
실험 결과
similarity가 낮은 needle-question pair일수록 input length 증가에 따라 성능이 더 빠르게 저하. 짧은 input에서는 low-similarity pair도 잘 처리(특히 고성능 모델은 모든 pair에서 성공). needle position(11개)은 이 task에서 유의미한 차이 없음.
2. Distractors (방해 요소)
구형 모델에서 distractor가 성능을 떨어뜨리고 비균일한 영향을 준다는 건 알려져 있었다. 최신 모델은 distractor에 강건하다고 주장되지만, input length가 길어질 때도 그런지는 검증되지 않았다.
[단어 차이]
distractor: needle과 주제는 관련되나 질문에 정확히 답하지 않는 내용.
irrelevant content: needle/질문과 완전히 무관한 내용.
각 haystack topic(PG essays, arXiv)에서 needle-question similarity가 높은 needle 하나를 골라(8개 중 두 번째로 높은 것) 진행한다. 이미 찾기 쉬운 needle을 써서 distractor 효과만 고립시키려는 의도
예제) PG essay 예시:
- 질문: "대학 동기에게 받은 최고의 글쓰기 조언은?"
- needle(정답): "매주 글을 쓰라는 것"
- distractor들: "교수에게 받은 최고의 조언은 매일 쓰라는 것", "동기에게 받은 최악의 조언", "고등학교 때 받은 조언", "예전엔 최고라고 생각했지만 이젠 아닌 조언"
실험 세팅 3 Conditions:
- No distractors (baseline) — needle만 haystack에 삽입. distractor 없음. 비교 기준선.
- Single distractor — needle + distractor 1개를 haystack에 무작위 위치로 삽입.
- Multiple distractors — needle + distractor 4개 전부를 haystack 곳곳에 무작위 위치로 삽입.

실험 결과
- input length가 길수록 영향 증폭
- distractor마다 영향이 비균일(특정 distractor가 더 치명적)
- 모델별 차이: Claude는 hallucination 비율 최저, 불확실하면 답을 회피(abstain)하는 경향. GPT는 hallucination 비율 최고, 자신감 있게 틀린 답 생성.
3. Needle-Haystack Similarity (needle-haystack 유사도)
long-context에서 무관한 내용(haystack)은 보통 input length를 채우는 중립적 placeholder로 취급되며, 그 내용 자체는 task에 영향이 없다고 가정된다. 하지만 needle이 haystack 내용과 의미적으로 섞이면 추출이 더 어려울 수 있다. 이 가정을 검증하는 실험. needle을 haystack과 임베딩해 top-5 chunk의 cosine similarity 평균으로 needle-haystack similarity를 측정(5개 embedding model 반복). 두 haystack(PG essays, arXiv)에 의미적으로 비슷한 needle과 무관한 needle을 각각 넣어 비교. 즉 같은 haystack 안에 "섞이는 needle"과 "안 섞이는 needle"을 두고 성능 차이를 본다.
측정된 similarity 값:
- PG essay haystack: PG needle 0.529 / arXiv needle 0.368
- arXiv haystack: arXiv needle 0.654 / PG needle 0.394
예제) PG essay haystack에 PG essay needle(유사, 잘 섞임)과 arXiv needle(비유사, 안 섞임)을 각각 배치해 비교.

실험 결과
- PG essay haystack에서는 arXiv needle(안 섞이는 쪽)이 PG needle보다 유의미하게 잘 검색됨 → needle이 주변과 안 섞일 때 더 잘 찾음.
- 단, arXiv haystack에서는 두 needle 간 차이가 미미.
- 두 topic만으로 "유사도 높을수록 성능 저하"라고 일반화하기는 어려움. 다만 task 구조와 needle-question similarity를 고정해도 needle-haystack 유사도를 바꾸면 결과가 달라진다는 점에서 long-context 처리의 비균일성을 보여줌.
4. Haystack Structure (haystack 구조적 일관성)
haystack이 일관된 essay로 구성되면 무작위 삽입된 needle이 논리 흐름을 깨 더 눈에 띌 수 있다. 반대로 문장이 뒤섞인 haystack에서는 needle이 더 잘 묻힐 수 있다. 이는 "모델이 context의 논리 흐름에 민감하게, 순서 의존적으로 처리한다"는 가정을 따른다. 이 가정을 검증하는 실험. haystack을 두 condition으로 만들어 비교.
실험 세팅 2 Conditions:
- Original — 각 발췌문의 자연스러운 논리 흐름을 보존.
- Shuffled — 전체 주제는 유지하되 문장을 무작위로 재배열해 논리적 연속성 제거.

실험 결과
- 직관에 반하는 결과: 18개 모델 전부 shuffled haystack에서 더 좋은 성능.
- 즉 논리적 흐름이 보존된 구조가 오히려 성능을 떨어뜨림.
- 시사점: 입력의 구조적 패턴이 attention mechanism이 적용되는 방식에 영향을 줄 수 있고, 특히 input length가 길수록 그렇다. 왜 그런지는 mechanistic interpretability 영역으로 본 보고서 범위 밖.
5. LongMemEval (현실적 대화형 QA)
chat assistant에 memory를 넣는 naive한 방법은 전체 대화 기록을 prompt에 통째로 넣는 것. 이러면 모델이 한 번의 호출로 두 작업을 동시에 수행해야 한다 — 관련 부분 찾기(retrieval) + 종합(reasoning). 이상적으로는 관련 부분만 주어 reasoning에만 집중하게 해야 한다. 무관한 context 추가가 성능에 주는 영향을 측정하는 실험.
LongMemEval_s에서 knowledge update, temporal reasoning, multi-session 범주를 선별. 모호하거나 답 불가한 38개를 제거해 306개 prompt 확보(평균 ~113k token).
실험 세팅 2 Conditions:
- Full input — ~113k token 전체. 무관 내용 + distractor 포함. retrieval + reasoning 둘 다 필요.
- Focused input — ~300 token. 관련 부분만. reasoning만 필요.
예제) 질문: "정원 워크숍에 참석한 날과 토마토 모종을 심은 날 사이에 며칠이 지났나?" → full prompt에는 날짜가 실제로 들어있지만 Claude Sonnet 4가 "정보가 제공되지 않았다"며 답을 회피.

실험 결과
- 모든 모델이 focused에서 유의미하게 높은 성능 → 무관한 context로 retrieval 단계가 추가되는 것만으로 성능 저하.
- Claude family가 focused/full 격차 가장 큼. 모호함에서 비롯된 abstention 때문이며, Opus 4·Sonnet 4가 보수적이라 구형 Claude보다 full에서 낮은 성능
- thinking mode를 켜면 focused·full 둘 다 향상되나, 최신 모델조차 두 input length 간 격차는 여전히 존재
- question type별: non-thinking에서 knowledge-update > multi-session > temporal reasoning 순. thinking을 켜면 순위가 바뀜
6. Repeated Words (반복 단어 복제)
앞 실험들은 input length만 변화시켰다. 그런데 모델은 autoregressive하므로 출력도 입력의 일부가 된다. 출력이 입력에 비례해 길어지면 어떻게 될까? 문자열을 n번 반복하는 프로그램은 항상 같은 출력을 내므로, 모델도 이런 trivial한 task는 computing system처럼 신뢰할 수 있어야 한다. 이를 검증하는 실험.
반복 단어 사이에 unique word 하나를 특정 위치에 삽입하고, 입력을 정확히 그대로 복제하라고 지시. 단어 수 25~10,000개, 위치를 다양화해 조합당 1090개 변형 생성. max_output_tokens는 입력의 2배, temperature=0. 채점은 normalized Levenshtein distance.
예제) "apple apple apple apple apples apple apple ..." → 'apple'이 반복어, 'apples'가 unique word. 그대로 복제 요구.
테스트한 단어 조합: apple/apples, golden/Golden, orange/run, orange/San Francisco, San Francisco/sf, Golden Gate Bridge/Golden Gate Park 등 7개.
실험 결과
- context(입력+출력)가 길어질수록 모든 모델에서 성능 저하
- unique word가 앞쪽에 있을 때 position accuracy 높음
- 길어지면 출력 token limit까지 단어를 계속 생성(과다생성)하거나 반대로 과소생성
- 모델별 특이 행동:
- Claude Opus 4 — 가장 느리게 저하하나 유일하게 작업 거부(2.89%). 2500단어부터 "불일치가 있다"는 관찰 코멘트를 달거나 copyright 우려로 verbatim 복제 거부
- Claude Sonnet 3.5 — 출력 한도(8192 token)까지는 신형 Claude보다 우수
- GPT-4.1 — 2.55% 거부. mini/nano는 입력에 없는 중복어("Golden Golden")나 소문자 "san" 생성
- Gemini 2.5 Pro — 변동성 최대, 500~750단어부터 입력에 없는 random word 생성
- Qwen3-8B — 4.21% 미시도, 5000단어부터 무관한 문장 생성
Conclusion
관련 정보가 context에 존재하는지가 전부가 아니라, 그 정보가 어떻게 제시되는지가 더 중요하다. 가장 뛰어난 모델조차 이에 민감하므로 effective context engineering이 reliable한 성능에 필수적이다. 실제 응용은 더 복잡하므로 성능 저하는 더 심할 것으로 예상
Discussion
- 성능 저하 원인, 해결책에 대한 디테일한 내용은 없음
- 언급된 mitigation:
- context engineering (모델 context window의 신중한 구성과 관리)
- LongMemEval 실험에서 언급된 내용: 전체를 통째로 넣는 naive 방식(full input)보다 관련 부분만 담은 focused input이 모든 모델에서 유의미하게 높은 성능을 보였다. 무관한 context를 넣으면 retrieval 단계가 추가되어 성능이 떨어지므로, 사전에 관련 부분만 골라 넣는 것(= retrieval 기반 접근)이 유리