はじめに
前回の記事では、AI for Science(AI4Science) の概要と、Microsoftが推進する「科学の第5のパラダイム」について解説しました。
AI for Scienceには2つの柱があります。
- シミュレーション・生成: MatterSim、MatterGen、Aurora などのAIエミュレーター
- ナレッジ探索: GraphRAG、LazyGraphRAG による構造化された知識検索
本記事では、2つ目の柱であるGraphRAGについて、概念から実際のインストール・設定までを詳しく解説します。研究者が自分のデータで試せるよう、Azure OpenAI Service と Ollama(ローカルLLM) の両方の設定方法を紹介します。
目次
- GraphRAGとは何か?
- 従来のRAGとの違い
- GraphRAGの処理フロー
- インストールと初期設定
- Azure OpenAI Serviceでの設定
- Ollama(ローカルLLM)での設定
- インデックス構築の実行
- クエリの実行
- 研究者向けユースケース
- まとめ
GraphRAGとは何か?
GraphRAGは、Microsoftが開発したグラフベースのRAG(Retrieval-Augmented Generation) 手法です[1]。
基本情報
| 項目 | 詳細 |
|---|---|
| 開発元 | Microsoft Research |
| ライセンス | MIT(オープンソース) |
| 最新バージョン | v2.7.0(2025年10月) |
| GitHub Stars | 30,500+ |
| 対応Python | 3.10〜3.12 |
| 対応LLM | OpenAI, Azure OpenAI, Ollama(Proxy経由), LiteLLM対応100+モデル |
| GitHub | microsoft/graphrag |
| ドキュメント | microsoft.github.io/graphrag |
GraphRAGの特徴
従来のRAGが「ベクトル類似度による検索」に依存するのに対し、GraphRAGはナレッジグラフを構築することで、より深い理解と推論が可能になります。
| 特徴 | 説明 |
|---|---|
| エンティティ抽出 | 文書から人物、組織、概念などを自動抽出 |
| 関係性の構造化 | エンティティ間の関係をグラフで表現 |
| コミュニティ検出 | Leiden法による階層的クラスタリング |
| コミュニティ要約 | 各クラスタの要約を事前生成 |
| 複数の検索モード | Global / Local / DRIFT / Basic の4種類 |
従来のRAGとの違い
Baseline RAGの限界
従来のRAG(Baseline RAG)は、以下のようなケースで性能が低下します。
| 課題 | 説明 |
|---|---|
| 点と点を繋げない | 異なる文書に散在する情報を統合できない |
| 全体像の把握が苦手 | 「この分野の主要なトレンドは?」といった俯瞰的な質問に弱い |
| 大規模文書の要約困難 | コンテキスト長の制限により、全体を把握できない |
GraphRAGの解決策
| 観点 | Baseline RAG | GraphRAG |
|---|---|---|
| 検索方式 | ベクトル類似度 | グラフ構造 + ベクトル |
| 関係性理解 | 弱い | 強い |
| 全体像把握 | 困難 | コミュニティ要約で対応 |
| 俯瞰的質問 | 苦手 | Global Searchで対応 |
| 特定エンティティの質問 | 普通 | Local Searchで対応 |
GraphRAGの処理フロー
GraphRAGは大きくインデックス構築(Index) と クエリ(Query) の2フェーズで構成されます。
インデックス構築フェーズ
| ステップ | 説明 | LLM使用 |
|---|---|---|
| TextUnit分割 | 文書を分析可能な単位に分割 | ❌ |
| エンティティ抽出 | 人物、組織、概念などを抽出 | ✅ |
| 関係性抽出 | エンティティ間の関係を抽出 | ✅ |
| グラフ構築 | ナレッジグラフを構築 | ❌ |
| コミュニティ検出 | Leiden法でクラスタリング | ❌ |
| コミュニティ要約 | 各コミュニティの要約を生成 | ✅ |
⚠️ 注意: インデックス構築はLLM APIを多用するため、コストがかかります。小さなデータセットから始めることを強く推奨します。
クエリフェーズ
GraphRAGは4種類の検索モードを提供します。
| モード | 用途 | 特徴 |
|---|---|---|
| Global Search | 俯瞰的な質問 | コミュニティ要約を活用、「全体像は?」に強い |
| Local Search | 特定エンティティの質問 | 関連エンティティをファンアウト |
| DRIFT Search | Local + コミュニティ情報 | Local Searchにコミュニティ文脈を追加 |
| Basic Search | シンプルな質問 | 標準的なベクトル検索(Top-K) |
インストールと初期設定
前提条件
- Python 3.10〜3.12
- pip または uv(推奨)
- LLM API(Azure OpenAI / OpenAI / Ollama)
インストール
# pipでインストール
pip install graphrag
# または uvでインストール(推奨)
uv pip install graphrag
プロジェクトの初期化
# 作業ディレクトリを作成
mkdir -p ./my-research/input
# サンプルデータを配置(例:研究論文のテキスト)
# ./my-research/input/ にテキストファイルを配置
# GraphRAGプロジェクトを初期化
graphrag init --root ./my-research
初期化により、以下のファイルが生成されます。
| ファイル | 説明 |
|---|---|
.env |
環境変数(APIキーなど) |
settings.yaml |
GraphRAGの設定ファイル |
prompts/ |
プロンプトテンプレート |
Azure OpenAI Serviceでの設定
Azure OpenAI Serviceを使用する場合の設定方法です。
1. 環境変数の設定
.env ファイルを編集します。
# .env
GRAPHRAG_API_KEY=your-azure-openai-api-key
2. settings.yaml の設定
# settings.yaml
models:
# チャットモデル(GPT-4o推奨)
default_chat_model:
api_key: ${GRAPHRAG_API_KEY}
type: azure_openai_chat
model: gpt-4o
api_base: https://your-instance.openai.azure.com
api_version: 2024-02-15-preview
deployment_name: your-gpt4o-deployment
model_supports_json: true
# 埋め込みモデル
default_embedding_model:
api_key: ${GRAPHRAG_API_KEY}
type: azure_openai_embedding
model: text-embedding-ada-002
api_base: https://your-instance.openai.azure.com
api_version: 2024-02-15-preview
deployment_name: your-embedding-deployment
# チャンク設定
chunks:
size: 1200
overlap: 100
# 入力ファイル設定
input:
type: file
file_type: text
base_dir: input
# 出力設定
output:
type: file
base_dir: output
3. Azure Managed Identity を使用する場合
APIキーの代わりにManaged Identityを使用できます。
models:
default_chat_model:
type: azure_openai_chat
auth_type: azure_managed_identity # APIキー不要
model: gpt-4o
api_base: https://your-instance.openai.azure.com
api_version: 2024-02-15-preview
deployment_name: your-gpt4o-deployment
事前に az login でAzureにログインしておく必要があります。
Ollama(ローカルLLM)での設定
プライバシーを重視する場合や、コストを抑えたい場合は、Ollamaを使用してローカルでLLMを実行できます。
1. Ollamaのインストール
# macOS / Linux
curl -fsSL https://ollama.com/install.sh | sh
# モデルのダウンロード(例:llama3.2)
ollama pull llama3.2
ollama pull nomic-embed-text
2. OllamaをProxy API経由で使用
GraphRAG v2.6.0以降では、LiteLLM を使用して100以上のモデルに対応しています。Ollamaもこの方法で使用できます。
# settings.yaml
models:
# Ollama チャットモデル
default_chat_model:
type: chat
model_provider: ollama
model: llama3.2
api_base: http://localhost:11434
model_supports_json: true
# Ollama 埋め込みモデル
default_embedding_model:
type: embedding
model_provider: ollama
model: nomic-embed-text
api_base: http://localhost:11434
3. Ollama使用時の注意点
| 注意点 | 説明 |
|---|---|
| JSON出力の安定性 | 一部のモデルはJSON形式の出力が不安定な場合があります |
| 処理速度 | ローカル実行のため、GPUがないと時間がかかります |
| 推奨モデル | llama3.2, mistral, qwen2.5 など、指示追従性の高いモデル |
| メモリ要件 | 7Bモデルで8GB以上、13Bモデルで16GB以上のVRAM推奨 |
💡 ヒント: まずはAzure OpenAIまたはOpenAI APIで動作確認してから、Ollamaに移行することを推奨します。
インデックス構築の実行
設定が完了したら、インデックス構築を実行します。
# インデックス構築
graphrag index --root ./my-research
実行中の出力例
⠋ GraphRAG Indexer
├── Loading Input (text) - 5 files loaded
├── create_base_text_units
├── create_final_documents
├── extract_graph
│ ├── Processing chunk 1/50...
│ └── Processing chunk 50/50... ✓
├── create_final_entities
├── create_final_relationships
├── create_final_community_reports
└── ✓ All workflows completed
出力ファイル
インデックス構築が完了すると、output/ ディレクトリに以下のファイルが生成されます。
| ファイル | 説明 |
|---|---|
create_final_entities.parquet |
抽出されたエンティティ |
create_final_relationships.parquet |
エンティティ間の関係 |
create_final_community_reports.parquet |
コミュニティ要約 |
create_final_text_units.parquet |
テキストチャンク |
create_final_documents.parquet |
入力文書メタデータ |
クエリの実行
インデックス構築が完了したら、クエリを実行できます。
Global Search(俯瞰的な質問)
graphrag query \
--root ./my-research \
--method global \
--query "この分野の主要な研究トレンドは何か?"
適した質問例:
- 「この分野の全体像を教えてください」
- 「主要な研究テーマは何ですか?」
- 「どのような組織が関わっていますか?」
Local Search(特定エンティティの質問)
graphrag query \
--root ./my-research \
--method local \
--query "〇〇教授の研究内容と主要な共同研究者は?"
適した質問例:
- 「〇〇とは何ですか?」
- 「〇〇と△△の関係は?」
- 「〇〇に関連する研究者は?」
DRIFT Search(Local + コミュニティ情報)
graphrag query \
--root ./my-research \
--method drift \
--query "〇〇技術の応用分野と将来性は?"
Basic Search(シンプルなベクトル検索)
graphrag query \
--root ./my-research \
--method basic \
--query "〇〇の定義は?"
研究者向けユースケース
ユースケース1: 文献レビューの効率化
課題: 数百本の論文を読んで、分野の全体像を把握したい
解決策:
- 論文のテキストを
input/に配置 -
graphrag indexでナレッジグラフを構築 -
graphrag query --method globalで全体像を把握
# 例: 材料科学分野の論文レビュー
graphrag query \
--root ./materials-papers \
--method global \
--query "固体電解質研究の主要なアプローチと課題は何か?"
ユースケース2: ドメイン知識のナレッジベース構築
課題: 研究室の過去の実験ノート・報告書を構造化して検索したい
解決策:
- 実験ノート・報告書をテキスト化
- GraphRAGでナレッジグラフを構築
- 類似実験や関連知見を検索
# 例: 過去の実験から類似事例を検索
graphrag query \
--root ./lab-notes \
--method local \
--query "リチウムイオン電池の電解質に関する過去の実験結果は?"
ユースケース3: 研究動向の可視化
GraphRAGが生成するナレッジグラフは、可視化ツールで表示できます。
# GraphMLスナップショットを有効化
# settings.yaml に追加
snapshots:
graphml: true
生成された .graphml ファイルは、Gephi や Cytoscape で可視化できます。
コスト最適化のヒント
GraphRAGのインデックス構築はLLM APIを多用するため、コストに注意が必要です。
| 最適化手法 | 説明 |
|---|---|
| 小さく始める | まず数ファイルでテスト |
| チャンクサイズ調整 |
chunks.size を大きくすると呼び出し回数が減少 |
| fastモード | NLPベースの抽出(LLM不使用)も選択可能 |
| モデル選択 | gpt-4o-mini は gpt-4o より低コスト |
| キャッシュ活用 | 再実行時はキャッシュが効く |
# コスト最適化例
chunks:
size: 2000 # デフォルト1200より大きく
overlap: 200
extract_graph:
max_gleanings: 0 # 追加抽出を無効化(精度とのトレードオフ)
まとめ
GraphRAGの要点
- グラフベースのRAG: ナレッジグラフにより、従来のRAGでは困難だった関係性理解・全体像把握が可能
- 4種類の検索モード: Global / Local / DRIFT / Basic で、質問タイプに応じた検索が可能
- オープンソース: MITライセンスで公開、研究利用に最適
- 柔軟なLLM対応: Azure OpenAI, OpenAI, Ollama など多様な環境に対応
研究者へのアクションアイテム
| アクション | リソース |
|---|---|
| GraphRAGを試す | Getting Started |
| 詳細な設定を学ぶ | Configuration Guide |
| コードを読む | GitHub |
| 論文を読む | arXiv |
| コミュニティに参加 | GitHub Discussions |
次回予告
次回の記事では、GraphRAGを使った実際の研究論文のナレッジグラフ構築を行い、文献レビューの効率化を実践します。
参考文献
[1] GraphRAG: Unlocking LLM discovery on narrative private data - Microsoft Research Blog, 2024-02-13
[2] GraphRAG: A Modular Graph-Based Retrieval-Augmented Generation System - arXiv, 2024-04-24
[3] microsoft/graphrag - GitHub - Microsoft, MIT License
[4] GraphRAG Documentation - Microsoft
[5] AI for Scienceとは? #1 - 前回の記事(リンク更新予定)