RAG2026-5일29차시 · Conditional Edge 실습9 / 19← 이전목차다음 →MetaContents

29차시. Conditional Edge 실습

6. 실습 ⑤ — 검색 실패 사유별 세부 라우팅

출처: 원본 PDF 29차시_ConditionalEdge실습.pdf 13쪽 · 쪽 그림 13쪽

24차시에서 남긴 fail_reason을 드디어 활용합니다.

6-1) 조건표

순서조건반환값다음 노드
1retrieval_ok == True"ok"generate
2fail_reason == / "low_score""research"(30차시 rewrite)
3fail_reason == / "search_error""error"fallback
4그 외 전부"empty"fallback
Python
def route_after_retrieve(state) -> str:
    if state.get("retrieval_ok"):
        return "ok"

    reason = state.get("fail_reason", "")
    if reason == "low_score":
        return "research"       # 표현 차이 -> 30차시 재검색 대상
    if reason == "search_error":
        return "error"          # 시스템 오류 -> 즉시 종료
    return "empty"              # no_result, empty_query 등

# 30차시 전까지는 research도 fallback으로 연결
g.add_conditional_edges("retrieve", route_after_retrieve, {
    "ok":       "generate",
    "research": "fallback",     # ★ 30차시에 rewrite로 변경
    "error":    "fallback",
    "empty":    "fallback",
})

💡 지금은 다 fallback으로 가지만
경로 이름을 미리 나눠두는 것이 중요합니다.
30차시에서 rewrite 노드를 만들면
경로맵의 값 한 줄만 바꾸면 됩니다.
"research": "fallback" → "research": "rewrite"
분기 함수는 손대지 않습니다.
이것이 확장을 고려한 설계입니다.

← 이전 절29차시 · 5. 실습 ④ — 다중 분기 구현다음 절 →29차시 · 7. 실습 ⑥ — 경로별 동작 확인