2026년 8월 30일 일요일

LLM 서빙 캐싱 ⑥ — 시맨틱 캐시: 현실 히트율과 오탐의 비용

앞의 세 편이 다룬 캐시는 전부 입력 쪽이었다. 출력 토큰 — 청구서의 30~60% — 을 줄이는 캐시는 하나뿐이다. 호출 자체를 없애는 응답 캐시. 정확일치 캐시는 공짜이고 오탐이 없지만 잡는 게 적고, 시맨틱 캐시는 더 많이 잡지만 틀린 답을 돌려줄 수 있다. 이 글은 벤더의 "히트율 95%"가 무슨 뜻인지, 국내에서 실제로 돌아간 숫자는 무엇인지, 오탐을 어떻게 다루는지를 정리한다.

같은 질문에 두 번 돈 내지 않기 — 정확일치 캐시부터

키는 정규화한 프롬프트 + 모델 + temperature + 도구 + 프롬프트 버전의 해시. MeanCache는 LLM 서비스 질의의 약 31%가 반복이라고 보고했고, 한 10만 건 샘플에서는 18%가 정확 중복, 47%가 유사, 35%가 신규였다. FAQ 봇이나 분류 작업(temperature 0)이라면 이것만으로 15~30%가 바로 빠진다. Helicone은 해시 키 + 버킷(temperature>0일 때 응답 여러 개 저장), Portkey의 simple 모드, Cloudflare AI Gateway가 이 계층이다.

시맨틱 캐시의 구조와 진짜 히트율

쿼리를 임베딩 → 벡터 검색 → 임계값 이상이면 저장된 응답 반환. 절감액 = 출력 토큰 비용 × 히트율, 임베딩 비용은 토큰당 LLM의 1/1,000이지만 매 요청 발생한다. 벤더가 말하는 "95%"는 히트의 정확도이지 히트 빈도가 아니다. 프로덕션 데이터의 현실 히트율은 FAQ·고객지원 40~60%, 분류 50~70%, 사내 KB 30~45%, 문서 RAG 15~25%, 자유 대화 10~20%, 코드·에이전트 5~15%. Portkey는 기업 RAG 반복률 약 20%(정확도 99%)라고 했다. 인프라는 월 $50~200 — 절감액의 5% 미만이지만, 히트율 10% 미만이거나 월 지출 $1~2K 미만이면 운영 비용이 절감을 넘는다.

당근 사례: 임계값 0.65, 히트 25%, 연 2.16억 원

국내 검증된 유일한 프로덕션 숫자는 당근 채팅팀의 2025년 기록이다. AI 메시지 추천의 LLM 비용이 연 8~9억 원. 발화 1,000건을 text-embedding-3-small로 임베딩해 PCA로 50차원으로 줄이고 DBSCAN으로 군집화하니 60% 이상이 노이즈, 13개 군집·약 260개 대표 문장이 남았다. 이 대표 문장만 캐시로 두고 인프로세스 벡터 스토어(chromem-go, 1,000벡터 ≈ 6MB, 검색 2ms)를 붙였다. 코사인 임계값 0.65에서 오프라인 히트 29.55%, 프로덕션 약 25% → 연 약 2.16억 원. 병목은 임베딩 API 호출(400~800ms)이었고, 맥락에 안 맞는 추천이 나와 메타데이터 필터링을 계획했다. 낮은 임계값이 통한 이유는 원시 이력이 아니라 큐레이션된 대표 문장을 캐시했기 때문이다 — SCALM도 같은 접근으로 GPTCache 대비 히트 +63%, 토큰 −77%.

"내일 날씨"와 "어제 날씨": 오탐을 다루는 다섯 가지 방법

임계값은 상수가 아니다. Portkey의 스윕에서 0.99 → 히트 23.5%/정확도 92.1%, 0.95 → 56.0%/92.6%, 0.90 → 74.5%/92.3%, 0.80 → 87.6%/91.8%. 한 금융 봇은 0.88에서 "계좌 해지"를 "결제 취소"에 매칭했고, 0.7로 내린 사례는 오탐 ~99%였다. 오탐이 조정 후에도 3~5%를 넘으면 임계값이 아니라 모델 문제다.

  • 카테고리별 임계값: FAQ 0.94, 상품 0.88, 지원 0.92, 거래 0.97처럼 유형마다 다르게. 거래·가격·재고는 바이패스.
  • 의도+슬롯 정규화 키: 2026년 연구에서 GPTCache의 캐시 키 일관성은 37.9%, SetFit 의도 분류기(2ms)로 {의도, 슬롯}을 키로 쓰면 91.1%. "내일/어제 서울 날씨"는 슬롯이 다르니 자연히 분리된다 — 의도 분류 시리즈와 이어지는 지점이다.
  • 오류 예산 기반 임계값: vCache(ICLR 2026)는 캐시 항목마다 임계값을 온라인 학습해 정적 임계값 대비 히트 12.5배, 오류 26배 감소.
  • 비동기 LLM 판정·캐시 전용 임베딩: Redis LangCache의 20M 파라미터 임베더는 "질문-질문 동치"만 학습했다. 평가는 KorSTS가 아니라 목표 히트율에서의 정밀도(P-CHR)로 — PR-AUC 1위 모델이 고정 임계값에서는 꼴찌일 수 있다.
  • 스코프와 버전: 키에 사용자·테넌트·프롬프트 버전·임베딩 모델·KB 버전. 공유 시맨틱 캐시는 키 충돌 공격(적대적 접미사로 주입 성공 82%, 에이전트 도구 하이재킹 90.6%)의 대상이다.

한국어 임베딩은 bge-m3·KURE-v1(자체 호스팅, MTEB-ko 검색 0.52 vs OpenAI 3-large 0.45)·ko-sroberta·Upstage 중 어느 것도 캐시 동치를 학습한 모델은 없으니, 로그에서 뽑은 유사-비동치 쌍 100개 이상으로 직접 재야 한다. 시작 임계값은 0.92 + 여유 0.02, 응답 캐시는 0.98 이상, TTL은 휘발성 15~30분·FAQ 수일. 다음 글은 다시 서버 쪽으로 돌아가 KV 캐시를 HBM 밖으로 내보내는 이야기다.

— LLM 서빙 캐싱 시리즈 ⑥ / 다음 글: KV 압축·오프로딩·클러스터 공유 — HBM 밖으로

댓글 없음:

댓글 쓰기

국정원의 댓글 공작을 지탄합니다.

RAG 종류 총정리 ⑬ (완결) — 한국어 조건과 결정 트리

열두 편을 한 장으로 접는다. 먼저 한국어로 서비스할 때만 적용되는 조건을 모으고, 그다음 "우리는 무엇부터 하나"를 결정 트리로 정리한다. 한국어 RAG의 다섯 가지 조건 임베딩 기본값을 의심하되, 갈아타는 이득은 제한적이...