비슷한 질문이 같은 답을 뜻하지 않는 이유: 의미 캐시의 적중 경계
의미 캐시가 비슷한 질문에 과거 답변을 재사용할 때 생기는 오류를 살펴보고, 출처 버전과 권한·유효기간까지 묶어 판정하는 AKM 캐시 계약을 제안한다.

이 표지는 의미 캐시의 적중과 보류 경계를 표현하기 위해 GPT Image 2로 생성한 개념 이미지이며, 실제 서비스 화면이나 실험 결과를 재현한 것이 아니다.
월요일 아침, 사내 지식 도우미에 "이번 분기 출장비 한도는 얼마인가"라는 질문이 들어왔다고 하자. 전날 같은 뜻의 질문에 답한 기록이 있다. 시스템은 새로 검색하고 모델을 호출하는 대신 저장된 답을 꺼낼 수 있다. 응답은 빨라지고 호출 비용도 줄어든다. 문장이 조금 달라도 임베딩 거리가 가깝다는 이유로 답을 재사용하는 방식이 의미 캐시(semantic cache)다.
문제는 질문이 비슷하다는 사실만으로 답의 재사용 가능성이 결정되지 않는다는 데 있다. 어제와 오늘 사이에 규정이 바뀌었을 수 있다. 질문한 사람의 소속과 권한이 다를 수도 있다. "출장비 한도"와 "해외 출장비 한도"는 임베딩 공간에서 가깝지만 적용 규칙은 다를 수 있다. 캐시가 틀리면 모델이 새로 만든 오류보다 더 다루기 어렵다. 빠르고 일관된 답이 반복되기 때문에 사용자는 오래된 근거가 재생되고 있다는 사실을 알아차리기 어렵다.
적중률부터 보면 이 위험이 잘 보이지 않는다. 먼저 물어야 할 것은 얼마나 자주 재사용했는지가 아니라, 어떤 조건에서 과거 답을 현재 답으로 인정했는가다.
의미 캐시는 계산이 아니라 답을 건너뛴다
캐시라는 말은 서로 다른 기술을 한데 묶는다. OpenAI의 현재 Prompt Caching 문서는 동일한 렌더링 prefix가 반복될 때 이전 요청에서 계산한 key-value 상태를 재사용한다고 설명한다.[1] 앞부분의 토큰이 같으면 그 구간의 계산을 다시 하지 않아도 되지만, 새 입력을 처리하고 새 응답을 생성하는 과정은 남는다. 이는 계산 재사용이다.
의미 캐시는 한 단계 더 나아간다. 새 질문을 임베딩으로 바꾸고 저장된 질문 가운데 가까운 항목을 찾은 뒤, 임계값을 넘으면 과거 응답 자체를 반환한다. RedisVL의 공개 가이드도 SemanticCache가 의미상 비슷한 prompt에 저장된 LLM 응답을 돌려준다고 설명하며, 거리 임계값과 TTL, 항목별 삭제, tag와 filter 기능을 제공한다.[2] 이 경우 캐시 적중은 모델 호출을 줄이는 대신 새로운 판정 하나를 만든다. "이 두 질문은 같은 답을 공유해도 되는가"를 임베딩 거리로 결정하는 판정이다.
두 캐시는 실패 방식도 다르다. prefix 캐시가 빗나가면 대체로 계산을 다시 해서 느려진다. 의미 캐시가 잘못 맞으면 다른 질문의 답을 그대로 반환한다. 성능 최적화가 곧 답변 정책이 되는 지점이다.
하나의 유사도 임계값은 모든 질문을 설명하지 못한다
2025년 2월 처음 공개되고 2026년 2월 v5로 개정된 ICLR 2026 논문 《vCache: Verified Semantic Prompt Caching》은 고정된 유사도 임계값을 시험한다.[3] 기존 의미 캐시는 보통 모든 항목에 같은 threshold를 적용한다. 임베딩 유사도가 기준보다 높으면 적중, 낮으면 미스로 처리한다. 그러나 유사도와 답변 동등성의 관계는 질문마다 다르다.
"캐나다의 수도는 어디인가"와 "캐나다 수도를 알려 달라"는 표현이 달라도 답은 같다. 반면 "출장비 한도"와 "임원 출장비 한도"는 단어 대부분을 공유하지만 정책 답변은 달라질 수 있다. 유사도 점수 하나가 이 차이를 자동으로 보존하지 않는다. vCache 연구진은 하나의 고정 threshold가 명시적인 정확성 보장을 주지 못하고 예상 밖의 오류율을 만들 수 있다고 지적한다. 연구는 각 캐시 항목에 맞는 threshold를 online learning으로 추정하고, 사용자가 정한 최대 오류율을 지키는 방향을 제안했다.
논문은 실험에서 고정 threshold와 fine-tuned embedding 기준선보다 cache hit가 최대 12.5배 높고 오류율이 최대 26배 낮은 조건을 보고했다. 이 수치는 특정 benchmark와 비교 설정에서 나온 결과다. 모든 업무에서 같은 개선을 약속하지 않는다. 더 중요한 결과는 threshold를 높이거나 embedding model을 바꾸는 것만으로 정확성 문제가 끝나지 않는다는 점이다. 어떤 질문을 같은 답으로 묶어도 되는지 관측하고, 틀린 적중을 별도 오류로 측정해야 한다.
2024년 처음 공개되고 IEEE IPDPS 2025에 실린 《MeanCache》도 문맥 없는 문장 유사도만으로는 부족하다는 문제에서 출발한다.[4] 이 연구는 사용자 기기 쪽의 local cache, federated learning 기반 유사도 모델, 대화의 context chain을 결합했다. 같은 "그 비용은 얼마인가"라는 문장도 앞선 대화가 항공권인지 모델 API인지에 따라 답이 달라진다. MeanCache의 benchmark에서는 기존 방식보다 F-score와 precision이 나아졌다. 이는 여러 구성 요소를 결합한 전체 시스템의 비교 결과이며, 임계값 조정만의 효과를 뜻하지는 않는다.
오래된 정답과 권한 밖의 정답도 캐시에서는 적중할 수 있다
유사도 판정이 정확해도 답이 틀릴 수 있다. 저장 당시에는 맞았던 답이 현재는 낡았을 수 있기 때문이다. 의미 캐시 항목에는 질문과 답만 있는 것이 아니다. 답을 만들 때 읽은 문서, 문서의 revision, 적용한 정책, 사용한 prompt와 model, 답변 시각이 함께 숨어 있다. 이 의존성 가운데 하나가 달라지면 질문 문자열이 같아도 답을 다시 만들어야 할 수 있다.
TTL은 오래된 항목을 일정 시간이 지나면 버리는 데 유용하다. 그러나 "24시간"이라는 숫자는 규정의 변경 시점을 알지 못한다. 중요한 문서가 10분 전에 개정됐다면 남은 23시간 50분 동안 낡은 답이 계속 적중할 수 있다. 반대로 변하지 않은 공개 용어 설명을 매일 폐기하면 비용만 늘어난다. 시간 기반 만료와 근거 기반 무효화는 다른 장치다.
권한도 같은 문제를 만든다. 한 사용자가 볼 수 있는 인사 규정으로 만든 답을 다른 사용자의 비슷한 질문에 반환하면, 답의 문장이 일반적으로 옳더라도 접근 통제는 실패한다. RedisVL 문서가 multi-user scenario를 위해 tag와 filter를 별도 기능으로 두는 이유를 여기서 읽을 수 있다.[2] 의미적 유사성과 접근 가능성은 하나의 점수로 합치면 안 된다. 검색 단계에서 읽지 못할 문서는 캐시 적중 단계에서도 답의 근거가 될 수 없어야 한다.
캐시 항목 삭제도 단순한 저장소 관리가 아니다. 원문이 철회되거나 정정되었을 때 그 문서에서 파생된 답을 찾아 무효화할 수 있어야 한다. 질문별 key만 저장하면 어느 답이 어떤 문서에 의존했는지 역으로 찾기 어렵다. 빠른 재사용을 위해 만든 저장소가 오래된 주장을 붙들어 두는 두 번째 지식베이스가 된다.
AKM에서는 답변보다 적중 계약을 먼저 저장한다
AKM에 의미 캐시를 붙인다면 항목의 최소 단위를 질문 → 답변으로 두지 않는 편이 낫다. 다음 요소를 하나의 cache receipt로 묶을 수 있다.
| 필드 | 기록하는 이유 |
|---|---|
| query class와 normalized intent | 같은 표현이 아니라 같은 업무 질문인지 구분한다. |
| requester scope | 사용자·팀·공개 범위가 달라질 때 교차 적중을 막는다. |
| source IDs와 revision hashes | 근거 문서가 바뀌면 관련 답을 찾아 무효화한다. |
| policy / prompt / model version | 답변 규칙이나 생성 조건이 달라진 경우 재평가한다. |
| claim-evidence links | 답의 각 핵심 주장이 어느 근거에 기대는지 남긴다. |
| created_at와 valid_until | 시간에 따른 검토 경계를 명시한다. |
| evaluation status | 검증 전 후보와 승인된 재사용 항목을 구분한다. |
적중 판정도 두 단계로 나누는 편이 안전하다. 첫 단계에서는 embedding search로 비슷한 질문 후보를 빠르게 찾는다. 두 번째 단계에서는 권한 범위, source revision, 정책 version, 유효기간을 exact check한다. 하나라도 맞지 않으면 cache miss로 보내 검색과 생성을 다시 수행한다. 의미 검색은 후보를 줄이고, 재사용 권한은 명시적 의존성 검사가 결정한다.
이 구조에서는 문서를 기준으로 캐시를 무효화할 수 있다. 정책 문서 revision이 바뀌면 그 hash를 참조한 cache receipt를 찾는다. 단순한 표현 변경이라면 검토 후 다시 승인할 수 있고, 금액이나 적용 대상이 달라졌다면 재생성한다. 모든 캐시를 지우는 방식보다 범위가 좁고, TTL만 기다리는 방식보다 빠르다.
또 하나의 선택지는 답변 전체보다 중간 산출물을 캐시하는 것이다. 검색 결과의 문서 ID 집합, 검증된 인용 후보, 공개 문서의 요약처럼 재검토 가능한 단위를 저장하면 마지막 답을 현재 질문과 권한에 맞춰 다시 생성할 수 있다. 비용 절감은 줄 수 있지만 과거 문장을 현재 사실처럼 재생하는 위험도 낮아진다. 어떤 층을 캐시할지는 latency만 아니라 오류가 발견됐을 때 고칠 수 있는 범위로 정해야 한다.
적중률과 정확도를 같은 그래프에 그리지 않는다
의미 캐시를 시험할 때는 세 종류의 결과를 분리해야 한다. 정말 같은 답을 공유할 수 있어 적중한 경우, 재사용할 수 있었지만 미스로 처리한 경우, 다른 답이 필요한데 적중한 경우다. 마지막 false hit는 단순한 성능 손실이 아니라 잘못된 답의 전달이다. 규정, 인사, 계약, 재무처럼 변경과 권한이 중요한 업무에서는 false hit 비용이 cache miss 비용보다 훨씬 크다.
평가 자료도 실제 업무 경계를 포함해야 한다. 같은 뜻의 바꿔 쓰기만 모으면 캐시는 쉽게 좋아 보인다. 숫자 하나, 날짜 하나, 지역 하나, 사용자 role 하나가 달라져 답이 바뀌는 hard negative를 넣어야 한다. 문서 revision 전후의 같은 질문, 앞선 대화가 다른 짧은 후속 질문, 공개 사용자와 내부 사용자의 동일한 문장을 함께 시험해야 한다. threshold는 전체 평균이 아니라 업무 등급과 질문군별로 교정할 수 있다.
vCache가 제안한 오류율 경계는 의미적 오적중을 다루는 중요한 진전이지만, 조직의 문서 변경이나 권한 정책까지 자동으로 해결하지는 않는다. MeanCache의 local·context-aware 접근도 사용자 문맥을 더 잘 보존하지만, local cache에 저장할 수 있는 데이터와 삭제 정책은 별도 검토가 필요하다. RedisVL이 제공하는 TTL과 filter는 구현 도구이며, 무엇을 언제 무효화할지는 업무 쪽에서 정해야 한다.
반복 질문이 많은 곳에서는 의미 캐시가 응답 시간과 모델 호출을 줄인다. 다만 cache hit를 "비슷한 문장을 찾았다"는 사건으로 정의하면 속도가 정확성을 대신한다. AKM에서 적중은 질문 유사도뿐 아니라 근거의 현재성, 접근 권한, 정책 version까지 맞았다는 판정이어야 한다. 조건이 하나라도 어긋나면 다시 읽는 편이 낡은 정답을 빠르게 돌려주는 것보다 낫다.
참고 자료
[1] OpenAI, 《Prompt caching》, 2026년 10월 4일 확인.
[2] Redis, 《Cache LLM Responses》, 2026년 10월 1일 수정본.
[3] Luis Gaspar Schroeder 외, 《vCache: Verified Semantic Prompt Caching》, arXiv v5, 2026년 2월 21일 개정, ICLR 2026 채택.
[4] Waris Gill 외, 《MeanCache: User-Centric Semantic Caching for LLM Web Services》, arXiv v4, 2025년 3월 7일 개정, IEEE IPDPS 2025.