RAG2026-5일28차시 · Conditional Edge 이해10 / 17← 이전목차다음 →MetaContents

28차시. Conditional Edge 이해

7. 분기 함수 디버깅

출처: 원본 PDF 28차시_ConditionalEdge이해.pdf 17~18쪽 · 쪽 그림 17쪽 18쪽

"왜 계속 저쪽으로만 가지?" 싶을 때 확인하는 방법입니다.

7-1) 판단 근거를 출력

Python
def route_after_verify(state) -> str:
    r = state.get("retries", 0)
    g = state.get("grade", "retry")

    if r >= MAX_RETRY:
        print(f"   [route] retries={r} >= {MAX_RETRY} -> giveup")
        return "giveup"
    if g == "pass":
        print(f"   [route] grade=pass -> done")
        return "done"
    print(f"   [route] retries={r} grade={g} -> regenerate")
    return "regenerate"

💡 대부분의 원인은 둘 중 하나
① 키 이름 오타
state.get("retrieval_ok") 인데 노드는 "retrievalOk"로 씀
→ 항상 기본값(None)이 나와 같은 경로로만 갑니다
② 이전 노드가 키를 안 채움
verify가 grade를 반환하지 않으면
→ 기본값으로만 판단하게 됩니다
출력해보면 즉시 드러납니다.

7-2) 운영 환경에서는 로그로

출력
def route_after_verify(state) -> str:
    # print 대신 State의 log를 활용할 수는 없습니다
    # (분기 함수는 State를 수정할 수 없으므로)
    # → 노드에서 판단 재료를 log에 남겨두세요

def verifier_node(state):
    ...
    return {"grade": grade, "reason": reason,
            "log": [f"검증: grade={grade} retries={retries}"]}

⚠️ 분기 함수에서는 log를 남길 수 없습니다
분기 함수는 문자열 하나만 반환하니까요.
그래서 판단에 쓰이는 값은 노드에서 미리 log에 기록합니다.
나중에 로그만 봐도 왜 그 경로로 갔는지 알 수 있습니다.

← 이전 절28차시 · 6. 실습 — 조건표 설계 연습다음 절 →28차시 · 8. 자주 하는 실수