AI 에이전트를 위한 캐싱 전략: 품질 타협 없이 비용 절감하기
AI 에이전트를 위한 캐싱 전략: 품질 타협 없이 비용 절감하기
여러분의 리서치 에이전트가 하루에 50개의 작업을 실행한다고 가정해보겠습니다. 각 작업은 동일한 3,000토큰짜리 시스템 프롬프트, 동일한 2,500토큰짜리 툴 정의, 동일한 5,000토큰짜리 지식 베이스로 시작됩니다. 이는 10,500토큰이 50번 반복되는 것으로, 하루에 525,000토큰을 모델이 매번 동일하게 읽는 셈입니다. 표준 가격 기준으로 똑같은 내용을 처리하는 데 계속 비용을 지불하고 있는 것입니다.
캐싱은 프로덕션 에이전트에 적용할 수 있는 가장 적은 노력으로 가장 큰 효과를 낼 수 있는 최적화입니다. 프롬프트 캐싱만으로도 캐시된 콘텐츠의 입력 토큰 비용을 90% 절감할 수 있습니다. 툴 결과 캐싱과 결합하면 품질, 정확성, 유연성을 희생하지 않고도 에이전트 총 비용을 절반으로 줄일 수 있습니다.
이 글에서는 에이전트를 위한 세 가지 캐싱 레이어 — 프롬프트 캐싱, 툴 결과 캐싱, 응답 메모이제이션 — 를 Claude API를 활용한 구현 패턴과 함께 살펴보고, 의사 결정을 돕는 명확한 비용 분석을 제공합니다.
섹션 1: 에이전트 비용 구조 분석
최적화를 시작하기 전에 토큰이 실제로 어디에 사용되는지 파악해야 합니다. 일반적인 에이전트 워크플로우를 분석해보겠습니다.
턴당 토큰 분석
표준 에이전트 아키텍처에서 모델에 대한 모든 API 호출에는 다음이 포함됩니다:
| 구성 요소 | 대략적인 토큰 수 | 반복 여부 |
|---|---|---|
| 시스템 프롬프트 | ~1,500 | 매 턴마다 |
| 툴 정의 | ~2,000 | 매 턴마다 |
| 지식 베이스 / 컨텍스트 | ~3,000 | 매 턴마다 |
| 대화 기록 | 증가 | 누적됨 |
| 툴 결과 | 평균 ~500 | 툴 호출당 |
정적 오버헤드 — 시스템 프롬프트, 툴 정의, 지식 베이스 — 는 턴당 총 약 6,500토큰이며, 매번 동일합니다.
복합 비용 문제
에이전트는 API를 한 번만 호출하지 않습니다. 반복 실행됩니다. 일반적인 15단계 에이전트 실행은 다음과 같습니다:
캐싱 미적용 시:
15단계 각각에서 전체 컨텍스트를 전송합니다. 대화 기록이 단계당 평균 약 300토큰씩 증가한다고 가정하면:
- 단계당 정적 토큰: 6,500
- 15단계 전체 정적 토큰: 97,500
- 대화 기록 토큰 (누적): ~33,750
- 툴 결과 토큰: ~7,500
- 총 입력 토큰: ~138,750
Claude Sonnet의 입력 가격인 백만 토큰당 $3 기준으로, 작업당 약 $0.42입니다. 하루 50개 작업을 실행하면 입력 토큰만으로 하루 $21 — 에 달합니다.
프롬프트 캐싱 적용 시:
캐시된 토큰은 캐시 읽기 기준으로 백만 토큰당 $0.30 (90% 할인)이 청구됩니다. 6,500개의 정적 토큰을 캐시하면:
- 15단계 캐시된 토큰 읽기: 97,500토큰 × $0.30/M = $0.029
- 캐시되지 않은 토큰은 표준 가격 유지: ~41,250 × $3/M = $0.124
- 캐시 쓰기 (첫 번째 단계): 6,500 × $3.75/M = $0.024
- 총 입력 비용: 작업당 약 $0.18
캐싱만으로 57% 절감입니다. 하루 50개 작업 기준으로 하루 $12 이상 — 대략 월 $360 — 을 최소한의 코드 변경으로 절약할 수 있습니다.
섹션 2: Claude를 활용한 프롬프트 캐싱
Claude의 프롬프트 캐싱 API는 에이전트 워크플로우에 적용할 수 있는 가장 효과적인 최적화입니다. API에 “이 프롬프트 부분은 변경되지 않았으니 캐시된 연산을 재사용하라”고 지정할 수 있습니다.
프롬프트 캐싱 작동 방식
캐싱이 활성화된 요청을 보내면 Anthropic 인프라는 다음을 수행합니다:
- 표시된 접두사의 캐시 버전이 존재하는지 확인
- 캐시 미스 시: 전체 프롬프트를 처리하고, 접두사를 캐시하며, 캐시 쓰기 비용을 청구 (표준 입력 가격 대비 25% 추가)
- 캐시 히트 시: 캐시된 연산을 재사용하고, 캐시 읽기 비용만 청구 (표준 입력 가격 대비 90% 할인)
캐시의 TTL(Time to Live — 캐시 데이터가 만료되기 전까지의 지속 시간)은 5분입니다. 캐시 히트가 발생할 때마다 TTL이 초기화되므로, 활성 에이전트는 자연스럽게 캐시를 유지합니다. 호출 사이에 5분 이상의 간격이 있는 배치 작업은 캐시 쓰기 비용이 더 자주 발생합니다.
캐시할 대상
모든 것을 캐시할 수 있거나 캐시해야 하는 것은 아닙니다. 안정적이고 반복되는 접두사를 캐시하세요:
- 시스템 프롬프트 — 실행 간에 거의 항상 동일합니다. 이것부터 캐시하세요.
- 툴 정의 — 툴 스키마는 호출 사이에 거의 변경되지 않습니다.
- 정적 지식 베이스 — 참조 문서, 가이드라인, 정책.
- 대화 접두사 — 멀티턴 대화의 경우, 변경되지 않을 이전 턴을 캐시하세요.
중요한 제약 사항:
- 캐싱은 접두사 기반 — 프롬프트의 처음부터 순서대로만 캐시할 수 있습니다. 이전 섹션을 캐시하지 않은 채로 중간 섹션만 캐시할 수 없습니다.
- Claude Sonnet과 Haiku의 경우 최소 캐시 가능 길이는 1,024토큰 (Opus의 경우 2,048)입니다.
- 단일 요청에 최대 4개의 캐시 중단점을 설정할 수 있습니다.
구현
프롬프트 캐싱을 적용한 에이전트 설정의 완전한 예시입니다:
이전 (캐싱 미적용):
import anthropic
client = anthropic.Anthropic()
SYSTEM_PROMPT = """You are a research assistant specializing in market analysis.You have access to tools for searching databases, reading files, and performingcalculations. Always cite your sources and provide confidence levels for yourfindings. [... detailed instructions totaling ~1,500 tokens ...]"""
TOOLS = [ { "name": "search_database", "description": "Search the company database for market data, competitor info, or financial records.", "input_schema": { "type": "object", "properties": { "query": {"type": "string", "description": "Search query"}, "database": {"type": "string", "enum": ["market", "competitors", "financial"]}, "limit": {"type": "integer", "description": "Max results", "default": 10} }, "required": ["query", "database"] } }, { "name": "read_file", "description": "Read the contents of a research file.", "input_schema": { "type": "object", "properties": { "file_path": {"type": "string", "description": "Path to the file"} }, "required": ["file_path"] } }, # ... more tools totaling ~2,000 tokens in definitions]
KNOWLEDGE_BASE = """## Company Policies and Guidelines[... reference material totaling ~3,000 tokens ...]"""
def run_agent(user_query
---
## 관련 기사
- [에이전트 비용 최적화: API 지출 절감을 위한 실전 가이드](/ko/blog/agent-cost-optimization-a-practical-guide-to-reducing-api-spend/)- [에이전트 오류 복구: 프로덕션 신뢰성을 위한 5가지 패턴](/ko/blog/agent-error-recovery-patterns/)- [도구 사용 패턴: 신뢰할 수 있는 에이전트-도구 인터페이스 구축](/ko/blog/agent-tool-use-patterns/)