モデル別実行レシピ
最終更新
GraphRAGとは?文書間の関係とNeo4jの実例
GraphRAGは文書中の人・組織・出来事のつながりを回答に利用する検索方式です。
契約書にはA社とB社の取引が、別の通知にはB社を買収したC社が登場します。「A社の取引先を買収した会社は?」という質問には、両方の文書をつなぐ必要があります。GraphRAGは関係をグラフに保存し、必要なつながりと原文をLLM1に渡します。
段落検索から関係検索へ
ベクトル検索は質問に意味が近い段落を探すのが得意です。しかし契約書に買収の記載がなく、買収通知にA社が登場しないと、必要な2段落を一度に取得しにくい場合があります。グラフにA→契約→B、C→買収→Bを保存すると、Bを通じて両方の根拠をつなげられます。
Neo4j GraphRAG Pythonは検索器とLLMをつなぎます。ベクトル検索の後に関連エンティティを取得するVectorCypherRetrieverや、質問をCypherに変換するText2CypherRetrieverなどを選べます。まず小さな関係を手動で作ると、抽出すべき情報が分かりやすくなります。

ローカルで実習用Neo4jを起動する
Dockerが動いているMac・Windows・Linuxで始められます。以下はNeo4j Community 2026.09.0を取得し、両方のポートを自分のコンピューターにだけ公開します。実行前にreplace_this_passwordを自分で決めたパスワードに変更してください。実習データはgraphrag-demo-dataボリュームに保存されます。
docker run -d --name graphrag-demo \
-p 127.0.0.1:7474:7474 -p 127.0.0.1:7687:7687 \
-e NEO4J_AUTH=neo4j/replace_this_password \
-v graphrag-demo-data:/data \
neo4j:2026.09.0起動したらhttp://127.0.0.1:7474を開きます。

架空の3社をつなぎ答えを探す
ユーザー名neo4jと設定したパスワードでログインします。最初のクエリを入力欄で実行すると、Demo A・B・Cと契約・買収の関係が作られます。関係には架空の原文ファイル名、ページ、買収日も保存します。
MERGE (a:DemoCompany {name: 'Demo A'})
MERGE (b:DemoCompany {name: 'Demo B'})
MERGE (c:DemoCompany {name: 'Demo C'})
MERGE (a)-[contract:CONTRACTED_WITH]->(b)
SET contract.source = 'demo-contract.pdf', contract.page = 1
MERGE (c)-[purchase:ACQUIRED]->(b)
SET purchase.date = '2026-10-01',
purchase.source = 'demo-notice.pdf', purchase.page = 2
RETURN a, b, c;2番目のクエリはAの取引先を探し、その取引先を買収した会社をたどります。期待する結果はDemo B、Demo C、2026-10-01と両方の原文ファイル名です。回答と根拠を一緒に返すことで、関係の誤りを原文で確認できます。
MATCH (:DemoCompany {name: 'Demo A'})-[contract:CONTRACTED_WITH]->(b)
MATCH (c:DemoCompany)-[purchase:ACQUIRED]->(b)
RETURN b.name AS supplier, c.name AS acquirer,
purchase.date AS acquisition_date,
contract.source AS contract_source,
purchase.source AS notice_source;PDFとOllamaをつなぐ際に加わる作業
実際のPDFでは、テキスト抽出とエンティティ・関係抽出を行ってからグラフに保存します。会社名の表記揺れを同じエンティティにまとめ、関係の向き・日付・出典を残します。まず2〜3文書だけで抽出関係を確認してください。買収関係の誤りが後の回答にも影響するためです。
Neo4j GraphRAGのOllamaLLMとOllamaEmbeddingsでローカルモデルを接続できます。チャットモデルが回答を作り、埋め込みモデルがベクトル検索を担当します。PythonをDocker内で実行する場合はOllamaの接続先を指定します。コンテナのlocalhostはホストではなく、そのコンテナを指します。
同じ文書と質問で比較し、単一の事実検索と文書間の関係質問を分けます。正しい根拠が取れるか、回答までの待ち時間を記録してください。関係質問に効果があればグラフを増やし、差が小さければベクトル検索を維持します。画面が開かない場合はdocker logs graphrag-demoで起動ログとポート競合を確認します。

用語の注釈
大規模言語モデル — 大量のテキストデータから言語パターンを学び、文脈に沿ったテキストを処理・生成するモデルです。
本文に戻る
よくある質問
- この記事で最初に確認すべきことは何ですか?
- 契約書にはA社とB社の取引が、別の通知にはB社を買収したC社が登場します。「A社の取引先を買収した会社は?」という質問には、両方の文書をつなぐ必要があります。GraphRAGは関係をグラフに保存し、必要なつながりと原文をLLMに渡します。
