17차시. LangGraph 입문
조건부 분기가 있는 Graph 만들기
출처: 원본 PDF 17차시_LangGraph입문.pdf 9~10쪽 · 쪽 그림 9쪽 10쪽
이제 좀 더 복잡한 예시입니다. "검색 결과가 좋으면 진행, 나쁘면 다시 검색"하는 구조입니다.
조건을 판단하는 함수
def check_search_quality(state: SimpleRAGState):
# 검색 결과의 개수로 판단
if len(state["results"]) > 0:
return "good" # 결과가 있으면 "good"
else:
return "bad" # 결과가 없으면 "bad"조건부 Edge 추가하기
출처: 원본 PDF 10쪽
# Graph 생성
graph = StateGraph(SimpleRAGState)
# Node 추가
graph.add_node("search", search_node)
graph.add_node("answer", answer_node)
# 조건부 Edge 추가
graph.add_conditional_edges(
"search", # 어디서?
check_search_quality, # 어떤 함수로 판단?
{
"good": "answer", # good이면 answer로
"bad": "search" # bad이면 다시 search로
}
)
# 나머지는 같음
graph.set_entry_point("search")
graph.set_finish_point("answer")실제로 동작하는 모습
출처: 원본 PDF 10쪽
첫 번째 시도
입력: query = "가격?"
↓
search_node 실행 → 검색 수행 → results = ["문서1", "문서2"]
↓
check_search_quality 실행 → len(results) = 2 > 0 → "good" 반환
↓
answer_node 실행 (good이므로) → 답변 생성 → State 반환
만약 검색이 실패했다면
search_node 실행 → 검색 실패 → results = []
↓
check_search_quality 실행 → len(results) = 0 → "bad" 반환
↓
다시 search_node로! (루프) → 새로운 검색 시도