32차시. 고도화된 Modular RAG
퀴즈 1 — 검증 결과로 다음 노드 고르기
grade에 따라 done, bump, rewrite, fallback 중 하나를 반환하세요. 각 횟수 상한을 먼저 봅니다.
빈칸 코드에서 시작합니다.
def route(state):
pass결과 보기 (예시 풀이)
# 검증 결과(grade)를 보고 다음에 갈 노드 이름을 돌려주는 분기 함수입니다.
def route(state):
grade = state.get("grade")
# 통과면 끝냅니다.
if grade == "pass":
return "done"
# 검증이 포기를 선언했으면 안내 노드로 갑니다.
if grade == "giveup":
return "fallback"
# 답 문장만 다시 쓸 때: 재생성 상한을 먼저 확인합니다.
if grade == "retry":
if state.get("retries", 0) >= state.get("max_retries", 1):
return "fallback"
return "bump"
# 문서를 다시 찾을 때: 재작성 상한을 먼저 확인합니다.
if grade == "research":
if state.get("rewrites", 0) >= state.get("max_rewrites", 2):
return "fallback"
return "rewrite"
# 모르는 grade가 오면 안전하게 안내 노드로 보냅니다.
return "fallback"
# 여러 State를 넣어 보고 기대한 경로가 나오는지 확인합니다.
cases = [
({"grade": "pass"}, "done"),
({"grade": "giveup"}, "fallback"),
({"grade": "retry", "retries": 0, "max_retries": 1}, "bump"), # 상한 전
({"grade": "retry", "retries": 1, "max_retries": 1}, "fallback"), # 상한 도달
({"grade": "research", "rewrites": 1}, "rewrite"), # 기본 상한 2 전
({"grade": "research", "rewrites": 2}, "fallback"), # 상한 도달
({"grade": "unknown"}, "fallback"), # 모르는 값
]
for state, expected in cases:
got = route(state)
mark = "OK" if got == expected else "틀림"
print(f"{mark:<3} {str(state):<52} -> {got}")
실행 결과
OK {'grade': 'pass'} -> done
OK {'grade': 'giveup'} -> fallback
OK {'grade': 'retry', 'retries': 0, 'max_retries': 1} -> bump
OK {'grade': 'retry', 'retries': 1, 'max_retries': 1} -> fallback
OK {'grade': 'research', 'rewrites': 1} -> rewrite
OK {'grade': 'research', 'rewrites': 2} -> fallback
OK {'grade': 'unknown'} -> fallback채점 기준: pass는 done, giveup은 fallback, retry 상한 전이면 bump, research 상한 전이면 rewrite.
관련 교안: 32차시 「2. 실습 ① — 통합 그래프 완성」