Claude 블로그 되짚어보기 #3 — Claude 2.1, 200K 컨텍스트와 Needle-in-a-Haystack의 교훈 (2023)

panicdev·2026년 4월 21일

원문 정보

글의 요지

Claude 2.1이 출시되면서 컨텍스트 윈도우가 200K 토큰(약 500페이지) 으로 확장됐다. 이 글은 그 긴 컨텍스트를 어떻게 하면 제대로 쓸 수 있는지 — 그리고 쓰지 못했을 때 어떤 문제가 생기는지에 대한 매우 구체적인 분석이다.

글의 핵심 주장은 세 문장으로 요약된다.

  • Claude 2.1은 200K 컨텍스트 전체에서 정보를 잘 찾아낸다.
  • 그러나 자연스럽게 속하지 않은 문장에 근거해 답하는 걸 주저하는 경향이 있다.
  • 프롬프트에 한 줄만 추가하면 이 주저함이 사라지고 성능이 급상승한다.

Claude 2.1의 재훈련 내용

단순히 컨텍스트 윈도우만 늘린 게 아니라, 긴 문서 작업(S-1급 재무보고서 요약 등)에서 수집된 실제 사용자 피드백으로 훈련됐다. 결과적으로:

  • 틀린 답변 30% 감소 (Claude 2.0 대비)
  • 문서가 실제로는 어떤 주장을 뒷받침하지 않는데도 뒷받침한다고 말하는 오류가 3~4배 감소

"Needle-in-a-Haystack" 문제

외부 연구자(Gregory Kamradt)가 Claude 2.1로 실험한 내용이다. Paul Graham의 스타트업 관련 에세이들을 긁어모아 긴 문서를 만들고, 그 안에 이런 문장을 몰래 끼워 넣었다.

"샌프란시스코에서 할 수 있는 가장 좋은 일은 맑은 날 샌드위치를 먹으며 돌로레스 공원에 앉아 있는 것이다."

그리고 Claude에게 물었다. "샌프란시스코에서 가장 재미있는 일은 뭐야?"

Claude 2.1의 대답은 의외였다. "해당 에세이는 이 질문에 대한 명확한 답을 제공하지 않는다" 라는 식으로 거부한 것이다. 분명히 문서 안에 답이 있는데도.

Anthropic은 사내에서 같은 현상을 재현했다. 실제 의회 예산안(Consolidated Appropriations Act) 본문에 '5월 23일을 "전국 바늘 찾기의 날"로 선포한다' 는 가짜 문장을 끼워 넣고 같은 질문을 던졌더니, Claude가 문장을 인식은 하지만 그걸 진짜 국경일이라고 인정하길 주저했다.

왜 이런 일이 일어나는가

Anthropic의 해석은 이렇다. Claude 2.1은 부정확한 답을 내지 않도록 훈련됐다. 여기에는 "문서가 충분한 근거를 담고 있지 않으면 답하지 않는다"는 원칙도 포함된다. 그래서 문맥상 튀는(out of place) 문장 하나만 근거로 답을 내는 걸 꺼린다.

반대로 문서에 원래부터 자연스럽게 속한 문장에 대해서는 같은 주저함을 보이지 않는다. 같은 Paul Graham 문서에서 Viaweb 에세이의 첫 문장 "Yahoo 인수 발표 몇 시간 전, 나는 Viaweb 사이트의 스냅샷을 찍었다" 를 놓고 위치를 바꿔가며 질문했더니, Claude는 매번 정답을 맞췄다.

해결책: 프롬프트에 한 줄만 추가하기

Anthropic이 내놓은 처방은 놀라울 만큼 단순했다. Claude의 응답 시작 부분에 다음 한 줄을 미리 끼워 넣는다:

"Here is the most relevant sentence in the context:"
(문맥에서 가장 관련 있는 문장은 다음과 같습니다:)

이 한 문장만으로 원래 평가의 정확도가 27% → 98% 로 뛰었다.

원리는 이렇다 — 모델에게 먼저 관련 문장을 찾으라고 지시하면, "한 문장만 근거로 답하기 꺼려함"이라는 경향이 상쇄된다. 심지어 자연스럽게 속한 문장에 대한 질문에서도 성능이 올라갔다(90~95% 정확도).


2026년에 다시 읽으며 — 내가 본 것

1. 이 글이 Anthropic의 "성실함"을 증명한 결정적 순간

2023년 12월 이 글이 나왔을 때의 맥락을 되짚어봐야 한다. Claude 2.1이 11월 21일에 공개됐고, 2주 뒤 Gregory Kamradt의 Needle-in-a-Haystack 테스트에서 Claude 2.1이 GPT-4보다 낮은 점수를 받아 트위터에서 크게 화제가 됐다. "Claude 2.1이 실제로는 200K를 못 쓴다"는 비판이 커지던 시기였다.

그 시점에 Anthropic이 한 선택은 세 가지 중 하나였을 것이다.

  1. 무시하기
  2. "우리는 다른 벤치마크에서 잘한다"고 반박하기
  3. 원인을 분석해서 공개하기

실제 선택은 3번이었다. 이 글은 그래서 단순한 "프롬프트 팁" 문서가 아니라, Anthropic이 외부 평가에 어떻게 대응하는가 를 보여준 첫 공개 샘플이다. 뒤이은 다른 글들("Behind the model launch" 처럼)에서 이어지는 "모델 출시 뒤의 실제 경험을 공유한다"는 서술 방식의 원형이다.

2. Claude의 "주저함"이 버그가 아니라 설계의 결과라는 고백

이 글에서 가장 중요한 한 줄은 이거다.

"Claude 2.1은 부정확한 답을 내지 않도록 훈련된 모델이며, 그 결과로 문맥에 튀는 문장에만 근거한 답을 주저한다."

영어 원문은 "reduce inaccuracies"와 "reluctance"라는 단어를 연결시킨다. 즉, Needle-in-a-Haystack 실패는 모델이 멍청해서가 아니라 hallucination을 억제하려는 훈련이 너무 강하게 걸려서 생긴 부작용이라는 뜻이다.

Anthropic의 HHH(Helpful, Honest, Harmless) 프레임워크에서 Honest가 Helpful을 과도하게 누를 때 어떤 UX가 나오는지를 보여주는 첫 공개 케이스이기도 하다. 2026년 현재 Claude가 가끔 "확실하지 않습니다"라고 답하는 행동은 이 긴장 관계의 현재 균형점이다. 2023년에는 그 균형이 지나치게 Honest 쪽으로 치우쳐 있었던 셈이다.

3. "Response Prefill"이 프롬프트 엔지니어링의 표준 기법이 된 시점

"Here is the most relevant sentence in the context:" 를 응답 시작부에 끼워 넣는 기법을 현재 용어로는 Response Prefill(또는 Assistant Prefill)이라고 부른다. 개념은 간단하다 — LLM에게 응답의 첫 몇 글자/문장을 미리 쥐여주면, 모델이 그 방향으로 "끌려가는" 성질을 이용한다.

2026년 시점에서 이 기법은 Claude API의 공식 기능이 되어 있고, Prompt Engineering 가이드 문서에 상시 수록된 표준 기법이다. 그 출발점이 바로 이 블로그 글이다. Gregory Kamradt의 외부 테스트 → Anthropic의 내부 재현 → 프롬프트 수정으로 문제 해결 → 공개 포스팅 → 업계 표준 기법으로 자리잡음. 한 편의 글이 업계 관행 하나를 만든 드문 예다.

4. "Needle-in-a-Haystack"이 업계 표준 벤치마크가 된 순간

Gregory Kamradt의 테스트는 원래 개인이 만든 비공식 평가였다. 구조는 단순하다 — 긴 문서 중간에 엉뚱한 문장 하나를 넣고, 그걸 찾아낼 수 있는지 보는 것. 2023년 11월의 원본 실험은 Paul Graham 에세이와 GPT-4/Claude 2.1을 대상으로 했다.

Anthropic이 이 비공식 테스트를 공식 블로그에서 진지하게 반응한 순간, Needle-in-a-Haystack은 사실상의 업계 표준으로 격상됐다. 지금은 새 모델이 나올 때마다 이 테스트를 돌린 히트맵이 거의 의무적으로 공개된다. 2025년 Sonnet 4의 1M 컨텍스트 공개 때도, 2026년 Opus 4.6/Sonnet 4.6 GA 때도 같은 형식의 검증이 따라붙었다.

개인 개발자의 주말 실험이 공식 벤치마크로 자리잡는 과정 — 이게 AI 분야 평가 생태계의 특이한 점이고, 이 글이 그걸 승인하는 결정적 역할을 했다.

5. "긴 컨텍스트 = 긴 문서"였던 시대

이 글의 사용 시나리오를 보면 2023년의 "긴 컨텍스트" 상상력이 어디까지였는지가 드러난다.

  • S-1 재무보고서 요약
  • 의회 예산안 본문 질의응답
  • Paul Graham 에세이 모음에서 문장 검색

전부 "사람이 읽을 수 있는 문서" 다. 2026년 현재 사람들이 200K~1M 컨텍스트를 쓰는 실제 용도는 다르다.

  • 중형 리포지토리 전체 읽기 (Claude Code)
  • 수백 번의 tool call 기록을 보존한 채로 에이전트 실행
  • MCP 서버 수십 개의 연결 상태 유지
  • 수 시간짜리 작업 세션 전체의 컨텍스트 유지

"긴 문서 읽기"에서 "긴 상태 유지"로 주된 용도가 바뀌었다. 기술은 같은데(200K → 1M, 기울기만 다름), 소프트웨어가 그걸 쓰는 방식이 완전히 다른 세상이다.

6. 이 시기 프롬프트 엔지니어링은 "예술"이었다

2023년 12월은 프롬프트 엔지니어링의 전성기였다. 당시 블로그, 컨퍼런스, 트위터 타임라인에는 "이 한 줄을 추가하면 성능이 이만큼 오른다"류의 발견이 끝없이 쏟아졌다. 이 글도 그 계보에 속한다.

2026년 현재는 상황이 많이 다르다.

  • 모델 자체가 훨씬 똑똑해서 "마법의 한 줄"의 효용이 줄어듦
  • Agent Skills가 많은 프롬프트 엔지니어링을 대체함 (재사용 가능한 스킬 패키지)
  • MCP가 컨텍스트 주입 패턴을 표준화함
  • 복잡한 지시는 System Prompt, CLAUDE.md, project-level instructions로 구조화됨

"프롬프트 해킹"의 시대는 저물고, 프롬프트 인프라의 시대가 왔다. 이 글을 지금 다시 읽으면 향수가 느껴지는 이유다. 그러나 중요한 것 하나 — 여기서 발견된 원리들(Response Prefill, 문맥 정렬, 예시 위치 등)은 여전히 내부적으로 유효하다. 다만 사람이 직접 실험하는 대신 프레임워크가 자동으로 처리해줄 뿐이다.


마무리

이 글은 표면적으로는 "Claude 2.1의 프롬프팅 팁"이지만, 실제로는 세 겹의 이야기다.

  • 기술적 레이어: 27% → 98%를 만든 한 줄짜리 프롬프트 수정
  • AI 안전 레이어: "Honest가 Helpful을 과하게 누르면 생기는 일"의 첫 공개 사례
  • 커뮤니티 레이어: 외부 평가 → 공식 반응 → 업계 표준화의 피드백 루프가 만들어진 지점

Claude 2.1은 Anthropic이 "우리가 만든 모델이 완벽하지 않다"고 인정한 첫 모델이기도 하다. 그 인정의 형태가 변명이 아니라 분석과 해결책이었다는 점 — 그게 이 글이 지금 다시 읽을 가치가 있는 이유다.

0개의 댓글