Neo4jとRAGの活用方法とは?LangChainや機械学習との連携

Neo4jとRAGの活用方法とは?LangChainや機械学習との連携 未分類

AI Beat(エーアイビート)編集部です。

「Neo4jって商用利用できるの?」「RAGに組み込もうとしているけど、ライセンスが複雑でよくわからない」——そういった声は、グラフデータベースを検討している開発者やエンジニアから実際によく届きます。

Neo4jはオープンソース版と商用版の二系統があり、とりわけ商用利用のライセンス体系が2021年以降に変更されて以来、情報が錯綜しています。加えて、LangChainやRAGとの連携方法を解説した日本語記事は技術的に古かったり断片的なものが多い状況です。

本記事では、Neo4jの商用利用に関するライセンスの整理から始め、RAGとの連携設計、LangChainとの統合実装、さらに機械学習モデルとのブリッジ方法まで体系的に解説します。実際にNeo4j Community Editionで検証した経験をもとに、つまずきやすいポイントも正直に書いています。

Neo4jとは何か?グラフデータベースの基本

Neo4jとは何か?グラフデータベースの基本

Neo4jとは、ノード(頂点)とリレーションシップ(辺)でデータを表現するグラフデータベースです。従来のリレーショナルデータベース(RDB)がテーブルと外部キーで関係を表現するのに対し、Neo4jはデータの「つながり」そのものを一級市民として扱います。

Neo4j公式ドキュメントによると、Neo4jは世界で最も広く使われているグラフデータベースで、金融、製造、ヘルスケア、物流など多様な業種で導入されています。クエリ言語にはCypher(サイファー)を採用しており、SQLに近い直感的な構文でグラフ探索が可能です。

Neo4jの特徴と利点

Neo4jがリレーショナルDBと根本的に異なるのは、結合(JOIN)を事前に計算した構造として格納している点です。RDBで多段JOINを行うと結合コストがデータ量に対して指数的に増加しますが、Neo4jはリレーションシップを直接ポインタとして保持しているため、深いグラフ探索でもクエリ速度が劣化しにくい特性があります。

  • ACID準拠のトランザクション。Communityエディションも含めてACIDトランザクションをサポートし、整合性が担保されます
  • Cypherクエリ言語。ASCII-Artスタイルで関係を記述できる独自のグラフクエリ言語です
  • ネイティブグラフストレージ。グラフ構造をそのままディスクに格納するため、他のDBをグラフとしてエミュレートする場合より高速です
  • 豊富なライブラリ(APOC / GDS)。コミュニティが開発したAPOCプラグインと、機械学習アルゴリズムを提供するGraph Data Science(GDS)ライブラリが利用できます
  • 複数言語ドライバ。Python / Java / Go / .NET / JavaScript の公式ドライバが提供されており、既存システムへの統合が容易です

Neo4jの商用利用 — ライセンスの整理

Neo4jのライセンス体系は2021年にGPLv3からServer Side Public License(SSPL)へ変更されました。これはMongoDBが採用したことで注目を集めたライセンスで、「ソフトウェアをサービスとして提供する場合はソース全体を公開せよ」という条件が付きます。

エディションライセンス商用利用主な制限
Community EditionGPLv3(v4まで)→ SSPLへ移行可(SSPLの範囲内)クラスタリング不可、商用クラウドサービス化はSSPL制約あり
Enterprise Edition商用ライセンス可(ライセンス購入)なし(購入後はフル機能利用可)
AuraDB(クラウド)SaaSライセンスフリープランあり、有料プランで制限解除
  • 自社プロダクト内で使う(SaaS提供なし)→ Community Editionで商用利用は現実的に可能
  • Neo4jをコアにしたSaaSサービスを構築する→ SSPLの条件を検討するか、Enterprise Editionを購入すること
  • RAGや社内システムへの組み込み→ Community Editionで問題ないケースが多い(法務確認推奨)

※ ライセンス解釈には専門家によって見解が異なる場合があります。商用展開前には必ず自社の法務部門や弁護士に確認してください。最新情報はNeo4j公式ライセンスページを参照してください。

RAG(Retrieval-Augmented Generation)とは?

RAG(Retrieval-Augmented Generation)とは?

RAG(Retrieval-Augmented Generation)とは、外部の知識ベースから関連情報を検索し、その情報をLLMのプロンプトに組み込んで回答を生成する技術アーキテクチャです。2020年にMetaのAI Researchチームが発表した論文「Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks」で提唱されたのが起源です。

RAGの基本概念と仕組み

LLMは学習データのカットオフ以降の情報を持たず、特定ドメインの深い知識も限られています。RAGはこの弱点を補うための設計パターンで、ユーザーの質問に対して以下の流れで回答を生成します。

  1. クエリ受信。ユーザーから質問が入力される
  2. 検索(Retrieve)。ベクトルDBやグラフDBから意味的に近いドキュメントを取得する
  3. コンテキスト注入(Augment)。取得したドキュメントをプロンプトに追加する
  4. 生成(Generate)。拡張されたプロンプトをもとにLLMが回答を生成する

従来のベクトル検索RAGはドキュメントの「意味的な近さ」しか捉えられませんが、グラフ構造を持つNeo4jを組み合わせると「A社がB技術を使ってC問題を解決した」というような関係性の推論が可能になります。これがGraphRAGと呼ばれるアプローチです。

RAGの応用例と利点

ベクトル検索だけのRAGと比較して、Neo4jを使ったGraphRAGが特に効果を発揮するユースケースを整理します。

ユースケースベクトルRAGGraphRAG(Neo4j)
社内ナレッジ検索△ 文書の意味的な類似度のみ◎ 文書間の引用・関連関係を追跡可能
サプライチェーン分析× 関係性の推論が困難◎ 「部品→製品→顧客」の連鎖を1クエリで探索
不正検知△ パターンマッチングのみ◎ 取引ネットワーク内の異常な接続を検出
医薬品の相互作用△ テキスト類似度のみ◎ 薬剤・酵素・疾患のグラフから禁忌を推論
レコメンデーション◎ 汎用的に機能◎ 協調フィルタリングとグラフ探索の組み合わせ

編集部でNeo4j Community Editionを使ったGraphRAGを試したところ、同じドキュメントセットでベクトル検索だけの場合よりも関係性のある回答が得やすく、「AとBの違いは?」「CがDに影響するのはなぜ?」といった構造的な質問への回答精度が向上しました。一方で、グラフスキーマの設計が複雑になるというトレードオフも感じました。

Neo4jとRAGの連携方法

Neo4jとRAGの連携方法

Neo4jをRAGのバックエンドとして使う方法は大きく2パターンあります。①ベクトルインデックスを使ったセマンティック検索と、②Cypherクエリを使ったグラフトラバーサルです。実際のプロダクションシステムでは両者を組み合わせたハイブリッド検索が最も効果的です。

Neo4jを用いたRAGの実装手順

まず環境を整えます。Neo4jはDockerで素早く起動できます。

事前条件として、Neo4j 5.x以降のバージョンが必要です(ベクトルインデックスはNeo4j 5.11以降でネイティブサポート)。Python環境にはneo4jドライバとlangchain-communityをインストールします。

  1. Docker起動docker run -p 7474:7474 -p 7687:7687 -e NEO4J_AUTH=neo4j/password neo4j:5.18 でNeo4jを起動します
  2. ベクトルインデックスの作成。Cypherで CREATE VECTOR INDEX docEmbeddings FOR (d:Document) ON d.embedding OPTIONS {indexConfig: {`vector.dimensions`: 1536, `vector.similarity_function`: 'cosine'}} を実行します
  3. ドキュメントの格納。OpenAI Embeddings APIなどでテキストをベクトル化し、CREATE (d:Document {text: $text, embedding: $embedding}) でノードを追加します
  4. グラフリレーションシップの追加。ドキュメント間の関係を MATCH (a:Document), (b:Document) WHERE ... CREATE (a)-[:RELATED_TO]->(b) で定義します
  5. クエリ実行。ユーザーのクエリをベクトル化し、類似ノード+グラフ隣接ノードを取得してLLMに渡します

具体的なユースケースと事例

MicrosoftはGraphRAGを研究・実装し、2024年7月にオープンソース化しました(microsoft/graphrag on GitHub)。このライブラリはNeo4jとは独立していますが、Neo4jを外部グラフストアとして接続するアダプタが存在します。GraphRAGの設計思想として特徴的なのは、コミュニティ検出アルゴリズムで関連トピックをグループ化し、階層的なサマリーを生成する点です。

  • Neo4jのベクトルインデックスは5.11以降でネイティブサポート。それ以前はAPOCやFaissPython連携が必要
  • Community Editionはシングルノードのみ。クラスタを組んで高可用性を確保するにはEnterprise Editionが必要
  • グラフスキーマは先に設計すること。後から変更すると既存データの移行コストが高い

LangChainとNeo4jの統合

LangChainとNeo4jの統合

LangChainはLLMアプリケーション構築のためのPythonフレームワークで、Neo4jとのインテグレーションがlangchain-communityライブラリに公式実装されています。2024年以降、GraphCypherQAChainが大幅に改善され、自然言語からCypherクエリを自動生成できるようになっています。

LangChainの基本概要

LangChainは「Chains(処理の連鎖)」「Agents(自律的な意思決定)」「Memory(会話履歴管理)」の3概念を中心に構成されています。Neo4jとの統合においては主に2つのコンポーネントが使われます。

  • Neo4jVector。Neo4jをベクトルストアとして扱う抽象化レイヤ。OpenAI Embeddingsや他のEmbeddingモデルとシームレスに連携できます
  • GraphCypherQAChain。LLMがCypherクエリを自動生成してNeo4jを検索し、結果をもとに回答を生成するチェーンです

LangChainとNeo4jの連携方法

最小構成のコードイメージを示します(実行には環境変数にNeo4jの接続情報とOpenAI APIキーが必要です)。

Neo4jVector連携の基本パターンは以下の流れです。まず from langchain_community.vectorstores import Neo4jVector でインポートし、 Neo4jVector.from_documents(docs, embeddings, url=..., username=..., password=...) でドキュメントをNeo4jに格納します。検索は vectorstore.similarity_search(query, k=3) で実行できます。

GraphCypherQAChainは自然言語のクエリをCypherに変換するため、グラフスキーマをLLMに事前に伝える「スキーマ注入」が重要です。スキーマが不完全だと生成されるCypherの精度が落ちます。

💡 ワンポイント GraphCypherQAChainはverbose=Trueを設定すると、LLMが生成したCypherクエリと取得した結果を確認できます。デバッグ時に必ず使うことをおすすめします。生成されたCypherが誤っている場合は、スキーマ定義の粒度を上げるか、few-shotサンプルをプロンプトに追加するのが効果的です。

統合による効果と利点

LangChainとNeo4jを組み合わせることで、単純なベクトル検索では実現が難しかった「知識グラフを横断する対話型QAシステム」が構築できます。たとえば、社内の技術ドキュメントをNeo4jに格納してGraphCypherQAChainで検索すると、「この機能の設計に影響した意思決定はどれか?」のような関係性を問う質問にも、グラフトラバーサルで回答できます。

一方で注意点もあります。GraphCypherQAChainはLLMにCypherを生成させるため、LLMのトークン消費が増えます。コストを抑える場合は、あらかじめ頻出クエリパターンをテンプレートとして固定し、GraphCypherQAChainを使う場面を複雑な関係性クエリに限定するのが実用的です。チャットボットへのRAG実装を検討している場合は、まずシンプルなRAGで基盤を作ってからNeo4jを追加する段階的アプローチが失敗リスクを下げます。

【2024年9月最新】chatbot RAGの使い方と実装方法を徹底解説
AI Beat(エーアイビート)編集部です。 「RAG chatbotをPythonで実装したいが、どこから手をつければいいかわからない」という声を開発者コミュニティでよく耳にします。RAG(Retrieval-Augmented Gene...

Knowledge Graphを用いたRAGの強化

Knowledge Graphを用いたRAGの強化

Knowledge Graph(知識グラフ)はエンティティと関係の集合体で、Neo4jはその代表的な格納先として使われます。GraphRAGがベクトル検索と根本的に異なるのは、ドキュメントを「フラットなテキストの集合」ではなく「構造化された関係のネットワーク」として扱う点です。

Knowledge Graphの基本概念

Knowledge Graphの三要素は「ノード(エンティティ)」「リレーションシップ(関係)」「プロパティ(属性)」です。たとえば「山田太郎(人物)がAI株式会社(組織)のCTOである」という事実は、ノード「山田太郎」→リレーション「IS_CTO_OF」→ノード「AI株式会社」として表現されます。

Googleは2012年に「Knowledge Graph」という名称を発表し、検索結果の右側に表示されるエンティティ情報の裏側で使われていることが広く知られています。現在のAI技術においてKnowledge Graphへの関心が再び高まっているのは、LLMのハルシネーション(事実誤認)を抑制する手段として構造化された事実ベースが注目されているためです。

Knowledge GraphとRAGの相乗効果

純粋なベクトル検索RAGと、Knowledge Graph+RAGの比較を具体的に見てみましょう。

「田中さんが担当するプロジェクトに関連するリスクは何か?」という質問に対して、ベクトル検索RAGは「田中さん」が含まれるドキュメントを類似度で取得します。一方Knowledge Graph RAGでは、田中さん→担当プロジェクト→関連リスクという関係チェーンをCypherで直接辿れます。後者は中間ドキュメントへの言及がなくても正確に関係を追跡できる点が強みです。

具体的な実装例と手順

LangChainにはLLMGraphTransformerというコンポーネントが存在し、テキストドキュメントからエンティティと関係を自動抽出してNeo4jに格納する処理をLLMに委任できます。抽出精度はLLMのモデル性能に依存しますが、GPT-4oクラスのモデルを使うと実用レベルの精度が出ます。

抽出されたKnowledge Graphを使ったRAGパイプラインの構成は以下のとおりです。①ドキュメントをLLMGraphTransformerでエンティティ・関係に変換してNeo4jに格納、②クエリ時にベクトル検索(類似ドキュメント)とグラフ検索(関係チェーン)を並行実行、③両結果をマージしてLLMに渡す。このアーキテクチャの詳細はMicrosoftが公開したGraphRAGの原論文(arXiv)で解説されています。

Neo4jを活用した機械学習の応用

Neo4jを活用した機械学習の応用

Neo4jにはGraph Data Science(GDS)ライブラリが提供されており、グラフ構造を活用した機械学習アルゴリズムをCypherから直接呼び出せます。コミュニティ版は無償で利用でき、PageRankやLouvainコミュニティ検出、Node Embeddingsなど50以上のアルゴリズムが収録されています。

機械学習とNeo4jの連携方法

GDSライブラリを使う場合、まず「Graph Catalog」という仮想グラフをメモリに投影(Project)してから、その上でアルゴリズムを実行します。この二段階方式は実データを変更せずにグラフ分析ができる点で安全です。

Pythonから利用する場合はgraphdatascienceライブラリが便利です。gds.graph.project()でグラフを投影し、gds.pageRank.stream(G)でPageRankを計算する流れです。結果はPandas DataFrameとして返ってくるため、scikit-learnや他のMLライブラリとの連携も自然に行えます。

機械学習モデルのトレーニングと評価

GDSが特に力を発揮するのはリンク予測(Link Prediction)タスクです。「このノードとノードが将来つながる確率はどの程度か?」を計算するタスクで、レコメンデーション、ネットワーク補完、詐欺検出などに使われます。

  • PageRank。ノードの重要度をグラフ構造から計算します。WebページのSEO価値を算出するアルゴリズムの原型です
  • Louvainコミュニティ検出。グラフを密につながるコミュニティ(クラスタ)に自動分割します
  • Node2Vec。グラフノードをベクトル(埋め込み表現)に変換します。RAGのベクトル検索との相性が良いアルゴリズムです
  • FastRP(Fast Random Projection)。Node2Vecより高速なノード埋め込み生成手法です

実際の応用例と効果

Neo4j+GDSの組み合わせが実際に使われている代表的なケースとして、金融業界の不正検知があります。例えばPayPalは不正取引検知にNeo4jを活用していることを公式ブログで公表しており、取引ネットワーク内の異常なパターン(通常はつながらないノードが急に接続されるなど)を早期検出する仕組みに活用されています。

RAGモデルの全体像を把握した上でNeo4jを選択するかどうかを検討するのがよいでしょう。用途によってはシンプルなベクトルDBのみのRAGで十分なケースも多くあります。

【2024年9月最新】RAG Model AIとは何か?その読み方と活用法を徹底解説
AI Beat(エーアイビート)編集部です。 「RAGって何の略?」「ChatGPTとどう違うの?」という疑問を抱えながら、AI活用を検討している方は多いはずです。RAG(Retrieval-Augmented Generation)は20...

Neo4j Desktopの活用方法

Neo4j Desktopの活用方法

Neo4j DesktopはNeo4jの公式GUIクライアントで、ローカル環境でのデータベース管理・クエリ実行・プラグイン管理が無償で行えます。開発初期段階の検証や学習目的に最適なツールです。

Neo4j Desktopの基本機能

Neo4j DesktopはElectronベースのアプリケーションで、macOS / Windows / Linuxで動作します。主要な機能は以下のとおりです。

  • Cypher Shell / Neo4j Browser。ブラウザベースのクエリエディタでCypherを実行し、グラフをビジュアライズできます
  • プロジェクト管理。複数のデータベースをプロジェクト単位で管理できます
  • プラグイン管理。APOCやGDSなどのプラグインをGUI上でインストールできます(設定ファイルの直接編集が不要)
  • Bloom(可視化)。Neo4j Bloomを使うとノードとリレーションシップを直感的にビジュアライズして探索できます

インストールと初期設定の手順

Neo4j公式ダウンロードページからDesktopを無償でダウンロードできます。初回起動時に無料のライセンスキーが発行され、メールアドレスで登録すると使えるようになります。

  1. ダウンロード。公式サイトからインストーラを取得します
  2. 起動・ライセンス登録。メールアドレスを登録して無償ライセンスキーを受け取ります
  3. プロジェクト作成。「New Project」→「Add Database」でローカルDBを作成します
  4. APOCプラグイン追加。「Plugins」タブからAPOCをインストールします(RAGやKnowledge Graph構築時に必要な拡張関数が含まれます)
  5. Neo4j Browser起動。DBを起動し「Open」でブラウザベースのクエリエディタを開きます

実際のプロジェクトでの活用例

開発フローとしては、Neo4j Desktopでスキーマを設計・検証したあと、Dockerイメージ(neo4j:5.18)を使ってCI環境やステージング環境にデプロイする構成が一般的です。本番環境はNeo4j AuraDB(マネージドクラウド)を使うとインフラ管理コストを下げられます。

一点注意が必要なのは、Desktop用のプラグイン設定(neo4j.confdbms.security.procedures.unrestricted)がDockerイメージにはそのまま引き継がれない点です。DockerでAPOCを使う場合は環境変数 NEO4J_PLUGINS='["apoc"]' を明示的に渡す必要があります。

Neo4j AuraDBとクラウド展開

Neo4j AuraDBとクラウド展開

ローカル環境での検証が完了したあと、本番展開の選択肢としてNeo4j AuraDB(クラウドマネージドサービス)があります。AuraDB Freeプランは512MBのストレージを無償で提供しており、学習・プロトタイピング用途に使えます。

AuraDB Freeプランとの機能差

AuraDB FreeとAuraDBAの主な違いを確認しておきます。

項目AuraDB FreeAuraDB Professional
ストレージ512MBカスタム(GBオーダー)
ノード数上限20万ノード制限なし
SLAなしあり(99.95%)
ベクトルインデックス利用可利用可
GDS(機械学習)一部制限フル利用可
バックアップなし自動バックアップ

AuraDB + LangChainの本番構成

AuraDB接続に必要なのはConnectionのURI(neo4j+s://xxxxxx.databases.neo4j.io形式)とユーザー名・パスワードです。LangChainのNeo4jVectorはAuraDB接続をそのままサポートしているため、接続先URLを差し替えるだけでローカル環境からAuraDBへ移行できます。

RAGシステムをチャットボットに組み込む場合の設計については、chatbot RAGの実装方法も合わせて参考にしてください。

Neo4jとRAGの活用方法とは?LangChainや機械学習との連携
AI Beat(エーアイビート)編集部です。 「Neo4jって商用利用できるの?」「RAGに組み込もうとしているけど、ライセンスが複雑でよくわからない」——そういった声は、グラフデータベースを検討している開発者やエンジニアから実際によく届き...

よくある質問

よくある質問

Q. Neo4jのCommunity EditionはRAGで商用利用できますか?

A. Neo4j Community EditionはSSPLライセンスで提供されています。社内システムやプロダクトへの組み込みであれば多くのケースで商用利用可能です。ただしNeo4jをコアとしたSaaSサービスを外部に提供する場合はSSPLの条件(ソースコード公開)が適用される可能性があります。具体的な利用形態については法務確認を推奨します。

Q. Neo4jとPinecone・WeaviateなどのベクトルDBはどう使い分ければよいですか?

A. ドキュメントの「意味的な近さ」だけで検索が完結するシナリオなら、Pineconeなどの専用ベクトルDBが実装コストを下げます。一方、「AがBを参照している」「CはDが原因で発生している」といった関係性の推論が必要なシナリオではNeo4jの強みが活きます。両者を組み合わせたハイブリッド構成も実用的で、ベクトル検索で候補を絞ってからNeo4jで関係チェーンを追跡する設計が採られることがあります。chatbot RAGの実装事例も確認した上で設計方針を決めると良いでしょう。

Q. CypherとSQLの主な違いは何ですか?

A. SQLはテーブル同士をJOINで結合しますが、CypherはノードとリレーションシップをASCIIアートで表現します。たとえば「AさんがBさんの友人である」は Cypher では MATCH (a:Person {name:"A"})-[:FRIEND_OF]->(b:Person) RETURN b と書けます。可読性が高く、多段のリレーション探索をネストせずに記述できます。SQLに慣れていれば基本的なCypherは数時間で習得できます。

Q. Neo4j GDSライブラリはCommunity Editionで使えますか?

A. はい、GDSのCommunity版はNeo4j Community Editionで無償利用できます。ただし一部の高度なMLアルゴリズム(AutoML等)はEnterprise版のGDSが必要です。PageRank、Louvain、Node2Vec、FastRPなど主要なアルゴリズムはCommunity版でも利用可能です。

Q. GraphRAGはいつ使うべきで、いつ使わないべきですか?

A. GraphRAGが効果的なのは、データに明確な関係構造があり、ユーザーが「AとBの関係は?」「Cに影響する要因は?」という構造的な質問を頻繁に行う場合です。反対に、独立したドキュメントの集合から類似テキストを検索するだけで十分な用途(FAQ検索など)では、ベクトルDBのみのRAGで十分です。GraphRAGはセットアップコストが高いため、まずシンプルなRAGで検証し、限界を感じてから追加するアプローチを推奨します。

まとめ

まとめ

Neo4jはグラフ構造を活かしたRAGとの親和性が高く、特にエンティティ間の関係性推論が必要なシナリオで力を発揮します。商用利用についてはSSPLライセンスの制約を理解した上で選択し、不明点は法務に確認するのが安全です。

実装の出発点としては、Neo4j Desktopでスキーマを設計・検証し、LangChainのNeo4jVectorまたはGraphCypherQAChainで小規模なプロトタイプを作るのが最短ルートです。本番移行はAuraDB(マネージドクラウド)を活用することでインフラ管理コストを抑えられます。

  • まず試す:Neo4j Desktop(無償)+ Community Edition でローカル検証
  • RAG統合:LangChain の Neo4jVector / GraphCypherQAChain で実装
  • 本番移行:AuraDB Professional でマネージド運用

サービスが見つかりません。

Copied title and URL