PromptCache Part I: 같은 LLM 답변에 대해 두 번 지불하지 않기
Source: Dev.to

LLM 시스템에서 보이지 않는 비용 누수
프로덕션에서 LLM을 운영하고 있다면 거의 확실히 다음과 같은 비용을 지불하고 있습니다:
- “비밀번호를 어떻게 초기화하나요?”
- “비밀번호를 잊어버렸어요, 어떻게 해야 하나요?”
- “계정 비밀번호를 초기화하는 단계는?”
- “비밀번호 변경을 도와줘”
다른 문자열이지만 의도는 동일하고, 답변도 동일하지만 청구되는 요청은 다릅니다.
정확히 일치하는 문자열만 캐시하는 전통적인 캐시는 도움이 되지 않습니다:
"How do I reset my password?" != "Steps to reset account password?"
의미는 변하지 않았습니다 – 여기서 시맨틱 캐시가 등장합니다.
이론: 왜 이렇게 작동하는가
LLM은 텍스트를 벡터(임베딩)로 변환합니다. 의미가 비슷한 두 문장은 고차원 공간에서 서로 가깝게 위치한 벡터를 생성합니다.
예시(단순화):
"Reset my password"
↓
[0.12, -0.87, 0.44, ...]
"How do I change my password?"
↓
[0.11, -0.89, 0.41, ...]
벡터가 매우 가깝기 때문에 우리는 다음과 같이 물을 수 있습니다:
“이전에 시맨틱하게 유사한 것을 본 적이 있나요?”
유사도가 충분히 높다면 캐시된 답변을 재사용합니다 – 이것이 시맨틱 캐시입니다.
실제 적용 방식
요청이 들어오면:
User Prompt
↓
Embedding
↓
Vector search in Redis
↓
High similarity?
↓
Yes → Return cached response
No → Call LLM and store result
LLM 앞에 시맨틱 메모이제이션 레이어를 추가하는 것입니다.
실제 결과
반복적인 문의가 많은 지원 업무에서:
- 약 60 % 캐시 적중률
- 약 50 % 토큰 사용량 감소
- 약 40 % API 비용 절감
결과는 워크로드 밀도와 반복 패턴에 따라 달라지지만, 구조화된 환경에서는 즉각적인 효과를 볼 수 있습니다.
구현 예시
Redis 벡터 검색을 이용한 간단한 예시:
from promptcache import SemanticCache
from promptcache.backends.redis_vector import RedisVectorBackend
from promptcache.embedders.openai import OpenAIEmbedder
from promptcache.types import CacheMeta
embedder = OpenAIEmbedder(model="text-embedding-3-small")
backend = RedisVectorBackend(
url="redis://localhost:6379/0",
dim=embedder.dim,
)
cache = SemanticCache(
backend=backend,
embedder=embedder,
namespace="support-bot",
threshold=0.92,
)
meta = CacheMeta(
model="gpt-4.1-mini",
system_prompt="You are a helpful support assistant.",
)
result = cache.get_or_set(
prompt="How can I change my password?",
llm_call=my_llm_call,
extract_text=lambda r: r.output_text,
meta=meta,
)
print(result.cache_hit)
그게 전부입니다 – 별도의 오케스트레이션 프레임워크가 필요하지 않습니다.
GitHub:
PyPI:
설치
pip install promptcache-ai
언제 효과적인가
시맨틱 캐시는 다음 상황에서 빛을 발합니다:
- 프롬프트가 반복적일 때
- 온도가 낮을 때
- 답변이 안정적일 때
- 트래픽이 많을 때
다음 경우에는 효과가 적습니다:
- 매우 개인화된 프롬프트
- 창의적 글쓰기
- 빠르게 변하는 컨텍스트
이러한 경우에는 새로움이 반복을 압도하므로 캐시의 효과가 감소합니다.
더 큰 통찰
대부분의 LLM 시스템은 근본적으로 무상태(stateless)이며, 의미 있는 변화가 없더라도 매번 답을 재계산합니다. 시맨틱 캐시는 선택적 메모리를 도입해, 경제적으로 정당화될 때만 지능을 재사용합니다.
프롬프트를 끝없이 조정하기보다 인프라를 최적화하는 것이 더 현명할 때가 있습니다. 프로덕션에서 LLM 시스템을 구축한다면, 시맨틱 캐시는 추가할 수 있는 가장 높은 레버리지 최적화 중 하나입니다.
지능은 비싸다.
메모리는 저렴하다.
두 가지를 현명하게 활용하라.