k
korAI
고급 전체
🔥 고급2026-05-166~8분

Prompt Caching 적중률 90%+ 달성: 캐시 구조 설계와 비용 계측

Anthropic의 prompt caching은 잘못 설계하면 적중률 20% 이하로 떨어진다. 캐시 경계 배치 원칙과 TTL 감쇄를 고려한 구조 설계로 토큰 비용을 실질적으로 70% 이상 절감하는 방법을 다룬다.

prompt-cachingcost-optimizationobservability

왜 캐시 적중률이 낮은가

Anthropic prompt caching은 cache_control: {type: 'ephemeral'} 마커를 기준으로 prefix를 캐싱한다. TTL은 5분이며, 캐시는 마커 이전 전체 prefix가 동일할 때만 적중된다. 흔한 실패 모드는 세 가지다.

  1. 마커를 너무 늦게 배치 — system prompt 끝이 아닌 user turn 직전에 두면, 매 요청마다 user 메시지가 prefix에 포함되어 적중 불가.
  2. 동적 콘텐츠를 prefix 앞에 삽입 — 타임스탬프, 요청 ID, 사용자 이름을 system 블록 상단에 넣으면 prefix가 매번 달라진다.
  3. TTL 5분을 초과하는 idle 트래픽 — 저트래픽 시간대에 캐시가 만료되면 다음 요청이 캐시 미스로 full 비용을 부담한다.

캐시 경계 설계 원칙

정적 → 준정적 → 동적 순으로 블록을 쌓고, 각 경계에만 마커를 둔다.

import anthropic

client = anthropic.Anthropic()

STATIC_SYSTEM = """당신은 금융 분석 AI입니다. [2000토큰 분량의 도메인 지식]"""
DOC_CONTEXT = """[검색된 문서 500토큰 — 세션당 고정]"""

def call_with_cache(user_query: str, session_docs: str = DOC_CONTEXT):
    response = client.messages.create(
        model="claude-opus-4-5",
        max_tokens=1024,
        system=[
            {
                "type": "text",
                "text": STATIC_SYSTEM,
                "cache_control": {"type": "ephemeral"}  # 경계 1: 정적
            },
            {
                "type": "text",
                "text": session_docs,
                "cache_control": {"type": "ephemeral"}  # 경계 2: 준정적
            }
        ],
        messages=[{"role": "user", "content": user_query}]  # 동적
    )
    usage = response.usage
    cache_hit_ratio = usage.cache_read_input_tokens / max(
        usage.cache_read_input_tokens + usage.cache_creation_input_tokens, 1
    )
    return response, cache_hit_ratio

cache_creation_input_tokens이 0이고 cache_read_input_tokens이 양수면 완전 적중이다. 이 두 필드를 로깅하지 않으면 적중률을 알 수 없으므로 반드시 usage를 계측해야 한다.

비용 계산과 트레이드오프

claude-opus-4-5 기준(2026-05 가격):

  • 일반 입력: $15 / 1M tokens
  • cache write: $18.75 / 1M tokens (25% 할증)
  • cache read: $1.50 / 1M tokens (90% 할인)

손익분기: 동일 prefix로 2회 이상 요청하면 이득. 1500토큰 prefix를 100회 요청하면 cache 없이 $2.25, cache 사용 시 약 $0.25(write 1회 + read 99회). 89% 절감.

단, TTL 5분 내 재요청이 보장되지 않는 배치성 워크플로우에서는 캐시 write 비용만 추가 발생하므로 요청 간격 분포를 먼저 측정해야 한다.

운영 체크리스트

  • [ ] cache_read_input_tokens / (cache_read + cache_creation) 를 Datadog/CloudWatch에 전송, 알림 임계값 70%
  • [ ] 동적 값(타임스탬프, 사용자 ID)은 반드시 user turn 또는 마지막 system 블록 이후에 배치
  • [ ] 저트래픽 시간대에는 워밍 요청(더미 쿼리)을 5분 간격으로 전송해 TTL 유지
  • [ ] 캐시 경계 변경 시 배포 직후 5분간 cache_creation 급증 여부 모니터링
  • [ ] 준정적 문서가 세션 중 변경될 경우 새 session_id로 분리해 별도 캐시 라인 유지