GraphRAG
GraphRAG
概要(サマリー)
GraphRAG(グラフラグ)とは、文書から人物や物事のつながりを図のように整理し、その関係をたどってAIに答えさせるRAGの手法である。
刑事ドラマの捜査本部にたとえるとわかりやすい。供述調書を細かく切って箱に詰め、キーワードで探すのが従来のRAGだとすれば、GraphRAGはホワイトボードに人物や会社の写真を貼り、「上司」「取引先」「同席」といった関係を線で結んだ相関図を作っておく方法である。
「A社と取引のあるB社の担当者が関わった案件は?」のように、複数の資料をまたいで関係をたどらないと答えられない質問や、「この資料全体の主なテーマは?」のように全体像を問う質問で、従来のRAGより良い結果が出やすいとされている。2024年にMicrosoftの研究チームが手法と実装を公開し、広く知られるようになった。
詳細解説
従来のRAGが苦手なこと
一般的なRAGでは、文書を数百文字ほどのかたまりに分け(チャンク分割)、意味を数値に変えて(エンベディング)、ベクトルデータベースに保存しておく。質問が来たら、意味の近いかたまりを探してAIに渡す。
この方法は「特定の事実がどこに書いてあるか」を探すのは得意だが、次のような質問は苦手である。
- 離れた情報をつなぐ質問: 「田中さんはAプロジェクトのリーダー」と「Aプロジェクトは昨年中止された」が別々の資料にあると、2つを結びつけにくい。
- 全体を見渡す質問: 「資料全体を通して繰り返し出てくるテーマは?」と聞かれても、検索で拾えるのは一部のかたまりだけである。
- 何段階もたどる質問: 「○○さんの上司が担当している取引先は?」のように、関係を2段階以上たどる必要がある質問で途切れやすい。
GraphRAGのしくみ
MicrosoftのGraphRAGは、おおまかに次の手順で動く。
[大量の文書]
│ ① AIが文書を読み、人物・組織・概念などと、その関係を書き出す
▼
[田中部長] ─所属→ [新規事業部] ─開発→ [社内チャットボット]
│ ② 関係の深いもの同士をグループにまとめ、
│ グループごとの要約をAIに作らせておく
▼
[質問が来たら]
全体を問う質問 → グループの要約を使って答える
細かい事実の質問 → 関係の線をたどって答える
- 相関図(ナレッジグラフ)を作る: LLMに文書を読ませ、「人」「組織」「技術」などの要素と、「所属している」「開発した」などの関係を抜き出す。
- グループごとに要約しておく: つながりの強い要素をグループにまとめ、それぞれの要約を事前に作っておく。
全体像を聞かれたらグループの要約を使い、細かい事実を聞かれたら関係の線をたどる。このように質問の種類によって使う情報を変えられるのが特徴である。
従来のRAGとの比較
| 項目 | 従来のRAG | GraphRAG |
|---|---|---|
| データの持ち方 | 文書を切り分けたかたまり | 要素と関係の相関図、グループごとの要約 |
| 得意な質問 | 「○○の仕様は?」のような特定の事実 | 「○○と××の関係は?」「全体の要点は?」 |
| 準備の手間と費用 | 比較的少ない | AIに全文書を読ませるため、時間も料金もかかる |
| 向いている資料 | マニュアル、FAQなど | 報告書、議事録、調査資料など、関係が入り組んだもの |
実際に試すには
MicrosoftのGraphRAGは、Pythonのパッケージとして公開されている。おおまかな流れは次のとおりである。
pip install graphrag
graphrag init --root ./myproject
graphrag index --root ./myproject
graphrag query --root ./myproject --method global --query "この資料全体の主なテーマは?"
init で設定ファイルと文書の置き場所(input フォルダ)を用意し、使うAIのAPIキーを設定してから、index で文書から相関図と要約を作る。query の --method global は全体を見渡す質問向け、--method local は特定の要素について詳しく聞く質問向けである。index の段階でAIを大量に呼び出すため、最初は少ない文書で試し、料金を確認してから対象を広げるとよい。コマンドやオプションはバージョンによって変わることがあるため、公式のドキュメントもあわせて確認したい。
AIコーディングとの関係
GraphRAGの「関係をたどる」という考え方は、ソフトウェア開発とも相性が良い。
- 社内資料の検索: 設計書、議事録、仕様変更の記録など、関係が入り組んだ資料から「この仕様はなぜこう決まったのか」をたどる
- コードの影響範囲の把握: コードの世界でも、関数の呼び出し関係や依存関係をグラフとして扱い、「この関数を変えるとどこに影響するか」をAIに調べさせる取り組みがある
- エージェントの記憶: AIエージェントがこれまでの作業内容や決定事項を関係として記録し、後から参照する仕組みにも、グラフの考え方が使われている
ただし、ちょっとした質問に答えるだけなら、従来のRAGで十分なことが多い。資料の量や質問の種類に合わせて選ぶのが現実的である。
よくある勘違い
従来のRAGの完全な上位互換?
そうではない。マニュアルから「エラーコード104の対処法」を探すような単純な検索なら、安くて速い従来のRAGで十分である。GraphRAGが力を発揮するのは、関係が入り組んだ資料や、全体像を問う質問である。両方を組み合わせて使うこともある。
相関図は人間が手で作る必要がある?
基本的には、AIが文書を読んで自動で作る。人間が一つずつ線を引く必要はない。ただし、AIが関係を読み違えることもあるため、重要な用途では抜き出された内容を確認したり、抜き出す要素の種類を調整したりする必要がある。
GraphRAGを使えば、間違った答えは出なくなる?
いいえ。相関図の作成段階で読み違いがあれば、その誤りをもとに答えてしまうことがある。元の文書に書かれていないことは答えられない点も、従来のRAGと同じである。重要な判断に使う場合は、回答の根拠となった資料を確認することが大切である。
まとめ
- GraphRAGは、文書から人物や物事のつながりを相関図のように整理し、その関係をたどって答えるRAGの手法である
- 離れた情報をつなぐ質問や、全体像を問う質問で、従来のRAGより良い結果が出やすい
- 準備に時間と料金がかかるため、資料の性質や質問の種類に合わせて従来のRAGと使い分ける
情報ソース
- Microsoft Research Blog: GraphRAG: Unlocking LLM discovery on narrative private data
- arXiv: From Local to Global: A Graph RAG Approach to Query-Focused Summarization
- GitHub: microsoft/graphrag
より詳しくAIに聞いてみよう
- MicrosoftのGraphRAGを、少ない文書で試すための手順を教えてください。
- GraphRAGのglobal検索とlocal検索の違いを、具体的な質問例で説明してください。
- GraphRAGの準備にかかる料金を抑えるための工夫を教えてください。
- 従来のRAGとGraphRAGを組み合わせて使う設計の例を教えてください。
- ナレッジグラフとは何か、グラフデータベースとの関係も含めて初心者向けに説明してください。