콘텐츠로 이동

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

입력 파일

이번 실습은 짧은 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만 보고 쓴 답변과 선택 근거를 좁혀 쓴 답변 비교
  • 확인할 개념:
  • 높은 검색 점수와 직접적인 답 근거는 다를 수 있다
  • 탈락 이유를 남겨야 다음 검색 실험이 쉬워진다
  • 답변은 선택 근거 안에서만 구성해야 한다
# RAG 문서 후보를 점수화해 상위 검색 후보, 선택 근거, 탈락 이유를 기록하고 top-1 답변과 근거 제한 답변을 비교하는 예제입니다.
import csv
from pathlib import Path

질문 = "RAG 프로젝트에서 왜 검색 후보와 선택 근거를 답변보다 먼저 기록해야 하는가?"

data_path = Path("docs/assets/part-07/chapter-05/p7-5-rag-documents.csv")
document_rows = list(csv.DictReader(data_path.open(encoding="utf-8")))
대표_문서_ids = {f"문서-{index}" for index in range(1, 11)}
document_rows = [row for row in document_rows if row["doc_id"] in 대표_문서_ids]

SUFFIXES = [
    "에서는", "으로는", "으로", "보다", "해야", "하게", "했다", "한다",
    "한가", "인가", "과", "와", "은", "는", "이", "가", "을", "를",
    "만", "도", "의", "에", "로", "다",
]

def normalize_token(token):
    token = token.replace("?", "").replace(".", "").replace(",", "")
    token = token.replace("(", " ").replace(")", " ").split()[0]
    for keyword in ["RAG", "MCP"]:
        if token.startswith(keyword):
            return keyword

    changed = True
    while changed:
        changed = False
        for suffix in SUFFIXES:
            if token.endswith(suffix) and len(token) > len(suffix) + 1:
                token = token[: -len(suffix)]
                changed = True
                break
    return token

def tokenize(text):
    return {
        normalized
        for raw in text.split()
        if (normalized := normalize_token(raw))
    }

질문_토큰 = tokenize(질문)
검색_후보 = []

for row in document_rows:
    text = row["text"]
    overlap_terms = sorted(질문_토큰 & tokenize(text))
    direct_answer_clues = sum(
        phrase in text
        for phrase in ["검색 후보", "선택 근거", "최종 답변", "탈락 이유"]
    )
    failure_trace_bonus = 1 if ("검색 실패" in text or "답변 실패" in text) else 0
    indirect_penalty = 1 if ("운영 티켓" in text or "승인 상태" in text) else 0
    final_score = (
        len(overlap_terms)
        + direct_answer_clues
        + failure_trace_bonus
        - indirect_penalty
    )
    검색_후보.append({
        "문서 식별자": row["doc_id"],
        "겹친 핵심어": overlap_terms,
        "직접 근거 단서 수": direct_answer_clues,
        "실패 추적 보너스": failure_trace_bonus,
        "간접 후보 감점": indirect_penalty,
        "최종 점수": final_score,
        "문장": text,
    })

검색_후보.sort(
    key=lambda x: (
        x["최종 점수"],
        len(x["겹친 핵심어"]),
        x["직접 근거 단서 수"],
    ),
    reverse=True,
)

상위_후보 = 검색_후보[:6]

선택_근거 = []
탈락_후보 = []
for row in 상위_후보:
    text = row["문장"]
    if len(선택_근거) < 3 and (
        "선택 근거" in text
        or "최종 답변" in text
        or "답변 실패" in text
    ):
        선택_근거.append({
            "문서 식별자": row["문서 식별자"],
            "채택 이유": "질문에 직접 답하거나, 답변만 남겼을 때의 위험을 바로 설명한다",
            "문장": text,
        })
    else:
        if "운영 티켓" in text:
            reason = "기록이라는 단어는 겹치지만 에이전트 운영 로그라서 RAG 근거 기록 질문에는 직접 답하지 않는다"
        elif "검색 단계가 먼저 필요" in text:
            reason = "retrieval 필요성은 설명하지만 후보와 근거를 왜 따로 기록하는지까지는 직접 답하지 않는다"
        elif "RAG는 외부 문서를 검색해" in text:
            reason = "RAG의 구조 소개로는 유효하지만 이번 질문의 기록 기준을 닫기에는 부족하다"
        else:
            reason = "상위 후보였지만 이번 답변의 직접 근거로 쓰기에는 설명이 한 단계 비켜 있다"
        탈락_후보.append({
            "문서 식별자": row["문서 식별자"],
            "탈락 이유": reason,
            "문장": text,
        })

top1_답변 = (
    f"{상위_후보[0]['문장']} "
    "따라서 검색 후보와 선택 근거를 먼저 남겨야 한다."
)

근거_제한_답변 = (
    f"{선택_근거[0]['문장']} "
    f"{선택_근거[1]['문장']} "
    f"{선택_근거[2]['문장']} "
    "따라서 RAG 프로젝트에서는 답변만 저장하지 말고, 상위 검색 후보와 선택 근거를 먼저 기록해야 "
    "검색 실패와 답변 실패를 나중에 분리해서 검토할 수 있다."
)

실행_요약 = {
    "질문": 질문,
    "문서 수": len(document_rows),
    "상위 후보 수": len(상위_후보),
    "채택 근거 수": len(선택_근거),
    "탈락 후보 수": len(탈락_후보),
}

print("읽은 파일 =", str(data_path))
print("실행 요약 =", 실행_요약)
print("상위 검색 후보 =")
for row in 상위_후보:
    print(row)
print("선택 근거 =")
for row in 선택_근거:
    print(row)
print("탈락 후보 =")
for row in 탈락_후보:
    print(row)
print("답변 비교 =")
print({"구분": "top-1만 사용", "답변": top1_답변})
print({"구분": "선택 근거만 사용", "답변": 근거_제한_답변})

실행 결과 예시는 다음과 같습니다.

읽은 파일 = docs/assets/part-07/chapter-05/p7-5-rag-documents.csv
실행 요약 = {'질문': 'RAG 프로젝트에서 왜 검색 후보와 선택 근거를 답변보다 먼저 기록해야 하는가?', '문서 수': 10, '상위 후보 수': 6, '채택 근거 수': 3, '탈락 후보 수': 3}
상위 검색 후보 =
{'문서 식별자': '문서-4', '겹친 핵심어': ['RAG', '검색', '근거', '기록', '답변', '선택', '후보'], '직접 근거 단서 수': 3, '실패 추적 보너스': 1, '간접 후보 감점': 0, '최종 점수': 11, '문장': 'RAG 프로젝트 기록에는 질문 검색 후보 선택 근거 최종 답변을 분리해 남겨야 검색 실패와 답변 실패를 나중에 구분할 수 있다.'}
{'문서 식별자': '문서-3', '겹친 핵심어': ['검색', '근거', '선택', '후보'], '직접 근거 단서 수': 2, '실패 추적 보너스': 0, '간접 후보 감점': 0, '최종 점수': 6, '문장': '검색 후보 점수가 높아도 질문에 직접 답하지 않는 문장이 섞일 수 있으므로 선택 근거를 따로 남겨야 한다.'}
{'문서 식별자': '문서-8', '겹친 핵심어': ['검색', '근거', '답변'], '직접 근거 단서 수': 1, '실패 추적 보너스': 0, '간접 후보 감점': 0, '최종 점수': 4, '문장': '최종 답변만 저장하면 검색이 실패했는지 답변이 근거를 벗어났는지 나중에 구분하기 어렵다.'}
{'문서 식별자': '문서-7', '겹친 핵심어': ['검색', '후보'], '직접 근거 단서 수': 2, '실패 추적 보너스': 0, '간접 후보 감점': 0, '최종 점수': 4, '문장': '상위 검색 후보 비교표에는 선택된 문서뿐 아니라 탈락한 후보와 탈락 이유도 남겨야 다음 검색 실험에서 무엇이 달라졌는지 설명할 수 있다.'}
{'문서 식별자': '문서-9', '겹친 핵심어': ['RAG', '근거', '기록', '답변'], '직접 근거 단서 수': 0, '실패 추적 보너스': 0, '간접 후보 감점': 1, '최종 점수': 3, '문장': '운영 티켓 기록은 실행 순서와 승인 상태를 남기지만 그것만으로는 RAG 답변의 근거 품질을 설명할 수 없다.'}
{'문서 식별자': '문서-1', '겹친 핵심어': ['RAG', '근거', '답변'], '직접 근거 단서 수': 0, '실패 추적 보너스': 0, '간접 후보 감점': 0, '최종 점수': 3, '문장': 'RAG는 외부 문서를 검색해 모델 입력에 넣고 그 근거 위에서 답변을 구성하는 구조다.'}
선택 근거 =
{'문서 식별자': '문서-4', '채택 이유': '질문에 직접 답하거나, 답변만 남겼을 때의 위험을 바로 설명한다', '문장': 'RAG 프로젝트 기록에는 질문 검색 후보 선택 근거 최종 답변을 분리해 남겨야 검색 실패와 답변 실패를 나중에 구분할 수 있다.'}
{'문서 식별자': '문서-3', '채택 이유': '질문에 직접 답하거나, 답변만 남겼을 때의 위험을 바로 설명한다', '문장': '검색 후보 점수가 높아도 질문에 직접 답하지 않는 문장이 섞일 수 있으므로 선택 근거를 따로 남겨야 한다.'}
{'문서 식별자': '문서-8', '채택 이유': '질문에 직접 답하거나, 답변만 남겼을 때의 위험을 바로 설명한다', '문장': '최종 답변만 저장하면 검색이 실패했는지 답변이 근거를 벗어났는지 나중에 구분하기 어렵다.'}
탈락 후보 =
{'문서 식별자': '문서-7', '탈락 이유': '상위 후보였지만 이번 답변의 직접 근거로 쓰기에는 설명이 한 단계 비켜 있다', '문장': '상위 검색 후보 비교표에는 선택된 문서뿐 아니라 탈락한 후보와 탈락 이유도 남겨야 다음 검색 실험에서 무엇이 달라졌는지 설명할 수 있다.'}
{'문서 식별자': '문서-9', '탈락 이유': '기록이라는 단어는 겹치지만 에이전트 운영 로그라서 RAG 근거 기록 질문에는 직접 답하지 않는다', '문장': '운영 티켓 기록은 실행 순서와 승인 상태를 남기지만 그것만으로는 RAG 답변의 근거 품질을 설명할 수 없다.'}
{'문서 식별자': '문서-1', '탈락 이유': 'RAG의 구조 소개로는 유효하지만 이번 질문의 기록 기준을 닫기에는 부족하다', '문장': 'RAG는 외부 문서를 검색해 모델 입력에 넣고 그 근거 위에서 답변을 구성하는 구조다.'}
답변 비교 =
{'구분': 'top-1만 사용', '답변': 'RAG 프로젝트 기록에는 질문 검색 후보 선택 근거 최종 답변을 분리해 남겨야 검색 실패와 답변 실패를 나중에 구분할 수 있다. 따라서 검색 후보와 선택 근거를 먼저 남겨야 한다.'}
{'구분': '선택 근거만 사용', '답변': 'RAG 프로젝트 기록에는 질문 검색 후보 선택 근거 최종 답변을 분리해 남겨야 검색 실패와 답변 실패를 나중에 구분할 수 있다. 검색 후보 점수가 높아도 질문에 직접 답하지 않는 문장이 섞일 수 있으므로 선택 근거를 따로 남겨야 한다. 최종 답변만 저장하면 검색이 실패했는지 답변이 근거를 벗어났는지 나중에 구분하기 어렵다. 따라서 RAG 프로젝트에서는 답변만 저장하지 말고, 상위 검색 후보와 선택 근거를 먼저 기록해야 검색 실패와 답변 실패를 나중에 분리해서 검토할 수 있다.'}

결과를 어떻게 읽는가

실행 결과에서는 문서-4가 가장 높은 점수를 받았다는 사실보다, 문서-7, 문서-9, 문서-1이 왜 함께 상위에 있었고 왜 최종 근거에서는 빠졌는가가 더 중요합니다.

구간 이번 실습에서 읽어야 할 점 왜 중요한가
상위 검색 후보 직접 근거, 주변 설명, near miss가 함께 올라왔다 실제 RAG에서는 비슷해 보이는 후보가 여러 개 경쟁하기 때문이다
선택 근거 문서-4, 문서-3, 문서-8만 최종 근거로 채택했다 점수가 높아도 답을 직접 지지하지 않으면 빼야 하기 때문이다
탈락 후보 문서-7, 문서-9, 문서-1은 상위권이었지만 답 근거에서는 제외됐다 탈락 이유를 남겨야 다음 검색 실험에서 후보 순서 변화와 선택 기준 변화를 비교할 수 있다
답변 비교 top-1 답보다 선택 근거를 좁혀 쓴 답이 더 검증 가능하다 답변이 어느 문장 범위 안에 있었는지 나중에 다시 확인할 수 있기 때문이다

즉, RAG 프로젝트의 최소 성공 기준은 답이 나왔다가 아니라 후보 경쟁과 선택 근거가 같이 남았다입니다.

결과 해석 기준

관찰 읽어야 할 뜻
문서-4가 가장 높은 점수를 받는다 질문에 직접 답하는 근거가 상위에 있다
문서-7도 상위권에 남는다 도움이 되는 주변 설명과 직접 근거를 구분해야 한다
문서-9가 near miss로 올라온다 단어가 겹쳐도 현재 질문의 근거가 아닐 수 있다
선택 근거 제한 답변이 더 길다 길어서 좋은 것이 아니라 근거 경계가 더 잘 보인다

프로젝트 기록 예시

1
2
3
4
5
6
7
질문:
상위 후보:
선택 근거:
탈락한 상위 후보:
탈락 이유:
근거 제한 답변:
다음 검색 실험에서 바꿀 점:

왜 탈락 후보까지 남겨야 하나

문서-7은 이번 질문에 어느 정도 도움이 됩니다. 하지만 이 문서는 왜 탈락 이유를 남기나를 더 강조하고 있어, 왜 검색 후보와 선택 근거를 답변보다 먼저 기록하나라는 현재 질문의 직접 근거로 쓰기에는 한 단계 비켜 있습니다.

문서-9는 더 좋은 예입니다. 기록근거라는 단어가 모두 들어 있어 점수는 어느 정도 나오지만, 실제 내용은 에이전트 운영 로그 이야기입니다. 이 후보를 탈락시키는 이유를 남기지 않으면 다음 번에는 기록이라는 단어만 보고 또 채택할 수 있습니다.

따라서 탈락 후보 표는 실패 기록이 아니라 검색 기준선의 경계를 남기는 표입니다.

답변 비교를 꼭 남겨야 하는 이유

이 예제의 top-1만 사용 답변은 틀렸다고 할 정도는 아닙니다. 하지만 이것만 남기면 다음을 알 수 없습니다.

  • 다른 상위 후보가 무엇을 보강했는가
  • 문서-9 같은 near miss는 제외됐는가
  • 답변이 정말 선택 근거 안에서만 작성됐는가

반대로 선택 근거만 사용 답변은 길지만, 검색 실패와 답변 실패를 나중에 분리해 검토할 수 있다, 높은 점수 후보가 곧바로 답 근거는 아니다, 최종 답변만 저장하면 실패 위치를 구분하기 어렵다라는 세 판단 축이 모두 드러납니다.

즉, RAG 프로젝트에서 답변 비교는 문장 미세 조정이 아니라 근거 경계 점검입니다.

바로 남길 프로젝트 회고 문장

실행 결과를 한 문단으로 회고하면 다음처럼 적을 수 있습니다.

이번 RAG 실습에서는 10개 문서 조각 중 6개가 상위 검색 후보로 경쟁했다. 그러나 최종 답변 근거로는 문서-4, 문서-3, 문서-8만 채택했고, 문서-7은 보조 설명, 문서-9는 에이전트 운영 로그라는 이유로 탈락시켰다. 따라서 이 질문에서는 높은 점수 후보를 그대로 답변에 넣기보다, 상위 후보 표와 선택 근거 표를 먼저 남긴 뒤 그 범위 안에서 답변을 구성하는 편이 검증 가능성이 높다.

이 회고에서 독자가 붙잡아야 할 형식은 다음입니다.

  • 상위 후보 수와 채택 근거 수를 같이 적는다
  • 탈락한 상위 후보와 탈락 이유를 남긴다
  • 답변 비교를 통해 근거 경계를 점검한다
  • 실패 상태를 따로 기록할 준비를 한다

직접 바꿔 보며 확인할 것

  1. 질문을 RAG에서 최신 문서 근거가 왜 필요한가?로 바꿔 봅니다. 관찰할 점: 문서-2가 더 올라오면서 검색 후보 경쟁과 선택 근거가 어떻게 바뀌는가?

  2. 운영 티켓승인 상태에 대한 감점을 없애 봅니다. 관찰할 점: 문서-9 같은 near miss가 더 위로 올라와도, 최종 근거 표에서 끝까지 살아남아야 하는가?

  3. 답변 비교에서 top-1만 사용 답변만 남겨 봅니다. 관찰할 점: 탈락 이유와 답변 경계가 사라지면 다음 검증에서 무엇을 잃는가?

핵심 확인 기준은 검색이 먼저다보다 후보 경쟁과 선택 근거가 분리되어야 검증이 가능하다는 점입니다.

이어서 점검할 질문

이어서 점검할 질문은 다음과 같습니다.

질문 왜 계속 점검해야 하나
검색 후보는 올라왔지만 답을 못 만드는 경우는 무엇인가? 검색 실패와 답변 실패를 상태로 분리해야 하기 때문이다
문서 범위 밖 질문은 어디서 멈춰야 하는가? 근거 부족답변 과장 위험을 따로 기록해야 하기 때문이다
현재 후보 표가 좋은 retrieval인지 어떻게 판단하는가? 질문별 검증 표와 다시 볼 질문 목록이 필요하기 때문이다

체크리스트

확인할 것 스스로 답할 질문
질문 어떤 질문으로 검색 후보를 만들었는가?
후보 목록 상위 검색 후보와 점수를 함께 남겼는가?
근거 선택 선택한 근거와 탈락한 상위 후보를 분리해 적었는가?
답변 경계 높은 검색 점수와 직접 답 근거가 다를 수 있음을 확인했는가?
다음 검증 실패 상태를 따로 기록할 준비가 되었는가?

출처와 참고 자료

이 절의 문서 조각은 프로젝트 실습을 위해 직접 구성한 synthetic 예시입니다.