Spanner Graph と LangChain を使用して GraphRAG アプリケーションを構築する
Amarnath Mullick
Staff Software Engineer
Bei Li
Sr. Staff Software Engineer
※この投稿は米国時間 2025 年 3 月 22 日に、Google Cloud blog に投稿されたものの抄訳です。
Spanner Graph は、グラフ機能、リレーショナル機能、検索機能、AI 機能を統合し、事実上無制限のスケーラビリティを実現することで、グラフ データ マネジメントを刷新します。GraphRAG は、相互接続されたデータから関連性の高い分析情報を抽出できる質問応答システムの構築に関して、フロントランナーとして頭角を現しています。このブログ投稿では、LangChain と Spanner Graph を活用して強力な GraphRAG アプリケーションを構築する方法を紹介します。
アプリケーション デベロッパーの間では、動的な知識取得を可能にすることで生成 AI の基盤モデルのパフォーマンスを向上させる、検索拡張生成(RAG)を試す機会が増えています。RAG システムは、事前トレーニング済みの知識だけに頼るのではなく、一般にベクトル検索などの手法を使用して、推論中に外部データソースにクエリを実行します。取得した情報はプロンプトに取り入れられ、より正確でコンテキストに応じたレスポンスが取得可能となります。
ベクトルベースの RAG は関連するコンテンツを取得するのに効果的ですが、データの相互接続性を考慮せずに、引用や商品の依存関係などの関係を捉え損ねることがあります。このギャップを埋める GraphRAG は、ますます人気が高まっています。GraphRAG はさまざまなデータソースからナレッジグラフを作成し、グラフクエリとベクトル検索を組み合わせてコンテキストを取得できるようにします。そうすることで、生成 AI アプリケーション向けに、コンテキストに応じた詳細なレスポンスを生成します。
LangChain は、RAG アプリケーションを構築するための主要なオーケストレーション フレームワークであり、さまざまなデータソースと基盤モデルの統合を簡素化します。最近、Google は Spanner Graph と LangChain を統合し、GraphRAG ソリューションの開発を効率化しました。Spanner Graph のエンタープライズ グレードのスケーラブルかつ信頼性の高いグラフ機能を LangChain ワークフローで直接利用できるようになったため、開発者は関係認識型の高度な RAG システムを簡単に構築できます。
それでは詳しく見ていきましょう。
GraphRAG を使用した小売アプリケーションの構築
GraphRAG の実践的な応用例として、家電製品の e コマースのシナリオを考えてみましょう。オンライン小売業者が、商品の仕様、一括販売の提案、プロモーション セールなど、膨大な量のデータを収集しているとします。このデータには、さまざまなエンティティ間の暗黙的な関係が含まれています。
-
商品: たとえば、ノートパソコンは互換性のあるアクセサリーが付属している場合や、一括販売されている場合があります。
-
カテゴリ: 商品はカテゴリに属し、カテゴリには階層的な関係があります(例: 「ノートパソコン」は「パソコン」のサブカテゴリ)。
-
顧客: 顧客には購入履歴と好みがあり、商品やカテゴリとの関係を示します。
従来のベクトルベースの RAG は、顧客の問い合わせに応じて基本的な商品情報を取得できますが、GraphRAG は包括的でコンテキストに沿った理解ができます。これらのエンティティとその関係をグラフとして表現することで、システムはつながりをたどり、関連性の高い充実した情報を提供できます。
GraphRAG に Spanner Graph と LangChain を使用する手順を見てみましょう。
ステップ 1: ナレッジグラフを構築する
GraphRAG を活用するには、まずデータコーパスをナレッジグラフに変換する必要があります。この変換は、Spanner Graph スキーマ、カスタムコード、既存のライブラリなど、さまざまな方法で実行できます。この例では、LangChain の LLMGraphTransformer
を使用して、小売ビジネスの非構造化ドキュメント コーパスのサブセットをグラフに変換する方法を示します。
LLMGraphTransformer
は、ノードと関係のタイプとそのプロパティを入力として受け取り、次のことを指定します。
-
ノードタイプ: グラフ内のエンティティのタイプ(例: Product、Bundle、Deal)
-
関係タイプ: エンティティ間のつながりのタイプ(例: In_Bundle、Is_Accessory_Of、Is_Upgrade_Of,、Has_Deal)
-
プロパティ: ノードとエッジに関連付けられた属性(例: name、price、weight、deal_end_date、features)
この入力を受け、LLMGraphTransformer
はドキュメントを処理し、GraphDocument
オブジェクトのリストとして表されるグラフを生成します。
このプロセスを表すコード スニペットを以下に示します。
GraphRAG アプリケーションでセマンティック検索を使用するには、グラフノード用のベクトル エンベディングも生成する必要があります。これにより、コンテンツのセマンティックな意味に基づいてノードを識別できます。小売業のシナリオでは、商品、カテゴリ、その他の関連するエンティティの特徴について、テキスト記述のエンベディングを生成できます。
エンベディングを生成する方法の簡単な例を以下に示します。
また、Vertex AI テキスト エンベディングを取得するのガイドに沿って、Spanner の組み込みのテキスト エンベディング生成機能を使用することもできます。
ステップ 2: ナレッジグラフを Spanner Graph に保存する
構築したナレッジグラフを永続化してクエリするには、SpannerGraphStore
ライブラリを使用し、生成したグラフを Spanner Graph に読み込みます。このライブラリは、必要な入力テーブルとグラフ自体を含む基盤となる Spanner Graph のスキーマ生成を処理し、そのスキーマをデータベースに適用することで、プロセスを簡素化します。また、データベースに書き込む前にグラフ内の重複したノードとエッジの軽量な調整を行い、データの整合性を向上させます。
グラフを保存する方法の例を以下に示します。
ステップ 3: ナレッジグラフを調べる
ナレッジグラフが Spanner Graph に読み込まれたら、Spanner Graph Notebook を使用してスキーマとデータ自体の両方を調べて、小売情報を正確に表しているかどうかを確認します。次のマジック コマンドを使用すると、Spanner Graph インスタンスに接続してグラフを調べることができます。
これで、下図のようにグラフスキーマを調べ、グラフデータを操作できます。


ステップ 4: SpannerGraphVectorContextRetriever を使用してコンテキストを取得する
このセクションでは、回答を生成するためのコンテキスト取得において、従来の RAG に比べて GraphRAG がどのように優れているのかを説明します。生成されたグラフに基づいて質問に答えるには、SpannerGraphVectorContextRetriever
を使用できます。このリトリーバーは、自然言語の質問を入力として取り、ベクトル検索を利用して、意味的に最も一致するグラフ内のノードを特定します。その後、一致したノードから定義されたホップ数までのパスを探索することでコンテキストを強化します。ベクトル検索の機能と、Spanner Graph 内のグラフ走査機能が効果的に組み合わされています。
リトリーバーが次の自然言語による質問をどのように処理するかを分析してみましょう。"I am looking for a beginner drone. Please give me some recommendations"
.(初心者向けのドローンを探しています。何かおすすめはありますか?)
まず、商品に関する質問に回答するように構成された SpannerGraphVectorContextRetriever
を構築します。次に、自然言語による質問でリトリーバーを呼び出して、関連するコンテキストを取得します。
リトリーバーは Spanner ベクトル検索を利用して、最も関連性の高い商品を特定します。この場合、SkyHawk Zephyr Drone です(入力ドキュメントで初心者向けドローンとして指定)。次に、グラフを移動して SkyHawk Zephyr Drone の一括販売、互換性のあるアクセサリー、アップグレードの可能性、利用可能なセールなど、関連情報を検索します。SpannerGraphVectorContextRetriever
によって取得された、「SkyHawk Zephyr Drone」ノードを中心にした近傍サブグラフを以下に示します。


この拡充されたコンテキストは LLM に渡され、LLM が質問に対する最終的な回答を生成します。
GraphRAG が従来の RAG よりも優れている点
ベクトル検索のみを使用する従来の RAG よりも、GraphRAG のほうが充実した有益な回答を提供することを示すために、ここで結果を比較します。
注目すべき点は、どちらの RAG ワークフローも SkyHawk Zephyr ドローンを初心者向けドローンとして特定し、SkyHawk Zephyr Starter Package を推奨していることです。ただし GraphRAG は、おすすめの商品に関する次のような有益な追加情報も提示しています。
-
SkyHawk Zephyr Drone で使用できるアクセサリー
-
おすすめ商品の関連セール
-
おすすめのドローンを一段階アップグレードする選択肢(具体的には SkyHawk Zephyr 2.0)
使ってみる
Google Spanner Graph と LangChain は、Spanner Graph のエンタープライズ グレードの信頼性、スケーラビリティ、分散グラフ処理を LangChain の多用途ツールと組み合わせることで、GraphRAG の開発を効率化します。これにより、インテリジェントなアプリケーションの迅速なプロトタイピングが可能になり、貴重なデータ分析情報を得ることができます。皆様がどのようなものを構築されるのか、楽しみにしています。
使用を開始するには、GitHub リポジトリにアクセスしてください。上述のユースケースについては、ノートブックのチュートリアルを参照して詳細を確認できます。Spanner Graph のメリットとユースケースの詳細については、こちらをご覧ください。こちらのクイック セットアップ ガイドに沿って Spanner Graph の機能をすぐにご利用いただくこともできます。
-スタッフ ソフトウェア エンジニア、Amarnath Mullick
-シニア スタッフ ソフトウェア エンジニア、Bei Li