RAG2026-5일37차시 · 루브릭 설계14 / 18← 이전목차다음 →MetaContents

37차시. 루브릭 설계

실습 1 — 루브릭 설계 실습 따라 하기

관련 수업 자료: 원본 PDF 37차시_루브릭설계.pdf · 실습 코드 없음

이 실습은 교안 해설(보충_평가루브릭.md)의 실습 순서를 옮긴 것입니다. OpenAI 임베딩이나 채팅 모델을 부르는 파일은 .env 에 API 키가 있어야 돌아갑니다. 키가 없으면 실행 결과 샘플로 출력 모양을 확인합니다.

실행 흐름

출력
미니프로젝트 → 구현
미니프로젝트 → 설명
미니프로젝트 → 오류 대응
구현 → 합산
설명 → 합산
오류 대응 → 합산

실습 순서

세 항목에 잘함의 기준을 각 두 문장으로 적습니다. 동료의 앱을 그 문장만 보고 체크할 수 있는지 시험합니다. 체크할 수 없으면 문장을 다시 씁니다.

스스로 확인

  • 기준이 관찰 가능한가?
  • 검색 실패와 설명 실패를 다른 칸에 두었는가?
  • 로그가 없는 통과를 오류 대응 점수로 주지 않는가?

코드 설명

  • 이 차시에는 따로 돌리는 실습 파일이 없습니다. 아래는 7절 「실습 ③ — 루브릭 자동 채점」의 eval/rubric.py 를 읽을 때 짚을 점입니다.
  • WEIGHTS 의 값을 더하면 0.35 + 0.30 + 0.20 + 0.15 = 1.0 입니다. 그래서 항목 점수가 모두 2점이면 total 도 2.0이 되고, 총점이 항목 점수와 같은 0~2 범위에 머뭅니다.
  • passed 는 total 과 따로 계산합니다. GATES 의 항목 중 하나라도 최소 점수보다 낮으면, 총점이 아무리 높아도 passed 는 False 가 됩니다. 4-1절에서 본 "틀린 답인데 합격"을 막는 장치입니다.
  • re.search(r"\{.*\}", raw, re.S) 는 LLM 이 JSON 앞뒤에 설명을 덧붙여도 중괄호 부분만 꺼냅니다. re.S 를 주어야 . 이 줄바꿈까지 넘어가서 여러 줄 JSON 도 잡힙니다.
  • 프롬프트 끝의 예시 JSON 이 {{ }} 로 두 번 겹친 까닭은 ChatPromptTemplate 에서 한 겹 중괄호가 {question} 같은 변수 자리로 읽히기 때문입니다. 글자 그대로 중괄호를 보여 주려면 두 번 씁니다.
  • 수업 자료의 rubric.py 는 build_context 를 쓰지만 import 줄이 없습니다. 실제로 돌릴 때는 36차시 eval/generation.py 처럼 from nodes.generator import build_context 를 위에 더해야 합니다.
← 이전 절37차시 · 체크리스트와 과제다음 절 →37차시 · 퀴즈 1 — 가중 총점과 Gate로 합격 판정하기