실행 프로그램과 확장

로컬 RAG 답변이 틀릴 때: 검색·청크·모델 진단 순서

모델부터 바꾸면 원인을 놓치기 쉽습니다

답이 틀리면 검색기가 넘긴 조각을 먼저 확인하세요. PDF 글자가 빠졌는지, 청크가 조건을 갈랐는지, 필요한 문장이 검색됐는데 모델이 놓쳤는지 순서대로 찾습니다.

실행 조건과 핵심 내용
  • 답변과 함께 모델에 전달된 검색 조각을 엽니다.
  • 표나 두 단 PDF의 원문과 추출 결과를 대조합니다.
  • 청크·임베딩·필터 중 하나씩 바꾸고 같은 질문으로 재실행합니다.
  • 검색 대기·첫 토큰 대기·생성 시간을 따로 잽니다.

휴가 규정 질문에 답이 틀렸다면 검색 결과부터 엽니다

‘입사 6개월 차 직원도 여름휴가를 쓸 수 있나요?’라는 질문을 예로 들겠습니다. 답변 화면만 보고는 원인을 알 수 없으니, 먼저 검색기가 모델에 넘긴 조각을 같은 화면이나 로그에서 확인합니다. ‘입사 후 1년’이라는 조건을 담은 문장이 상위 결과에 없으면 생성 모델을 바꾸지 마세요. 답변 모델은 검색되지 않은 규정을 복원할 수 없습니다.

검색 결과가 비었거나 다른 휴가 제도를 가리킨다면 PDF 추출본부터 원문 페이지와 대조합니다. 제목과 표의 행이 섞이지 않았는지, ‘6개월 이상’ 같은 조건이 텍스트에 남았는지 확인하세요. 추출본에는 조건이 있는데 검색에서 빠지면 청크 경계, 임베딩, 문서 필터를 한 항목씩 살펴봅니다. 검색된 조각에 조건이 분명히 있는데 답이 틀렸다면 그때 모델에 전달한 프롬프트와 답변을 비교합니다.

원문과 검색 근거와 답변을 순서대로 비교하는 RAG 진단
최종 답부터 고치지 말고 정답 근거가 검색됐는지 먼저 확인합니다.

PDF 원문과 추출 텍스트를 먼저 대조합니다

휴가 규정이 표나 두 단으로 편집된 PDF라면, 페이지 한 장을 골라 눈에 보이는 문장과 추출된 텍스트를 나란히 놓으세요. ‘입사 후 6개월 이상’이 빠졌거나 표의 자격과 예외가 뒤섞였다면, 검색기는 틀린 원문을 정확히 찾고 있을 수 있습니다. PDF 추출 도구나 OCR 설정을 바꾼 다음 해당 페이지를 다시 추출해 빠진 문장이 복구됐는지 확인합니다.

문서 전체를 다시 색인하기 전에 문제 페이지의 텍스트가 고쳐졌는지 먼저 확인하세요. 수정 뒤에도 예전 결과가 나온다면 이전 추출본이나 색인을 읽는 것인지 점검합니다. 원문과 추출본이 같은 뜻을 담고 있는 것이 확인된 다음 청크와 검색 설정으로 넘어가면 됩니다.

PDF 원문에서 흐트러진 문장과 정리된 추출 결과 비교
두 단 문서와 표는 추출 순서가 뒤섞이지 않았는지 원문과 대조합니다.

근거가 검색되지 않을 때는 한 설정씩 바꿉니다

청크가 너무 짧으면 ‘입사 6개월 이상’이라는 조건과 휴가 사용 가능 여부가 서로 다른 조각으로 갈릴 수 있습니다. 너무 길면 여러 휴가 규정이 한 조각에 섞여 질문과 관계없는 문장까지 모델에 전달됩니다. 먼저 정답 근거가 들어 있어야 하는 문장을 표시해 두고, 같은 질문을 실행해 상위 검색 결과 몇 개 안에 그 문장이 들어오는지 기록하세요.

근거가 빠진다면 청크 크기만 조정하고 같은 질문을 다시 실행합니다. 그다음에도 빠지면 겹침, 임베딩, 메타데이터 필터, 재정렬기 순서로 각각 한 가지씩 바꾸세요. 한 번에 여러 설정을 바꾸면 검색 결과가 달라져도 무엇이 고쳤는지 알 수 없습니다. 검색 순위가 좋아졌다는 사실과 최종 답변이 정확해졌다는 사실도 따로 적습니다.

문서를 갱신할 때는 새 색인을 확인한 뒤 전환합니다

규정 PDF를 고쳤는데 예전 답이 계속 나온다면 파일 이름만 보지 말고 파일 해시, 색인 생성 시각, 색인 버전과 캐시 키를 확인하세요. 파일명은 그대로 둔 채 본문만 바뀌었을 수 있습니다. 새 문서가 실제 추출 텍스트에 들어왔는지, 새 색인 검색 결과에 수정한 조항이 나오는지도 질문으로 점검합니다.

운영 중인 색인을 먼저 지우고 새로 만들면 검증이 끝날 때까지 검색을 제공하지 못할 수 있습니다. 새 버전을 별도로 만들고 대표 질문으로 확인한 다음 전환하면, 새 버전에서 오류가 발견될 때 이전 색인으로 돌아갈 수 있습니다. 확인 항목은 문서 해시, 색인 버전, 대표 질문의 검색 조각과 답변입니다.

이전 색인을 보존한 채 새 색인 버전을 검토하는 장면
새 색인은 따로 검증한 뒤 전환해야 문제가 생겼을 때 바로 돌아갈 수 있습니다.

검색은 맞는데 답이 틀리면 생성 단계를 점검합니다

검색 조각에 ‘입사 후 6개월 이상이면 여름휴가를 신청할 수 있다’는 문장이 있는데 모델이 ‘1년 이상이어야 한다’고 답했다고 해 보겠습니다. 이 경우 먼저 실제 프롬프트에 그 조각이 그대로 들어갔는지 확인합니다. 들어갔다면 모델에게 근거 문장 안에서만 답하고, 조건이 없으면 모른다고 말하도록 지시합니다. 같은 근거를 넣고 재실행해도 틀리면 모델이나 양자화1를 바꿔 비교할 시점입니다.

답이 늦을 때도 구간을 나눕니다. 질문을 보낸 시각부터 검색 결과가 나올 때까지, 검색이 끝난 뒤 첫 토큰2이 나올 때까지, 첫 토큰 뒤 답변이 끝날 때까지 각각 시간을 기록하세요. 앞 구간이 길면 색인·필터를, 가운데가 길면 근거 길이와 프리필3을, 마지막이 길면 토큰 생성 속도를 확인합니다. 사용자 수가 늘 때만 느려진다면 같은 질문을 한 명과 네 명이 보냈을 때의 대기열과 메모리 사용량도 비교합니다.

용어 각주

  1. 양자화 — 모델의 수치를 더 적은 비트로 표현하는 방법입니다. 메모리 사용량과 함께 정확도나 실행 속도도 달라질 수 있으며, 영향은 형식과 구현에 따릅니다.

    본문으로 돌아가기
  2. 토큰 — 모델이 입력이나 출력을 나누어 처리하는 단위입니다. 토큰 하나가 글자 하나나 일정한 시간 길이에 해당하지는 않습니다.

    본문으로 돌아가기
  3. 프리필 — LLM이 입력 프롬프트를 읽고 각 토큰의 내부 표현을 계산하는 단계입니다. 입력이 길수록 처리할 토큰이 많아집니다.

    본문으로 돌아가기