28차시. Conditional Edge 이해
7. 분기 함수 디버깅
출처: 원본 PDF 28차시_ConditionalEdge이해.pdf 17~18쪽 · 쪽 그림 17쪽 18쪽
"왜 계속 저쪽으로만 가지?" 싶을 때 확인하는 방법입니다.
7-1) 판단 근거를 출력
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에 기록합니다.
나중에 로그만 봐도 왜 그 경로로 갔는지 알 수 있습니다.