11차시. Retriever 기초 실습
7. 실습 ④ — 문맥 조립하기
출처: 원본 PDF 11차시_Retriever기초실습.pdf 15쪽 · 쪽 그림 15쪽
검색이 끝났으면 LLM에게 넘길 형태로 다듬어야 합니다. 여기서 작은 차이가 큰 결과를 만듭니다.
7-1) 나쁜 조립 vs 좋은 조립
❌ 그냥 이어 붙이기
──────────────────────────────
context = " ".join(d.page_content for d in docs)
→ 어디까지가 한 조각인지 모릅니다
→ 어느 문서에서 왔는지 알 수 없습니다
→ LLM이 출처를 표시할 방법이 없습니다✅ 번호와 출처를 붙이기
──────────────────────────────
def build_context(docs):
parts = []
for i, d in enumerate(docs, 1):
head = (f"[{i}] {d.metadata['filename']} "
f"p.{d.metadata['page_no']}")
parts.append(f"{head}\n{d.page_content}")
return "\n\n---\n\n".join(parts)
→ 조각 경계가 명확합니다
→ LLM에게 "[1]을 근거로"라고 말하게 시킬 수 있습니다
→ 사용자가 원문을 확인할 수 있습니다7-2) 실제 출력 형태
[1] manual.pdf p.2
상품을 받은 후 7일 이내에는 환불을 신청할 수 있으며 단순
변심으로 환불하는 경우 왕복 배송비는 고객이 부담하고 제품에
불량이 있는 경우에는 30일 이내에 무상으로 교환해드리며
---
[2] manual.pdf p.2
30일 이내에 무상으로 교환해드리며 이때 배송비는 회사가 부담합니다💡 이 형식이 13차시에서 빛을 발합니다
프롬프트에 이렇게 지시할 수 있게 됩니다.
"각 문장 끝에 근거 번호를 [1] 형식으로 표기하십시오"
그러면 답변이 이렇게 나옵니다.
"환불은 7일 이내에 신청해야 합니다[1].
단, 불량품 교환은 30일까지 가능합니다[2]."
→ 어느 근거에서 나온 문장인지 추적할 수 있습니다