Skip to main content
Claude 컨텍스트 캐시(Context Cache)는 system prompt, 문서, 코드베이스, 대화 기록 등의 긴 접두부를 반복해서 사용할 때 적합합니다. 안정적인 접두부에 cache_control을 추가하면 첫 번째 요청에서 캐시를 생성하고 이후 요청에서는 만료되지 않은 캐시를 읽을 수 있습니다. 사용 전에 API 키를 설정하세요.
이 가이드의 예제에서는 claude-sonnet-5를 사용합니다. 다른 모델의 컨텍스트 캐시 지원 여부는 플랫폼의 모델 설명을 참조하세요.

적합한 사용 사례

여러 요청에서 동일한 긴 콘텐츠를 반복해서 전송하는 경우 다음과 같은 안정적인 접두부를 캐시할 수 있습니다.
  • 긴 system prompt
  • 고정된 지식 베이스 또는 제품 문서
  • 멀티턴 대화에서 변경되지 않는 이전 메시지
  • 반복해서 사용하는 코드베이스, 도구 정의 및 설명
컨텍스트 캐시는 “앞부분의 콘텐츠는 그대로 유지되고 마지막 질문만 계속 바뀌는” 요청에 적합합니다.

Claude Messages API

5분 캐시

캐시할 content block에 cache_control을 추가합니다.
system은 content block 배열로 작성해야 합니다. 문자열 형식의 system에는 cache_control을 추가할 수 없습니다.
ttl을 생략하면 캐시 유효 기간은 기본적으로 5분입니다.

1시간 캐시

1시간 캐시를 사용하려면 anthropic-beta 요청 헤더를 추가하고 ttl1h로 설정해야 합니다.
지원되는 TTL:

응답 사용량 필드

Claude Messages API는 일반 입력, 캐시 쓰기 및 캐시 읽기 token을 usage에 각각 반환합니다.
총 입력 token은 다음과 같이 계산합니다.
이 세 항목은 서로 겹치지 않습니다. 첫 번째 요청에서는 일반적으로 cache_creation_input_tokens > 0이 표시됩니다. 동일한 안정적인 접두부를 다시 전송하면 cache_read_input_tokens > 0이 표시되어야 합니다.

OpenAI 호환 API

요청 예제

/v1/chat/completions를 통해 캐시를 사용할 때 cache_control 형식은 Claude Messages API와 유사합니다.

1시간 캐시

OpenAI 호환 형식도 1시간 캐시를 지원합니다. 요청에 anthropic-beta 헤더를 추가하고 cache_control에서 ttl: "1h"를 설정하세요.

content는 배열로 지정

OpenAI 호환 형식에서는 cache_control을 구체적인 content block 안에 배치해야 하며 문자열 형식의 메시지에 추가할 수 없습니다.
위 형식은 캐시를 활성화하지 않으며 요청도 오류를 반환하지 않습니다. 올바른 형식은 다음과 같습니다.
content가 문자열이면 캐시 표시가 무시되고 입력 콘텐츠는 일반 입력으로 처리됩니다. 응답의 캐시 사용량 필드를 확인하여 캐시 적중 여부를 판단하세요.

user 또는 assistant content block 캐시

user 또는 assistant 메시지의 content block에도 cache_control을 추가하여 긴 문서나 멀티턴 대화 접두부를 캐시할 수 있습니다.
안정적인 콘텐츠와 현재 질문을 서로 다른 content block으로 나누고 안정적인 content block에만 cache_control을 추가하세요.

응답 사용량 필드

OpenAI 호환 형식은 다른 필드를 사용하여 캐시 사용량을 보고합니다.
필드 대응:
prompt_tokens_details.cache_write_tokens0이어도 claude_cache_creation_5_m_tokensclaude_cache_creation_1_h_tokens를 확인하세요. TTL 세부 필드가 있는 경우 캐시 쓰기 양은 해당 필드에 반환됩니다.
claude_cache_creation_5_m_tokensclaude_cache_creation_1_h_tokens에서 숫자와 단위 사이에는 밑줄이 있습니다. 응답에 반환된 필드 이름을 그대로 사용하세요.
OpenAI 호환 인터페이스는 stream: true를 명시적으로 전달하지 않아도 SSE 스트리밍 응답을 반환할 수 있습니다. 클라이언트는 chat.completion.chunk를 파싱할 수 있어야 하며, 사용량은 usage가 포함된 마지막 데이터 블록에 있습니다.

캐시 적중 조건

접두부가 최소 길이를 충족

이 가이드에서 사용하는 모델의 캐시 접두부에는 일반적으로 약 1024 token 이상이 필요합니다. 접두부가 너무 짧으면 오류 없이 캐시 표시가 무시될 수 있습니다.

접두부가 바이트 단위로 동일하게 유지

캐시 접두부의 텍스트, 공백, 줄바꿈 및 content block 순서는 모두 동일하게 유지해야 합니다. 안정적인 접두부에 타임스탬프, 임의 ID, 요청 횟수 등의 동적 콘텐츠를 추가하지 마세요.

요청이 모델 거부를 유발하지 않음

요청이 모델 거부를 유발하면 응답에 캐시 생성 token이 보고되더라도 다음 요청에서 해당 캐시를 읽지 못합니다. 캐시 미스를 해결할 때는 stop_reasonrefusal인지도 확인하세요.

캐시가 아직 유효함

캐시 유효 기간은 5분 또는 1시간이며 마지막으로 액세스한 시점부터 계산됩니다. 캐시에 적중하면 유효 기간이 갱신됩니다.

과금 사용량

캐시 관련 사용량은 세 가지로 나뉩니다. 세 가지 사용량은 서로 겹치지 않습니다. 캐시 쓰기 비용은 일반적으로 일반 입력보다 높고 캐시 읽기 비용은 일반 입력보다 낮으므로, 컨텍스트 캐시는 TTL 내에 반복해서 사용하는 안정적인 접두부에 적합합니다.

최소 재현 예제

아래 스크립트는 충분히 긴 안정적인 접두부를 생성하고 동일한 요청을 연속해서 두 번 전송합니다. 두 번째 응답에는 cache_read_input_tokens > 0이 표시되어야 합니다.
예상 결과:

문제 해결 체크리스트

캐시에 적중하지 않으면 다음 항목을 순서대로 확인하세요.
  • stop_reasonrefusal인지
  • 캐시 접두부가 모델의 최소 token 수를 충족하는지
  • 두 요청의 안정적인 접두부가 바이트 단위로 동일한지
  • OpenAI 호환 형식의 content가 배열인지
  • cache_control이 구체적인 content block 안에 있는지
  • 1시간 캐시에 ttl: "1h"와 해당 anthropic-beta 요청 헤더가 모두 설정되어 있는지
  • 캐시가 TTL을 초과했는지
  • 현재 사용 중인 인터페이스에 해당하는 캐시 사용량 필드를 읽고 있는지