Claude의 프롬프트 캐싱은 메시지에 대해 수행된 계산 작업을 저장하여 후속 요청에서 재사용할 수 있도록 하는 방식으로 작동합니다. 이를 통해 후속 요청을 더 빠르고 저렴하게 실행할 수 있지만, 동일한 콘텐츠를 반복적으로 전송하는 경우에만 유용합니다.

이 과정은 간단합니다. 초기 요청은 처리 작업을 캐시에 기록하고, 후속 요청은 동일한 콘텐츠를 다시 처리하는 대신 해당 캐시에서 읽어올 수 있습니다. 기본적으로 캐시는 5분 동안 유지되므로, 이 기능은 해당 시간 내에 동일한 콘텐츠를 반복적으로 전송하는 경우에만 유용합니다. 더 긴 시간이 필요한 경우, 더 높은 캐시 쓰기 가격으로 1시간 캐시 지속 시간도 사용할 수 있습니다.
캐시 중단점(Cache Breakpoints)
캐싱은 자동으로 활성화되지 않습니다. 메시지의 특정 블록에 캐시 중단점을 수동으로 추가해야 합니다. 작동 방식은 다음과 같습니다:
- 메시지에 대해 수행된 작업은 자동으로 캐시되지 않습니다
- 블록에 '캐시 중단점'을 수동으로 추가해야 합니다
- 중단점 이전의 모든 작업이 캐시됩니다
- 중단점까지 포함한 콘텐츠가 동일한 경우에만 후속 요청에서 캐시가 사용됩니다

캐시 중단점을 추가하려면, 축약형 대신 텍스트 블록을 작성하는 장문 형식을 사용해야 합니다:

축약형은 캐시 제어 필드를 추가할 공간을 제공하지 않으므로, cache_control 필드를 {"type": "ephemeral"}로 설정한 확장 형식을 사용해야 합니다.
캐시 중단점 작동 방식
메시지에 캐시 중단점을 배치하면, Claude는 해당 중단점까지 포함한 모든 처리 작업을 캐시합니다. 중단점 이후의 콘텐츠는 캐싱 없이 정상적으로 처리됩니다.

후속 요청에서 캐시가 유용하려면, 중단점까지의 콘텐츠가 동일해야 합니다. "please"라는 단어를 추가하는 것과 같은 작은 변경조차도 캐시를 무효화하여 Claude가 모든 것을 다시 처리하도록 강제합니다.

메시지 간 캐싱(Cross-Message Caching)
캐시 중단점은 여러 메시지와 메시지 유형에 걸쳐 적용될 수 있습니다. 이후 메시지에 중단점을 배치하면, 이전의 모든 메시지(사용자, 어시스턴트 등)가 캐시된 콘텐츠에 포함됩니다.

이는 특정 지점까지의 전체 컨텍스트를 캐시하려는 대화에서 특히 유용합니다.
시스템 프롬프트와 도구
텍스트 블록에만 제한되지 않습니다. 캐시 중단점은 다음에도 추가할 수 있습니다:
- 시스템 프롬프트
- 도구 정의
- 이미지 블록
- 도구 사용 및 도구 결과 블록

시스템 프롬프트와 도구 정의는 요청 간에 거의 변경되지 않으므로 캐싱에 매우 적합한 후보입니다. 프롬프트 캐싱에서 가장 큰 이점을 얻을 수 있는 경우가 바로 이 경우입니다.
캐시 순서
내부적으로 Claude는 요청 구성 요소를 특정 순서로 처리합니다: 먼저 도구, 그다음 시스템 프롬프트, 그다음 메시지 순입니다. 이 순서를 이해하면 중단점을 효과적으로 배치하는 데 도움이 됩니다.

최대 4개의 캐시 중단점을 추가할 수 있습니다. 예를 들어, 도구를 캐시한 다음 대화 기록 중간에 또 다른 중단점을 추가할 수 있습니다. 이를 통해 요청의 다른 부분이 변경될 때 캐시되는 내용을 유연하게 조정할 수 있습니다.

최소 콘텐츠 길이
캐싱을 위한 최소 임계값이 있습니다: 콘텐츠는 캐시되기 위해 최소 1024 토큰 이상이어야 합니다. 이는 캐시하려는 모든 메시지와 블록의 합계이며, 개별 블록이 아닙니다.

단순한 "Hi there!" 메시지는 이 임계값을 충족하지 못하지만, 해당 콘텐츠를 500번 복제하거나(또는 실제로 긴 프롬프트가 있는 경우) 1024 토큰을 초과하여 캐싱 대상이 될 수 있습니다.
효과적인 프롬프트 캐싱의 핵심은 여러 호출에서 일관되게 유지되는 요청 부분을 파악하고, 캐시 무효화를 최소화하면서 재사용을 최대화하도록 전략적으로 중단점을 배치하는 것입니다.