🤖

LangGraphでAgentic RAGチャットボットを作ってみた

に公開

1. この記事で得られること

  • Vue3, LangGraph, FastAPI を使って、Agentic RAG チャットボットの全体アーキテクチャと実装手順がわかる。
  • 検索・計画・実行を自律的に繰り返す Agentic RAG の仕組みと特徴を理解できる。
  • サンプルコードを参照しながら、自分のプロジェクトに応用する際のポイントがつかめる。

2. 背景

ユーザーの問い合わせに対して Web 検索や RAG を用いた社内情報検索が行えるチャットボットを開発したところ、単なる一問一答に留まってしまい、十分な対応力を発揮できませんでした。そこで LangGraph を活用し、検索結果をもとに追加調査や分析、さらには報告書の自動生成まで実行可能な Agentic RAG 技術を組み込んだ AI エージェントを試作してみました。

Agentic RAG について

Retrieval Augmented Generation(RAG)を利用すると社内に限定された情報をもとに LLM が回答をすることが可能となります。しかし、静的なワークフローに縛られ、多段階推論や複雑なタスク管理に必要な適応性を欠いています。従来の静的な RAG が固定ワークフローや限定的推論能力に課題を抱えるのに対し、Agentic RAG は自律エージェントによる動的・反復的な検索戦略とツール連携で複雑タスクにも適応します。

詳細は Agentic Retrieval-Augmented Generation: A Survey on Agentic RAG を参照してください。

3. 作成したチャットボットの概要

  • 社内情報を効果的に活用し、柔軟な思考が可能な Agentic RAG チャットボットです。LangGraph を基盤とした AI Agent が自律的に作業計画やタスクを立案し、Web 検索や Vector DB を用いた RAG により最適な回答を提供します。従来の一問一答にとどまらず、回答後も会話や追加分析が継続できる点が特徴です。RAG は Web 検索のように、Agent が呼び出すツールのひとつとして位置付けられます。
  • Plan & Execution の Agent パターンも導入しており、Agent が自ら検索計画を作成して適切な検索ツールを実行します。それにより、多角的かつ体系的に情報を収集して回答することができます。

4. 画面イメージ

左側がチャットボットです。右側には AI Agent の思考プロセスがリアルタイムに表示されます。

Screen image

※ 日本語モードに切り替えると日本語で使用できます。

5. チャットボットの特徴

  • 動作を LLM 任せにすると収束しないことがあるため、計画のステータスを厳格に管理します。確実に収束するよう、計画数の最大値も設定します。
  • AI Message や Tool Message の中から必要なメッセージだけを抽出して利用します。Agent が参照するメッセージを最小限に抑えることで、コストを削減できます。
  • Plan & Execute パターンを導入して計画を作成することで、多面的かつ体系的に情報を収集できます。
  • 複数の内容を含む複雑な依頼にも対応可能で、回答が構造的になります。
    例:A 社の技術情報収集 → B 社の技術情報収集 → A・B 社の技術情報の比較
  • LangGraph を使用しています。複雑なフローを構築できるため、細かい要件に合わせたカスタマイズが可能です。
  • arxiv にある論文を検索するツールを Tool calling function の一つとして登録しています。ユーザーの依頼を基に Agent が arxiv 用の検索クエリーを作成して検索を行います。
  • Agent の思考過程、回答がストリーミングにより表示されます。
  • 回答が Markdown により見やすい形式で表示されます。

6. Graph Flow

以下は LangGraph を使用して作成された Agent の Graph です。ユーザーからの質問・依頼を基に、「ユーザーに不明点を確認するのか」、「LLM 自身が直接回答するのか」、「検索を使用して調査を行うのか」を判断します。

  1. ユーザーに質問 (依頼内容に不明点がある場合) [ask_human]

  2. LLM 自身が回答 [ans_llm_solo]

  3. 検索

    • 計画作成 (複数可) [create_plan]
    • 計画を基にツールを呼び出す(ツール:Tavily search Web 検索、RAG、Arxiv 論文検索、LLM 自身の回答)[select_tool]
    • 回答が得られなければ計画を再作成 [create_revised_plan]
    • 最終回答の作成 [create_final_answer]

Graph

7. ソースコード

ソースコードはフロントエンド用、バックエンド用の 2 つに分かれています。

フロントエンドのコード(GitHub)

ガイド: README_ja.md に従ってセットアップを行ってください。

https://github.com/DXC-Lab-Linkage/agentic_rag_dxclab_client

バックエンドのコード(GitHub)

ガイド: README_ja.md に従ってセットアップを行ってください。

https://github.com/DXC-Lab-Linkage/agentic_rag_dxclab_server

DXC Lab

Discussion