P7-5.1 검색, 근거, 답변 흐름 실습¶
Section ID: P7-5.1 Version: v2026.07.22
RAG(retrieval-augmented generation) 프로젝트를 처음 만들면 종종 답변이 그럴듯한가만 먼저 보게 됩니다. 하지만 실제로는 답변보다 앞에 어떤 검색 후보들이 경쟁했는가, 그중 무엇을 근거로 채택했는가, 왜 다른 후보는 탈락했는가가 먼저 남아 있어야 다음 검증이 가능합니다.
RAG를 질문 -> 검색 후보 비교 -> 선택 근거 -> 답변 구성 -> 출처 기록 흐름으로 다시 세웁니다. 벡터 데이터베이스나 고급 reranker 구현을 늘어놓기보다, retrieval 감각을 실제 프로젝트 기록으로 바꾸는 데 있습니다.
검색 후보에서 답변까지¶
- RAG 프로젝트의 첫 실행 기록에는 무엇이 남아 있어야 하는가?
- 검색 후보와 선택 근거를 답변보다 먼저 적어야 하는 이유는 무엇인가?
- 높은 점수를 받은 후보와 실제로 채택할 근거를 왜 분리해야 하는가?
질문 -> 검색 후보 -> 선택 근거 -> 답변 구조를 프로젝트 문서로 어떻게 시작할지 닫는 데 집중합니다. 즉, 검색 실패와 답변 실패를 본격적으로 나누기 전에, 먼저 후보 경쟁과 근거 선택 자체가 눈에 보이는 실행 기록을 만드는 기준을 잡습니다.
판단 기준¶
- RAG 프로젝트를
질문 -> 검색 후보 비교 -> 선택 근거 -> 답변 구성흐름으로 설명할 수 있습니다. - 높은 검색 점수와 직접적인 답 근거가 같은 것이 아니라는 점을 말할 수 있습니다.
검색 후보 표,선택 근거 표,답변 비교를 같은 실행 기록으로 남길 수 있습니다.
왜 검색 후보 기록이 먼저인가¶
RAG 프로젝트에서 답변만 남기면 세 가지가 바로 사라집니다.
- 어떤 문서가 경쟁했는가
- 왜 어떤 문서는 뽑혔고 어떤 문서는 탈락했는가
- 답변이 정말 선택한 근거 안에서만 쓰였는가
그래서 RAG 프로젝트 입구에서는 최소 다음 네 칸을 함께 두는 편이 좋습니다.
| 기록 항목 | 왜 필요한가 |
|---|---|
| 질문 | 무엇에 답하려는지 고정하기 위해 |
| 검색 후보 목록 | 어떤 문서들이 실제로 경쟁했는지 다시 보기 위해 |
| 선택 근거 | 답변이 어디서 출발했는지 고정하기 위해 |
| 답변 비교 | 근거를 좁혀 쓴 답과 대충 쓴 답의 차이를 보기 위해 |
이 네 칸이 있어야 검색 실패, 답변 과장, 문서 범위 밖 질문을 서로 다른 상태로 분리해 읽을 수 있습니다.
예를 들어 상위 후보 표를 만들기 전에는 문서-4처럼 직접 답하는 후보와 문서-9처럼 기록이라는 단어만 겹치는 near miss 후보가 같은 수준으로 보일 수 있습니다. 빠르게는 점수가 높은 순서대로 답변에 쓰면 된다고 생각하기 쉽습니다. 하지만 더 안전한 다음 판단은 무엇이 질문에 직접 답하는가, 무엇은 주변 설명인가, 무엇은 탈락 이유까지 남겨야 하는 near miss인가를 먼저 나누는 것입니다. 그래야 답변이 그럴듯한 문장 모음이 아니라, 실제 선택 근거 안에서 닫힌 답변이 됩니다.
프로젝트 질문 설정¶
프로젝트는 RAG 프로젝트에서 왜 검색 후보와 선택 근거를 답변보다 먼저 기록해야 하는가?라는 질문에서 시작합니다. 이 질문은 단순 정의 확인이 아니라, 비슷해 보이는 후보들이 여러 개 있을 때 무엇을 실제 근거로 채택해야 하는지 보여 주기에 적합합니다.
프로젝트 흐름¶
flowchart TD
A["질문"]
B["상위 검색 후보 계산"]
C["후보별 채택 또는 탈락 이유 기록"]
D["선택 근거만으로 답변 구성"]
E["출처와 함께 답변 보존"]
A --> B --> C --> D --> E
이 흐름에서 중요한 점은 검색이 답변 앞에 있다는 사실보다 한 걸음 더 나아간 것입니다. 실제 프로젝트 기록에서는 검색 후보 계산과 채택 또는 탈락 이유 기록이 분리되어야 합니다. 그래야 높은 점수를 받았지만 질문에 직접 답하지 않는 문장을 다시 걸러낼 수 있습니다.
flowchart TD
A["상위 후보 여러 개 등장"]
B["빠른 판단: 점수 높은 순서대로 답변에 사용"]
C["직접 답 근거 / 주변 설명 / near miss로 분리"]
D["채택 후보와 탈락 이유 기록"]
E["선택 근거 안에서만 답변 구성"]
A --> B
A --> C
C --> D
D --> E
입력 파일¶
- 문서 조각 파일:
p7-5-rag-documents.csv· CSV 미리보기 - 한 행의 의미:
검색 가능한 문서 조각 하나 - 핵심 열:
doc_id,text
이번 실습은 짧은 3문서 예제가 아니라, 질문과 비슷한 단어를 공유하지만 역할이 다른 10개 문서 조각을 함께 둡니다. 그중 일부는 직접 답 근거이고, 일부는 주변 설명이고, 일부는 기록이라는 단어는 겹치지만 RAG 답변 근거로는 부적절한 near miss입니다.
| 문서 식별자 | 이번 질문에서의 역할 |
|---|---|
| 문서-1 | RAG의 기본 구조 설명 |
| 문서-2 | 왜 retrieval이 먼저 필요한지 설명 |
| 문서-3 | 높은 점수 후보가 곧바로 답 근거는 아니라는 설명 |
| 문서-4 | 검색 후보, 선택 근거, 최종 답변을 분리 기록해야 한다는 직접 근거 |
| 문서-5 | chunking의 장단점 설명 |
| 문서-6 | reranking의 역할 설명 |
| 문서-7 | 탈락한 상위 후보와 탈락 이유까지 남겨야 한다는 설명 |
| 문서-8 | 최종 답변만 저장하면 실패 위치를 구분하기 어렵다는 설명 |
| 문서-9 | 실행 기록은 있어도 RAG 근거 품질을 설명하지 못하는 near miss |
| 문서-10 | 출처 표시는 선택 근거 문장까지 남겨야 한다는 설명 |
즉, 이 문서 집합은 직접 답 근거, 주변 설명, 헷갈리기 쉬운 탈락 후보가 모두 섞인 상태로 설계되어 있습니다.
실행 기록 기준¶
- 상위 검색 후보에서 직접 근거, 주변 설명, near miss를 서로 다른 표시로 나눕니다.
- 선택 근거로 채택한 문서와 탈락시킨 상위 후보를 따로 적습니다.
- 탈락 후보마다 왜 답변 근거로 쓰지 않았는지 한 줄로 남깁니다.
- top-1 답변과 선택 근거 제한 답변을 비교해, 어느 쪽이 더 검증 가능한지 설명합니다.
Python 예제¶
예제는 단순 top-1 문서 선택이 아니라 상위 후보 경쟁 -> 채택 근거 -> 탈락 이유 -> 답변 비교를 한 번에 남기는 것입니다.
- 문제 상황: 질문 하나에 대해 비슷해 보이는 문서 후보가 여러 개 있다.
- 입력: 질문 1개, 문서 조각 10개
- 기대 출력:
- 상위 검색 후보 표
- 선택한 근거 표
- 탈락한 상위 후보와 탈락 이유
- top-1만 보고 쓴 답변과 선택 근거를 좁혀 쓴 답변 비교
- 확인할 개념:
- 높은 검색 점수와 직접적인 답 근거는 다를 수 있다
- 탈락 이유를 남겨야 다음 검색 실험이 쉬워진다
- 답변은 선택 근거 안에서만 구성해야 한다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 | |
실행 결과 예시는 다음과 같습니다.
결과를 어떻게 읽는가¶
실행 결과에서는 문서-4가 가장 높은 점수를 받았다는 사실보다, 문서-7, 문서-9, 문서-1이 왜 함께 상위에 있었고 왜 최종 근거에서는 빠졌는가가 더 중요합니다.
| 구간 | 이번 실습에서 읽어야 할 점 | 왜 중요한가 |
|---|---|---|
| 상위 검색 후보 | 직접 근거, 주변 설명, near miss가 함께 올라왔다 | 실제 RAG에서는 비슷해 보이는 후보가 여러 개 경쟁하기 때문이다 |
| 선택 근거 | 문서-4, 문서-3, 문서-8만 최종 근거로 채택했다 | 점수가 높아도 답을 직접 지지하지 않으면 빼야 하기 때문이다 |
| 탈락 후보 | 문서-7, 문서-9, 문서-1은 상위권이었지만 답 근거에서는 제외됐다 | 탈락 이유를 남겨야 다음 검색 실험에서 후보 순서 변화와 선택 기준 변화를 비교할 수 있다 |
| 답변 비교 | top-1 답보다 선택 근거를 좁혀 쓴 답이 더 검증 가능하다 | 답변이 어느 문장 범위 안에 있었는지 나중에 다시 확인할 수 있기 때문이다 |
즉, RAG 프로젝트의 최소 성공 기준은 답이 나왔다가 아니라 후보 경쟁과 선택 근거가 같이 남았다입니다.
결과 해석 기준¶
| 관찰 | 읽어야 할 뜻 |
|---|---|
문서-4가 가장 높은 점수를 받는다 | 질문에 직접 답하는 근거가 상위에 있다 |
문서-7도 상위권에 남는다 | 도움이 되는 주변 설명과 직접 근거를 구분해야 한다 |
문서-9가 near miss로 올라온다 | 단어가 겹쳐도 현재 질문의 근거가 아닐 수 있다 |
| 선택 근거 제한 답변이 더 길다 | 길어서 좋은 것이 아니라 근거 경계가 더 잘 보인다 |
프로젝트 기록 예시¶
왜 탈락 후보까지 남겨야 하나¶
문서-7은 이번 질문에 어느 정도 도움이 됩니다. 하지만 이 문서는 왜 탈락 이유를 남기나를 더 강조하고 있어, 왜 검색 후보와 선택 근거를 답변보다 먼저 기록하나라는 현재 질문의 직접 근거로 쓰기에는 한 단계 비켜 있습니다.
문서-9는 더 좋은 예입니다. 기록과 근거라는 단어가 모두 들어 있어 점수는 어느 정도 나오지만, 실제 내용은 에이전트 운영 로그 이야기입니다. 이 후보를 탈락시키는 이유를 남기지 않으면 다음 번에는 기록이라는 단어만 보고 또 채택할 수 있습니다.
따라서 탈락 후보 표는 실패 기록이 아니라 검색 기준선의 경계를 남기는 표입니다.
답변 비교를 꼭 남겨야 하는 이유¶
이 예제의 top-1만 사용 답변은 틀렸다고 할 정도는 아닙니다. 하지만 이것만 남기면 다음을 알 수 없습니다.
- 다른 상위 후보가 무엇을 보강했는가
- 왜
문서-9같은 near miss는 제외됐는가 - 답변이 정말 선택 근거 안에서만 작성됐는가
반대로 선택 근거만 사용 답변은 길지만, 검색 실패와 답변 실패를 나중에 분리해 검토할 수 있다, 높은 점수 후보가 곧바로 답 근거는 아니다, 최종 답변만 저장하면 실패 위치를 구분하기 어렵다라는 세 판단 축이 모두 드러납니다.
즉, RAG 프로젝트에서 답변 비교는 문장 미세 조정이 아니라 근거 경계 점검입니다.
바로 남길 프로젝트 회고 문장¶
실행 결과를 한 문단으로 회고하면 다음처럼 적을 수 있습니다.
이번 RAG 실습에서는 10개 문서 조각 중 6개가 상위 검색 후보로 경쟁했다. 그러나 최종 답변 근거로는
문서-4,문서-3,문서-8만 채택했고,문서-7은 보조 설명,문서-9는 에이전트 운영 로그라는 이유로 탈락시켰다. 따라서 이 질문에서는 높은 점수 후보를 그대로 답변에 넣기보다, 상위 후보 표와 선택 근거 표를 먼저 남긴 뒤 그 범위 안에서 답변을 구성하는 편이 검증 가능성이 높다.
이 회고에서 독자가 붙잡아야 할 형식은 다음입니다.
- 상위 후보 수와 채택 근거 수를 같이 적는다
- 탈락한 상위 후보와 탈락 이유를 남긴다
- 답변 비교를 통해 근거 경계를 점검한다
- 실패 상태를 따로 기록할 준비를 한다
직접 바꿔 보며 확인할 것¶
-
질문을
RAG에서 최신 문서 근거가 왜 필요한가?로 바꿔 봅니다. 관찰할 점:문서-2가 더 올라오면서 검색 후보 경쟁과 선택 근거가 어떻게 바뀌는가? -
운영 티켓과승인 상태에 대한 감점을 없애 봅니다. 관찰할 점:문서-9같은 near miss가 더 위로 올라와도, 최종 근거 표에서 끝까지 살아남아야 하는가? -
답변 비교에서
top-1만 사용답변만 남겨 봅니다. 관찰할 점: 탈락 이유와 답변 경계가 사라지면 다음 검증에서 무엇을 잃는가?
핵심 확인 기준은 검색이 먼저다보다 후보 경쟁과 선택 근거가 분리되어야 검증이 가능하다는 점입니다.
이어서 점검할 질문¶
이어서 점검할 질문은 다음과 같습니다.
| 질문 | 왜 계속 점검해야 하나 |
|---|---|
| 검색 후보는 올라왔지만 답을 못 만드는 경우는 무엇인가? | 검색 실패와 답변 실패를 상태로 분리해야 하기 때문이다 |
| 문서 범위 밖 질문은 어디서 멈춰야 하는가? | 근거 부족과 답변 과장 위험을 따로 기록해야 하기 때문이다 |
| 현재 후보 표가 좋은 retrieval인지 어떻게 판단하는가? | 질문별 검증 표와 다시 볼 질문 목록이 필요하기 때문이다 |
체크리스트¶
| 확인할 것 | 스스로 답할 질문 |
|---|---|
| 질문 | 어떤 질문으로 검색 후보를 만들었는가? |
| 후보 목록 | 상위 검색 후보와 점수를 함께 남겼는가? |
| 근거 선택 | 선택한 근거와 탈락한 상위 후보를 분리해 적었는가? |
| 답변 경계 | 높은 검색 점수와 직접 답 근거가 다를 수 있음을 확인했는가? |
| 다음 검증 | 실패 상태를 따로 기록할 준비가 되었는가? |
출처와 참고 자료¶
- OpenAI,
Retrieval, OpenAI API Docs, 확인 날짜: 2026-06-29. https://developers.openai.com/api/docs/guides/retrieval
이 절의 문서 조각은 프로젝트 실습을 위해 직접 구성한 synthetic 예시입니다.