Hello there, ('ω')ノ
RAGがもっと「賢く、柔軟に」なるには?
RAG(検索拡張型生成)は非常にパワフルな仕組みですが、複雑な処理をしようとすると限界も見えてきます。
たとえば:
- 「複数のデータを順番に処理してまとめてほしい」
- 「答えが見つからなければ、もう一度検索してほしい」
- 「途中でユーザーに確認を取りながら対話したい」
…といったマルチステップ・分岐あり・再実行ありの処理になると、従来のRAGだけではうまく制御しきれません。
そこで登場するのが、LangGraph(ランググラフ)です!
💡 LangGraphとは?
LangGraphは、LangChainチームが開発した新しいフレームワークで、
「AIエージェントの思考や処理を、状態遷移(ステートマシン)として制御できる」のが特徴です。
🔁 簡単に言えば…
従来のLangChainが「一本道のレール」で処理を進めるイメージだとすれば、
LangGraphは「分岐や繰り返しがある地図(グラフ)」で、AIに柔軟な行動をさせられるようになります。
🧠 RAG × LangGraph でできること
✅ ① 条件付きでRAGを再実行(ループ処理)
例:「検索結果に十分な情報がない場合、別のクエリで再検索する」
➡ 情報が足りないと判断したら、自動的に再検索!
✅ ② ステップごとに判断しながら生成
例:「質問を受けたら → 何を調べるか決める → RAGで取得 → 出力内容を整形」
➡ RAGを挟みながら、目的に沿って段階的に処理
✅ ③ ユーザーとのやりとりをはさむ
例:「途中で“この内容でいいですか?”と確認をとる → OKなら次へ進む」
➡ 対話の中でフローを変えられる、“会話型ワークフローAI”に!
📊 LangGraph の全体構成イメージ
[質問受け取り] ↓ [質問の分類] → Aなら [RAG検索A] → [要約] → Bなら [RAG検索B] → [確認] → [出力] ↑ (再検索あり)
➡ 各ノード(ステップ)に対して、何をするか/次にどこへ進むかをロジックで制御できます。
🔧 LangGraph × RAG の構築ステップ(シンプル版)
✅ 1. ノード(ステップ)を定義
def classify_question(state): # 質問内容からRAG or ユーザー確認の判断 return state def run_rag(state): # RAG検索+生成 return state
✅ 2. 遷移(エッジ)を設計
edges = { "start": classify_question, "rag_needed": run_rag, "user_check": confirm_with_user, "done": finish, }
✅ 3. LangGraphでワークフロー化
from langgraph.graph import StateGraph graph = StateGraph() graph.add_node("start", classify_question) graph.add_node("rag_needed", run_rag) ... graph.set_entry_point("start") graph.set_finish_point("done") workflow = graph.compile()
➡ これで、「柔軟でルールベースなRAGフロー」が完成!
🧭 どんな業務に使える?
業務例 | LangGraphの活用ポイント |
---|---|
社内レポート作成 | 要素分解 → 情報取得 → 整形 → ユーザー確認 |
IT問合せ対応 | 「不足情報あり」なら再質問 → 完全な回答へ |
規定の自動案内 | 質問内容から対象ドキュメントを判断し分岐処理 |
ワークフロー自動化 | 条件に応じて異なるプロンプト・データを使用可能 |
✅ LangGraphが向いているRAGの特徴
向いているケース | 内容 |
---|---|
複数の処理ステップがある | 例:調査 → 要約 → 提案 |
条件分岐が多い | 例:質問内容によって異なる検索パスを使いたい |
同じ処理を繰り返す必要がある | 例:情報が不十分なら再検索 |
ユーザーと対話しながら進めたい | 例:途中で「OKですか?」と聞きたい |
🎯 まとめ:LangGraphは「考えて動けるRAG」をつくる鍵!
- LangGraphは、従来のRAGでは難しかった柔軟な処理制御・条件分岐・対話的フローを可能にする
- 複数のノード(ステップ)をつなげて、AIの思考と動きを“見える化”&“制御”できる
- 今後のRAG活用は、「ただ答えるAI」から「プロセスを組み立てるAI」へ!
Best regards, (^^ゞ