컨텍스트 윈도우 이해하기

“컨텍스트 윈도우”는 언어 모델이 새로운 텍스트를 생성할 때 참조할 수 있는 전체 텍스트의 양과 생성하는 새로운 텍스트를 합친 것을 의미합니다. 이는 언어 모델이 학습된 방대한 데이터 코퍼스와는 다르며, 대신 모델의 “작업 메모리”를 나타냅니다. 더 큰 컨텍스트 윈도우는 모델이 더 복잡하고 긴 프롬프트를 이해하고 응답할 수 있게 해주는 반면, 더 작은 컨텍스트 윈도우는 모델이 긴 프롬프트를 처리하거나 장시간의 대화에서 일관성을 유지하는 능력을 제한할 수 있습니다.

아래 다이어그램은 API 요청에 대한 표준 컨텍스트 윈도우 동작을 보여줍니다1:

1claude.ai와 같은 채팅 인터페이스의 경우, 컨텍스트 윈도우는 “선입선출” 시스템으로 설정될 수도 있습니다.

  • 점진적 토큰 축적: 대화가 진행됨에 따라 각 사용자 메시지와 어시스턴트 응답이 컨텍스트 윈도우 내에 축적됩니다. 이전 대화 내용이 완전히 보존됩니다.
  • 선형 증가 패턴: 컨텍스트 사용량은 각 턴마다 선형적으로 증가하며, 이전 턴들이 완전히 보존됩니다.
  • 200K 토큰 용량: 사용 가능한 전체 컨텍스트 윈도우(200,000 토큰)는 대화 기록을 저장하고 Claude에서 새로운 출력을 생성하는 최대 용량을 나타냅니다.
  • 입력-출력 흐름: 각 턴은 다음으로 구성됩니다:
    • 입력 단계: 모든 이전 대화 기록과 현재 사용자 메시지를 포함
    • 출력 단계: 향후 입력의 일부가 되는 텍스트 응답을 생성

확장 사고를 포함한 컨텍스트 윈도우

확장 사고를 사용할 때, 사고에 사용된 토큰을 포함한 모든 입력 및 출력 토큰이 컨텍스트 윈도우 제한에 포함되며, 다중 턴 상황에서 몇 가지 뉘앙스가 있습니다.

사고 예산 토큰은 max_tokens 매개변수의 하위 집합이며, 출력 토큰으로 청구되고 비율 제한에 포함됩니다.

하지만, 이전 사고 블록은 Anthropic API에 의해 자동으로 컨텍스트 윈도우 계산에서 제외되며 후속 턴에서 모델이 “보는” 대화 기록의 일부가 아니므로, 실제 대화 내용을 위한 토큰 용량이 보존됩니다.

아래 다이어그램은 확장 사고가 활성화되었을 때의 특수한 토큰 관리를 보여줍니다:

  • 확장 사고 제외: 확장 사고 블록(짙은 회색으로 표시)은 각 턴의 출력 단계에서 생성되지만, 후속 턴의 입력 토큰으로 전달되지 않습니다. 사고 블록을 직접 제거할 필요가 없습니다. Anthropic API가 이를 다시 전달할 때 자동으로 처리합니다.
  • 기술적 구현 세부사항:
    • API는 대화 기록의 일부로 다시 전달할 때 이전 턴의 사고 블록을 자동으로 제외합니다.
    • 확장 사고 토큰은 생성 시에만 한 번 출력 토큰으로 청구됩니다.
    • 유효한 컨텍스트 윈도우 계산은 다음과 같습니다: context_window = (input_tokens - previous_thinking_tokens) + current_turn_tokens.
    • 사고 토큰에는 thinking 블록과 redacted_thinking 블록이 모두 포함됩니다.

이 아키텍처는 토큰 효율적이며, 사고 블록이 상당한 길이일 수 있음에도 토큰 낭비 없이 광범위한 추론을 가능하게 합니다.

컨텍스트 윈도우와 확장 사고에 대해 더 자세히 알아보려면 확장 사고 가이드를 참조하세요.

확장 사고와 도구 사용을 포함한 컨텍스트 윈도우

아래 다이어그램은 확장 사고와 도구 사용을 결합할 때의 컨텍스트 윈도우 토큰 관리를 보여줍니다:

1

첫 번째 턴 아키텍처

  • 입력 구성요소: 도구 구성 및 사용자 메시지
  • 출력 구성요소: 확장 사고 + 텍스트 응답 + 도구 사용 요청
  • 토큰 계산: 모든 입력 및 출력 구성요소가 컨텍스트 윈도우에 포함되며, 모든 출력 구성요소는 출력 토큰으로 청구됩니다.
2

도구 결과 처리 (턴 2)

  • 입력 구성요소: 첫 번째 턴의 모든 블록과 tool_result. 확장 사고 블록은 해당하는 도구 결과와 함께 반드시 반환되어야 합니다. 이는 사고 블록을 반환해야 하는 유일한 경우입니다.
  • 출력 구성요소: 도구 결과가 Claude에 전달된 후, Claude는 텍스트로만 응답합니다(다음 user 메시지가 있을 때까지 추가 확장 사고 없음).
  • 토큰 계산: 모든 입력 및 출력 구성요소가 컨텍스트 윈도우에 포함되며, 모든 출력 구성요소는 출력 토큰으로 청구됩니다.
3

세 번째 단계

  • 입력 구성요소: Claude가 전체 도구 사용 주기를 완료했으므로 이제 삭제할 수 있는 사고 블록을 제외한 모든 입력과 이전 턴의 출력이 전달됩니다. API가 사고 블록을 자동으로 제거하거나, 이 단계에서 직접 제거할 수 있습니다. 여기서 다음 User 턴을 추가하게 됩니다.
  • 출력 구성요소: 도구 사용 주기 외부에 새로운 User 턴이 있으므로, Claude는 새로운 확장 사고 블록을 생성하고 거기서부터 계속됩니다.
  • 토큰 계산: 이전 사고 토큰은 컨텍스트 윈도우 계산에서 자동으로 제외됩니다. 다른 모든 이전 블록은 여전히 토큰 윈도우의 일부로 계산되며, 현재 Assistant 턴의 사고 블록은 컨텍스트 윈도우의 일부로 계산됩니다.
  • 확장 사고와 도구 사용에 대한 고려사항:
    • 도구 결과를 게시할 때, 해당 특정 도구 요청과 함께하는 전체 수정되지 않은 사고 블록(서명/수정된 부분 포함)이 포함되어야 합니다.
    • 시스템은 암호화 서명을 사용하여 사고 블록의 진위를 확인합니다. 도구 사용 중 사고 블록을 보존하지 않으면 Claude의 추론 연속성이 깨질 수 있습니다. 따라서 사고 블록을 수정하면 API가 오류를 반환합니다.

확장 사고와 도구 호출은 중첩되지 않습니다 - 비-tool_result 사용자 턴이 중간에 없다면 확장 사고, 도구 호출, 그리고 더 많은 확장 사고를 볼 수 없습니다. 또한, 현재 확장 사고 블록 내에서의 도구 사용은 지원되지 않지만, Claude는 사고 블록 내에서 어떤 도구를 사용해야 하고 어떻게 호출해야 하는지에 대해 추론할 수 있습니다.

확장 사고와 도구 사용에 대해 더 자세히 알아보려면 확장 사고 가이드를 참조하세요.

최신 Claude 모델의 컨텍스트 윈도우 관리

최신 Claude 모델(Claude 3.7 Sonnet부터)에서는 프롬프트 토큰과 출력 토큰의 합이 모델의 컨텍스트 윈도우를 초과하면, 시스템이 컨텍스트를 자동으로 잘라내는 대신 유효성 검사 오류를 반환합니다. 이 변경으로 더 예측 가능한 동작이 제공되지만 더 신중한 토큰 관리가 필요합니다.

토큰 사용량을 계획하고 컨텍스트 윈도우 제한 내에서 유지되도록 하려면, 토큰 카운팅 API를 사용하여 메시지를 Claude에 보내기 전에 얼마나 많은 토큰을 사용할지 예측할 수 있습니다.

모델별 컨텍스트 윈도우 크기 목록은 모델 비교 표를 참조하세요.

다음 단계