12차시. RAG 품질 문제
실습 1 — RAG 품질 문제 실습 따라 하기
관련 수업 자료: 12차시 「5. 실습 ① — 진단 함수 만들기」(9~10쪽) · 실습 코드 12/diagnose.py
이 실습은 교안 해설(12_RAG품질문제.md)의 실습 순서를 옮긴 것입니다. OpenAI 임베딩이나 채팅 모델을 부르는 파일은 .env 에 API 키가 있어야 돌아갑니다. 키가 없으면 실행 결과 샘플로 출력 모양을 확인합니다.
수업 자료와 이어지는 곳
| 실습 코드 | 원본 PDF | 이어지는 내용 |
|---|---|---|
12/diagnose.py | 9~10쪽 | 12차시 「5. 실습 ① — 진단 함수 만들기」 아래에 실었습니다 |
실행 흐름
이상한 답 → 검색 조각 확인
검색 조각 확인 → 조각에 정답이 있나
조각에 정답이 있나 → 생성 프롬프트 (있다)
조각에 정답이 있나 → 검색 청크 k 재작성 (없다)실습 순서
동료에게 문서를 보지 말고 질문을 받게 합니다. 내가 만든 질문은 문서 표현을 그대로 따라가 검색이 쉬워 보입니다. 실패마다 질문, 기대 키워드, 검색 조각에 정답이 있었는지를 표로 남깁니다.
스스로 확인
- 네 가지 실패를 구분하는가?
- 조각에 정답이 있는지로 검색과 생성을 나누는가?
- 모델을 먼저 바꾸면 안 되는 이유를 말하는가?
코드 설명
store.similarity_search_with_relevance_scores(question, k=k)는 (문서, 점수) 쌍의 리스트를 돌려줍니다. diagnose는 기준을 통과하지 못한 조각도 ✗ 표시로 함께 찍습니다. 정답 조각이 기준 바로 아래에서 잘렸는지 보려면 이것이 꼭 필요합니다.- 수업 자료의 diagnose는 통과한 조각이 없으면
return으로 끝나지만, 실습 코드12/diagnose.py는 빈 자료로도 모델을 부릅니다. 그래서 문서에 없는 질문에서 모델이 "자료에서 확인할 수 없습니다"라고 버티는지, 지어내는지를 볼 수 있습니다. input("\n[Enter 키로 다음 질문 진행]")때문에 질문마다 실행이 멈춥니다. 결과를 읽고 Enter를 누르면 다음 질문으로 넘어갑니다. 중간에 그만두려면 Ctrl+C를 누릅니다.for group, questions in TESTS.items():는 딕셔너리의 키(유형 이름)와 값(질문 리스트)을 한 쌍씩 꺼냅니다. 유형을 하나 더 넣고 싶으면 TESTS에 키 하나만 더하면 됩니다.- 8절 score()의 채점은
if key in ans로 키워드가 들어 있는지만 봅니다. 문서에는 "7 일"처럼 띄어 쓴 곳이 있어서, 모델이 그대로 옮겨 쓰면 키워드 "7일"과 어긋납니다. 키워드를 정할 때 띄어쓰기 변형도 함께 넣어 두십시오.