캐시는 무조건 이득이 아닙니다. 읽기는 싸지만 쓰기가 더 비쌉니다. 재사용이 적으면 안 거는 편이 낫습니다.
프롬프트 길이나 모델과 관계없이, 손익분기점은 재사용 횟수 하나로 결정됩니다. 배수가 모든 모델에서 동일하기 때문입니다.
| 캐시 유지 시간 | 쓰기 배수 | 읽기 배수 | 이득이 되는 시점 |
|---|---|---|---|
| 5분 (기본) | 1.25배 | 0.1배 | 1회 재사용부터 |
| 1시간 | 2배 | 0.1배 | 2회 재사용부터 |
재사용 0회, 즉 저장만 하고 안 읽으면 5분 캐시는 25%, 1시간 캐시는 100% 더 냅니다. 캐시를 걸어두고 트래픽이 안 오는 시간대가 있다면 그만큼 손해입니다.
5분 캐시가 더 싸지만, 5분 안에 다시 안 오면 만료됩니다. 만료되면 다음 요청은 다시 쓰기(1.25배)로 시작합니다. 쓰기만 반복하는 최악의 패턴이 됩니다.
| 재사용 간격 | 권장 |
|---|---|
| 수초~수분 | 5분 캐시. 챗봇처럼 대화가 이어지는 경우 |
| 5분~1시간 | 1시간 캐시. 쓰기가 2배지만 만료로 재작성하는 것보다 쌈 |
| 1시간 초과 | 캐시를 걸지 마세요. 매번 만료됩니다 |
| 배치 처리 | 1시간 캐시. 배치는 5분 넘게 걸리는 일이 흔합니다 |
덜 알려진 함정입니다. 프롬프트가 일정 길이 미만이면
cache_control을 넣어도 캐시가 걸리지 않습니다.
더 나쁜 건 에러가 나지 않는다는 점입니다. 그냥 조용히
캐시 없이 처리됩니다.
기준이 모델마다 다르고, 세대가 올라간다고 낮아지지도 않습니다.
| 모델 | 캐시 최소 토큰 |
|---|
usage.cache_read_input_tokens를 보세요.
같은 프롬프트로 두 번 이상 호출했는데 계속 0이면
캐시가 안 걸리고 있는 것입니다.
캐시는 앞부분이 완전히 같아야 맞습니다. 1바이트라도 다르면 그 뒤 전체가 무효가 됩니다. 아래는 실무에서 가장 많이 걸리는 것들입니다.
datetime.now()를 넣으면 매 요청마다 달라집니다고치는 방향은 하나입니다. 변하지 않는 것을 앞에, 매번 달라지는 것을 뒤에. 날짜나 사용자 정보는 시스템 프롬프트가 아니라 메시지 뒤쪽으로 옮기세요.
프롬프트 캐시 할인과 Batch API 할인은 중복 적용됩니다. 다만 배치에서는 요청이 순서 없이 처리되어 캐시 적중이 보장되지 않고, 공식 문서 기준 실제 적중률은 30~98%로 갈립니다.
의견 · 불편사항
계산이 실제와 다르거나 빠진 조건이 있으면 남겨 주세요. 로그인 없이 익명으로 작성할 수 있습니다.