RAG 검색 임계값을 감으로 정하면 안 되는 이유
RAG 시스템에는 검색 결과가 질문과 충분히 관련 있는지 판단하는 기준이 필요합니다. 기준이 너무 낮으면 무관한 문서를 근거로 답하고, 너무 높으면 답이 있는 질문도 “근거가 없다”고 처리합니다.
문제는 임계값에 보편적인 정답이 없다는 점입니다. 임베딩 모델, 문서 언어, 청크 길이와 문서 분야가 바뀌면 점수 분포도 달라집니다. 듀오랩스는 한국어 문서 RAG의 초기 임계값을 0.45로 정했다가 실제 질문을 측정한 뒤 0.53으로 조정했습니다.
0.45가 합리적으로 보였던 이유
코사인 유사도는 두 벡터의 방향이 얼마나 가까운지 나타냅니다. 1에 가까울수록 비슷하고, 0에 가까울수록 관련이 적다고 해석할 수 있습니다.
이 설명만 보면 0.45는 적당한 중간값처럼 보입니다. 하지만 실제 점수는 0부터 1까지 고르게 분포하지 않습니다. 임베딩 모델은 학습 방식과 언어에 따라 무관한 문장에도 비교적 높은 기본 점수를 줄 수 있습니다.
한국어 문서와 질문을 사용한 초기 측정에서는 다음과 같은 분포가 나왔습니다.
| 평가 집합 | 최상위 코사인 유사도 |
|---|---|
| 관련 질문 8종 | 0.57~0.69 |
| 무관 질문 6종 | 0.37~0.49 |
초기 임계값 0.45를 적용하면 일부 무관 질문도 검색을 통과합니다. 즉 “근거가 약하면 답하지 않는다”는 안전장치가 기대만큼 작동하지 않았습니다.
무관 질문을 반드시 넣어야 합니다
검색 품질을 평가할 때 답이 있는 질문만 사용하면 임계값을 정할 수 없습니다. 관련 질문의 점수가 높다는 사실만 알 수 있고, 무관한 질문이 어디까지 올라오는지는 알 수 없기 때문입니다.
평가 세트에는 최소한 다음 네 유형이 필요합니다.
- 문서에 표현까지 동일하게 있는 질문
- 뜻은 같지만 다른 표현을 사용한 질문
- 여러 문서를 조합해야 하는 질문
- 문서와 전혀 관계없는 질문
특히 마지막 유형은 실제 사용자 입력과 비슷하게 구성해야 합니다. 단순한 무작위 문자열보다 완성된 자연어 질문을 넣어야 임베딩 모델의 기본 유사도를 제대로 확인할 수 있습니다.
임계값은 두 분포 사이에서 정합니다
관련 질문의 최저 점수는 0.57, 무관 질문의 최고 점수는 0.49였습니다. 두 집합 사이에 여유 구간이 있었고, 임계값을 0.53으로 올렸습니다.
무관 질문 여유 구간 관련 질문
0.37 ─── 0.49 | 0.53 | 0.57 ─── 0.69
↑
임계값0.53은 다른 서비스에 그대로 복사할 값이 아닙니다. 해당 문서 집합과 임베딩 모델에서 관측된 분포를 바탕으로 선택한 값입니다.
문서가 늘거나 질문 유형이 바뀌면 분포도 달라질 수 있습니다. 운영 중에는 “근거 없음” 처리된 질문과 낮은 점수로 통과한 질문을 표본 검사해 임계값을 다시 조정해야 합니다.
최고 점수 하나만 보면 놓치는 것
최상위 코사인 점수는 간단한 차단 기준으로 유용하지만 검색 품질 전체를 설명하지는 못합니다.
- 첫 번째 결과는 관련 있지만 두 번째부터 무관할 수 있습니다.
- 키워드가 정확히 일치하는 문서가 의미 검색에서는 낮게 나올 수 있습니다.
- 같은 내용을 반복한 문서가 상위 결과를 모두 차지할 수 있습니다.
- 오래된 문서와 최신 문서가 동시에 검색될 수 있습니다.
그래서 실제 답변에 넣을 근거는 유사도뿐 아니라 키워드 순위, 문서 중복, 수정일과 공개 상태를 함께 고려해야 합니다.
오래된 문서가 정답으로 선택된 이유
검색 결과에 최신 문서와 오래된 문서가 함께 들어왔을 때 답변 모델은 자동으로 최신 문서를 알아내지 못했습니다. 모델에 전달한 근거에는 본문만 있었고 수정일이 없었기 때문입니다.
두 문서는 모델 입장에서 동일한 권위를 가진 텍스트였습니다. 프롬프트에 “최신 기준을 따르라”고 적어도 어떤 문서가 최신인지 알려주지 않으면 지시를 수행할 수 없습니다.
근거 형식을 다음처럼 바꿨습니다.
[문서 제목]
수정일: 2026-07-28
상태: 현재 기준
본문: ...그리고 값이 충돌하면 최근 문서를 우선하되 이전 기준도 구분해 설명하도록 했습니다. 이후 비교한 모델들은 최신 근거를 선택할 수 있었습니다.
점수와 메타데이터는 서로 다른 문제를 풉니다
임계값은 “이 문서가 질문과 관련 있는가”를 판단합니다. 수정일과 상태는 “관련 문서 중 무엇을 우선해야 하는가”를 판단합니다.
두 문제를 하나의 유사도 점수로 해결하려 하면 검색 결과가 불안정해집니다.
| 판단 | 필요한 정보 |
|---|---|
| 질문과 관련 있는가 | 임베딩·키워드 점수 |
| 최신 기준인가 | 수정일·문서 상태 |
| 사용자가 볼 수 있는가 | 공개 범위·권한 |
| 같은 내용을 반복하는가 | 문서 ID·청크 위치 |
좋은 RAG 검색은 높은 점수의 문장을 모으는 작업이 아니라, 서로 다른 판단 기준을 단계별로 적용하는 작업입니다.
운영 체크리스트
- 관련 질문과 무관 질문의 점수 분포를 모두 측정했나요?
- 임계값의 근거가 숫자로 기록되어 있나요?
- 임베딩 모델이나 청크 전략을 바꾼 뒤 다시 측정했나요?
- 근거에 수정일과 문서 상태가 포함되나요?
- 중복 청크가 답변 근거를 독점하지 않나요?
- 낮은 점수로 통과한 실제 질문을 정기적으로 검토하나요?
- 근거가 약할 때 추측하지 않고 답변을 중단하나요?
듀오랩스가 보는 관점
RAG의 임계값은 설정 파일에 적는 숫자 하나지만, 그 숫자의 근거는 평가 데이터에서 나와야 합니다. 감으로 정한 값은 평상시에는 멀쩡해 보이다가 무관한 질문에서 잘못된 근거를 자신 있게 제시하게 만듭니다.
검색 점수의 분포를 측정하고, 날짜와 상태 같은 메타데이터를 함께 제공하면 작은 답변 모델도 훨씬 안정적으로 동작합니다. 모델을 키우기 전에 검색기가 무엇을 넘기고 있는지부터 확인해야 합니다.
다음 글에서는 애플리케이션 코드가 정상인데 운영에서만 스트리밍과 전체 화면 UI가 깨졌던 문제를 다룹니다.
문서 RAG 구축기 시리즈
함께 읽기
- 문서 RAG를 관리자와 공개 서비스에 함께 붙인 구조문서 RAG를 처음 만들 때는 “문서를 검색하고 모델에 넣으면 된다”는 설명이 충분해 보입니다. 실제 서비스에 붙이기 시작하면 질문이 달라집니다. 문서를 언제 나누고, 어떤 기준으로 다시 색인하며, 관리자 문서와 공개 문서를 어떻게 분리하고, 답변의 근거를 사용자가 어떻게 확인하게 할 것인가가 중요해집니다.
- 27B보다 2.4B가 더 나았던 문서 RAG 모델 선택기문서 검색과 질의응답을 결합한 RAG 시스템을 만들 때 가장 먼저 떠오르는 질문은 대개 비슷합니다.
- 내부 문서를 공개 AI에 연결할 때 필요한 안전장치문서 RAG를 관리자 화면 안에서만 사용하다가 공개 웹 서비스로 확장하면 가장 먼저 바뀌어야 하는 것은 UI가 아니라 신뢰 경계입니다.
- RAG 대표 기술 한눈에 보기: 검색부터 GraphRAG까지RAG(Retrieval-Augmented Generation)는 사용자의 질문과 관련된 외부 지식을 먼저 찾고, 그 근거를 언어 모델에 전달해 답변을 생성하는 방식입니다. 모델이 학습 과정에서 기억한 정보에만 의존하지 않으므로 조직의 최신 문서나 전문 자료를 답변에 반영하고 출처를 제시하기 좋습니다.
- 사내 지식을 답변으로 바꾸는 RAG 시스템 구축기문서는 많지만 필요한 순간에 찾기 어렵고, 검색 결과를 열어 일일이 내용을 비교해야 한다면 지식은 충분히 활용되지 못합니다. 이번 글에서는 문서와 업무 데이터를 자연어로 검색하고, 근거와 함께 답을 생성하는 RAG 시스템을 작은 범위에서 시작해 운영 가능한 구조로 확장한 과정을 정리합니다.