k
korAI
고급 전체
🔥 고급2026-09-155~7분

Prompt Caching으로 반복 추론 비용 90% 절감하기

Anthropic의 prompt caching을 활용해 대형 시스템 프롬프트·RAG 문서의 재처리를 방지하고, 캐시 히트율과 비용을 정밀 관측하는 운영 패턴을 다룬다.

prompt-cachingcost-optimizationobservability

왜 Prompt Caching인가

Claude API 호출 시 동일한 접두사(prefix)가 반복되면 매번 전체 토큰을 처리한다. 1만 토큰짜리 시스템 프롬프트를 하루 10,000회 호출하면 입력 토큰 비용만 수십만 원 이상이 된다. cache_control: {type: 'ephemeral'}을 지정하면 최초 처리 이후 캐시된 토큰 비용은 기본 입력 대비 약 90% 절감된다(claude-3-5-sonnet 기준 캐시 히트 시 $0.30/MTok vs 기본 $3.00/MTok). 단, 캐시 쓰기는 기본의 1.25배 비용이 발생하므로 최소 4~5회 이상 재사용될 블록에만 적용해야 손익분기를 넘긴다.

실전 구현 패턴

캐시 경계는 messages 배열의 content 블록 마지막에 cache_control을 붙이는 방식으로 설정한다. 여러 경계를 중첩할 수 있으나 최대 4개 캐시 브레이크포인트까지만 지원된다.

import anthropic

client = anthropic.Anthropic()

SYSTEM_PROMPT = "..." * 500  # 대형 시스템 컨텍스트
RAG_DOCS = "..." * 300       # 검색된 문서

response = client.messages.create(
    model="claude-opus-4-5",
    max_tokens=1024,
    system=[
        {
            "type": "text",
            "text": SYSTEM_PROMPT,
            "cache_control": {"type": "ephemeral"}  # 브레이크포인트 1
        }
    ],
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "text",
                    "text": RAG_DOCS,
                    "cache_control": {"type": "ephemeral"}  # 브레이크포인트 2
                },
                {"type": "text", "text": "질문: 요약해줘"}
            ]
        }
    ]
)

usage = response.usage
print(f"캐시 생성: {usage.cache_creation_input_tokens}")
print(f"캐시 히트: {usage.cache_read_input_tokens}")
print(f"일반 입력: {usage.input_tokens}")

비용 관측 및 실패 모드

캐시 TTL은 5분이다. 호출 간격이 5분을 초과하면 캐시가 만료되어 쓰기 비용이 재발생한다. 따라서 배치 처리보다 실시간 고빈도 트래픽에 더 효과적이다.

실패 모드:

  • 접두사 변형: 캐시 경계 앞의 텍스트가 1자라도 바뀌면 캐시 미스. 동적 타임스탬프나 요청 ID를 시스템 프롬프트에 삽입하지 말 것.
  • 모델 버전 혼용: 캐시는 모델별로 분리되므로 A/B 테스트 시 히트율이 분산된다.
  • 캐시 히트율 미측정: cache_read_input_tokens를 메트릭으로 수집하지 않으면 최적화 효과를 검증할 수 없다.

운영 체크리스트

  • [ ] 캐시 대상 블록이 4회 이상 재사용되는지 사전 분석
  • [ ] cache_read_input_tokens / cache_creation_input_tokens 비율을 Datadog·Prometheus에 기록
  • [ ] 시스템 프롬프트에 동적 값 삽입 금지, 동적 파트는 user 메시지로 분리
  • [ ] TTL 5분을 고려해 헬스체크 호출로 캐시 워밍 여부 결정
  • [ ] 비용 절감액 = (캐시 히트 토큰 × $2.70/MTok 차액)으로 주간 리포트 자동화