RAG2026-5일22차시 · RAG를 Graph로 바꾸기8 / 20← 이전목차다음 →MetaContents

22차시. RAG를 Graph로 바꾸기

5. 실습 ③ — 단계별로 붙이기

출처: 원본 PDF 22차시_RAG를Graph로바꾸기.pdf 8쪽 · 쪽 그림 8쪽

한 번에 다 만들지 말고 노드를 하나씩 붙이며 확인합니다.

5-1) 1단계 — retrieve만

출력
g = StateGraph(RAGState)
g.add_node("retrieve", retrieve_node)
g.add_edge(START, "retrieve")
g.add_edge("retrieve", END)          # 일단 바로 종료
app = g.compile()

r = app.invoke(init_state("환불은 며칠 이내인가요?"))
print("검색 결과:", len(r["documents"]), "건")
print("점수:", r["scores"])

✓ 검색 결과: 3 건
✓ 점수: [0.73, 0.639, 0.489]

5-2) 2단계 — generate 추가

Python
g.add_node("generate", generate_node)
g.add_edge("retrieve", "generate")   # END 대신 generate로
g.add_edge("generate", END)

r = app.invoke(init_state("환불은 며칠 이내인가요?"))
print(r["answer"])

실행 결과 예시 (코드를 읽고 만든 예상 화면입니다. 실제 실행 결과, 특히 모델의 답은 다를 수 있습니다)

출력
환불은 상품 수령 후 7일 이내에 신청하실 수 있습니다 [1]. 단순 변심의 경우 왕복 배송비는 고객 부담입니다 [1].

5-3) 3단계 — 분기와 fallback 추가

Python
g.add_node("fallback", fallback_node)
g.add_conditional_edges("retrieve", route_after_retrieve,
                        {"ok": "generate", "empty": "fallback"})
g.add_edge("fallback", END)

r = app.invoke(init_state("대표이사가 누구인가요?"))
print(r["answer"])     # fallback 메시지가 나와야 함

실행 결과 예시 (코드를 읽고 만든 예상 화면입니다. 실제 실행 결과, 특히 모델의 답은 다를 수 있습니다)

출력
관련 자료를 찾지 못했습니다.
질문을 조금 더 구체적으로 바꿔 다시 물어봐 주세요.

💡 단계별로 붙이는 이유
3단계를 한 번에 만들었다가 에러가 나면
어디가 문제인지 알 수 없습니다.
하나씩 붙이면 방금 붙인 것이 원인입니다.
5분 더 걸리지만 30분을 아낍니다.

← 이전 절22차시 · 4. 실습 ② — 그래프 완성다음 절 →22차시 · 6. 실습 ④ — 회귀 테스트