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를 위에 더해야 합니다.