23차시. Modular RAG 개념
5. 3부에서 완성할 최종 구조
출처: 원본 PDF 23차시_ModularRAG개념.pdf 10~11쪽 · 쪽 그림 10쪽 11쪽
지금은 이해하지 않아도 됩니다. 33차시까지 이 형태로 커집니다.
■ 최종 그래프 (32차시 완성형)
START
↓
retrieve ────────┐
│ │ 검색 실패
│ 검색 성공 ↓
↓ rewrite ──→ (재검색) ──→ retrieve
generate ↑
↓ │ 재검색 필요
verify ──────────┘
│
├─ pass ────→ END
├─ retry ───→ bump ──→ generate
└─ giveup ──→ fallback ──→ END📝 코드로 보면
g = StateGraph(RAGState)
g.add_node("retrieve", retriever_node) # 24차시
g.add_node("generate", generator_node) # 25차시
g.add_node("verify", verifier_node) # 26차시
g.add_node("rewrite", rewrite_node) # 30차시
g.add_node("bump", bump_node) # 27차시
g.add_node("fallback", fallback_node) # 31차시
g.add_edge(START, "retrieve")
g.add_conditional_edges("retrieve", route_after_retrieve,
{"ok": "generate", "rewrite": "rewrite",
"giveup": "fallback"}) # 29차시
g.add_edge("generate", "verify")
g.add_conditional_edges("verify", route_after_verify,
{"pass": END, "retry": "bump",
"research": "rewrite", "giveup": "fallback"})
g.add_edge("bump", "generate") # 재생성 루프
g.add_edge("rewrite", "retrieve") # 재검색 루프
g.add_edge("fallback", END)💡 노드 6개, 분기 2개
이것이 실무에서 가장 널리 쓰이는 Modular RAG 형태입니다.
더 복잡하게 만들 수도 있지만,
대부분의 문제는 이 구조로 해결됩니다.