Neo4j と Milvus を使った GraphRAG エージェントの概要
Neo4j と Milvus を使った GraphRAG エージェントの概要
近年の大規模言語モデル(LLM)を活用したシステムでは、モデル単体で回答を生成するだけでなく、必要に応じて外部のデータベースに問い合わせる「RAG(Retrieval Augmented Generation)」手法が注目されています。さらに、複数の知識を結びつける必要がある高度な質問に対応するため、RAG に知識グラフを組み合わせた GraphRAG という新しいアプローチが提案されています。
本記事では、代表的なグラフデータベースである Neo4j とベクトルデータベースの Milvus を用いて構築される GraphRAGエージェント の基本的な仕組みや特徴、具体的な利用シーンを解説します。
1. GraphRAG とは何か?
GraphRAG(グラフRAG)とは、「グラフ + Retrieval Augmented Generation」の略称です。RAG では LLM が回答を生成する前に、外部のデータストア(通常はベクトルデータベース)を検索して関連情報を取得し、その情報をもとに回答を生成します。しかし従来の RAG は、テキストの意味ベクトルを使った「類似検索」が中心であり、複数の事実関係をつなぎ合わせるような問い合わせには弱いという課題がありました。
そこで提案されたのが GraphRAG です。GraphRAG では、知識グラフを組み込むことで、単に意味的に近い文章を検索するだけでなく、エンティティ間の関係や階層構造なども踏まえて情報を取得できます。つまり、複雑な質問に対しても、データ同士のつながりを活用してより正確な回答を引き出すことが可能になります。
参考:
What is GraphRAG? Enhancing RAG with Knowledge Graphs - Zilliz blog
2. Neo4j とは?
Neo4j はグラフデータベースの代表的な製品で、データをノード(エンティティ)とリレーション(エッジ)で表現します。リレーショナルデータベース(行と列の表形式)と異なり、複雑な関係性を直接的に保存・検索できることが強みです。グラフ上をパスとしてたどるクエリや、ノード同士の関連探索がスムーズに行えます。
Neo4j は以下の特徴を備えています。
- ネイティブグラフストレージ:データを内部的にグラフ構造として保持
- Cypher クエリ言語:グラフ検索に特化した問い合わせ言語を備える
- 高いパフォーマンス:大規模なグラフデータに対しても高速な検索が可能
GraphRAG では、Neo4j 上に構築した知識グラフを活用し、ノード(人物・概念など)同士がどのようにつながっているかを検索する際に利用します。
参考:
Vector vs Graph Databases: Choosing the Right Solution - Zilliz Learn
3. Milvus とは?
Milvus は、テキストや画像などを高次元ベクトル化し、大量のデータから類似検索を効率良く行うために設計されたオープンソースのベクトルデータベースです。LLM や機械学習の分野では、文書や画像を埋め込みベクトル(Embedding)に変換し、そのベクトル同士の距離を測ることで類似度を評価します。Milvus はこのようなベクトル検索に特化し、大規模データをスケーラブルに扱える設計がされています。
GraphRAG では、大量のテキストやドキュメントを Milvus に格納しておき、ユーザからの問い合わせに対して意味的に近い文書を素早く取得します。
参考:
Building a GraphRAG Agent With Neo4j and Milvus - Zilliz blog
Milvus Adventures October 25, 2024 - DEV Community
4. GraphRAGエージェントの仕組み
Neo4j と Milvus を組み合わせた GraphRAG エージェントは、以下のようなおおまかなステップで動作します。
-
ルーティング
ユーザの質問を分析し、グラフ検索(Neo4j)、ベクトル検索(Milvus)、もしくは両方を使うかを判断する。 -
検索(Retrieval)
- ベクトル検索:Embedding した質問文をキーに、Milvus から意味的に近いテキスト(文章断片)を取得。
- グラフ検索:Neo4j 上の知識グラフから関連エンティティやリレーションをクエリで取得。
-
回答生成(Generation)
LLM が取得したコンテキスト情報をベースに回答を生成する。 -
評価(Evaluation)
回答内容の妥当性や整合性をチェックし、必要に応じて再検索や回答修正を行う。 -
改良(Refinement)
自己チェック結果を踏まえ、さらに情報が必要であれば検索を繰り返し、最終的な回答をブラッシュアップする。
Neo4j が提供する「データ同士の関係性」と、Milvus が提供する「テキストの類似性検索」を組み合わせることで、単純な RAG では難しかった複数のファクトを横断するような質問にも対応しやすくなります。
参考:
Building a GraphRAG Agent With Neo4j and Milvus - Zilliz blog
5. 実際の活用例
(1) 複数の事実をつなぐ QA シナリオ
「簒奪者アレクトゥスを倒した人物の息子の名前は何か?」のように、いくつかのステップを経ないと答えにたどり着かない質問を想定します。従来の RAG であれば、
- ベクトル検索で「アレクトゥスを倒した人物」を探す
- 得られた人物に関する別の文献を改めて検索する
という複数回のクエリが必要でした。GraphRAG は、Neo4j の知識グラフで「アレクトゥスを倒した人物→その息子」というリレーションを直接たどったり、Milvus で関連ドキュメントを補完したりできるため、単一の問い合わせで最終的な答えを導きやすくなります。
参考:
What is GraphRAG? Enhancing RAG with Knowledge Graphs - Zilliz blog
(2) 学術論文の検索アシスタント
「マルチエージェントシステムに関する代表的な論文は?」といった質問を想定すると、以下のように活用できます。
- Milvus を使ったベクトル検索で、類似度が高い論文(要旨)を複数取得する
- Neo4j 上で論文の引用関係や共著者、研究トピックを結びつけたグラフ情報を参照する
- LLM が両方の情報を統合し、単に関連論文を列挙するだけでなく、引用関係や研究の影響度なども含めた回答を生成
このように、キーワード検索だけでは拾えない関係性を活用することで、より深い情報を提供できる点が大きなメリットです。
(3) カスタマーサポートや製品情報検索
製品マニュアル(文章データ)と、部品の構成情報(グラフデータ)の両方を扱うサポートシナリオでは、GraphRAG により「〇〇という不具合が起きた時に交換すべき部品は?」のような質問に対して、テキストの手順情報(Milvus 検索)と部品相互の関係(Neo4j グラフ)を組み合わせた回答が可能になります。
まとめ
GraphRAGエージェント は、RAG による類似検索とグラフデータベースを組み合わせることで、複数の事実関係をまたぐ高度な質問にも対応可能なソリューションです。Neo4j が提供するノードとリレーションの明示的な管理機能と、Milvus の大規模かつ高速なベクトル検索を組み合わせることで、従来の RAG だけではカバーしきれなかった領域まで踏み込んだ情報検索と回答が期待できます。今後、カスタマーサポート、研究開発、ドキュメント管理といった多様な分野での活用が見込まれており、LLM をより実用的に活かす上でも非常に注目度の高い技術となっています。
参考記事:
本記事が、Neo4j と Milvus を用いた GraphRAG エージェントの概要理解の参考になれば幸いです。
Discussion