GraphRAG 深度解析:自動知識圖譜的威力與局限
GraphRAG 深度解析:自動知識圖譜的威力與局限
TL;DR
- GraphRAG:LLM 自動從文件提煉「概念 → 關係」建成圖譜
- 5 分鐘上手:
pip install graphrag && graphrag index - 適用場景:全局問答、流程理解、長程依賴
- 局限:圖譜品質取決於 LLM,不適合精確的領域知識
Part 1:什麼是 GraphRAG?
1.1 普通 RAG 的問題
普通向量搜尋只看「局部相似」:
Query: "這個系統的完整流程是什麼?"
↓
向量搜尋 → 找到相似段落
↓
[段落A] [段落B] [段落C]
(零散的、沒有順序、不知道關係)
問題:AI 只拿到碎片,無法理解「A → B → C」的流程。
1.2 GraphRAG 的解法
GraphRAG 先建立「知識圖譜」,再用圖譜回答:
建圖階段:
文件 → LLM 提煉 → "Kubernetes" → 用到 → "LanceDB" → 部署到 → "Railway"
查詢階段:
Query: "系統流程?"
↓
圖譜遍歷 → 找到完整鏈條
↓
Kubernetes → LanceDB → Railway(有順序、有關係)
Part 2:5 分鐘快速上手
2.1 安裝
pip install graphrag
2.2 建圖譜
# 建立資料夾
mkdir graphrag-blog && cd graphrag-blog
# 複製你的文件
cp ../your-blog/*.md ./
# 設定(可選,用預設也行)
cat > settings.yaml << EOF
llm:
model: gpt-4o-mini
api_key: $OPENAI_API_KEY
embedding:
model: text-embedding-3-small
chunk_size: 512
EOF
# 一鍵建圖譜!
graphrag index --root .
自動做的事:
- 將文件切成 chunks
- LLM 提煉 entities(概念)
- LLM 提煉 relations(關係)
- 建立圖譜索引
時間:100 個 MD 文件約 3-5 分鐘
成本:約 $0.3-0.5(小型專案)
2.3 查詢
# 全局問答(遍歷整個圖譜)
graphrag query "這個系統的完整架構是什麼?" --method global
# 局部問答(圖譜 + 向量混合)
graphrag query "LanceDB 怎麼用?" --method local --json
Part 3:GraphRAG 的「全局」是什麼?
3.1 Global vs Local 模式
| 模式 | 做法 | 適用 |
|---|---|---|
| Global | 遍歷整個圖譜,產生社區摘要 | 「整體架構」「全貌」 |
| Local | 局部圖 + 向量搜尋 | 「具體問題」「細節」 |
3.2 「全局」的真正意思
重要認知:GraphRAG 的「全局」是它從文件理解出來的,不是「真正的全局」。
GraphRAG 建圖流程:
1. 讀你的文件
2. LLM 提煉出它「認為」的概念和關係
3. 建成圖譜
問題:
- 文件沒寫到的,圖譜就沒有
- LLM 可能提煉錯誤
- 不同 LLM 可能產生不同圖譜
Part 4:GraphRAG vs 手動知識圖譜
我在 Career RAG 專案中有一個手動維護的 skill-graph.json:
{
"LangChain": {
"implies": ["Python", "LLM"],
"relatedTo": ["RAG", "Vector Database"]
}
}
4.1 比較
| 面向 | GraphRAG | 手動 skill-graph.json |
|---|---|---|
| 建立方式 | LLM 自動提煉 | 專家手動設計 |
| 知識來源 | 文件內容 | 領域專業知識 |
| 準確度 | 可能有偏差 | 精確(你控制) |
| 可控性 | 黑盒 | 白盒(可編輯) |
| 維護 | 每次重建 | 手動更新 |
| 適用 | 探索未知 | 定義領域知識 |
4.2 何時用哪個?
| 需求 | 選擇 |
|---|---|
| 「LangChain 代表會 Python 嗎?」 | ✅ 手動 skill-graph |
| 「這個專案的流程是什麼?」 | ✅ GraphRAG |
| 「定義技能之間的關係」 | ✅ 手動 skill-graph |
| 「從 blog 探索關聯」 | ✅ GraphRAG |
Part 5:GraphRAG 的局限
5.1 品質取決於 LLM
同一份文件,不同 LLM 可能提煉出:
GPT-4o: "Kubernetes" → "部署到" → "Railway"
GPT-4o-mini: "K8s" → "用於" → "雲端"
哪個對?不確定。
5.2 文件沒寫 = 圖譜沒有
你的文件沒提到 "LangChain implies Python"
→ GraphRAG 不會知道
→ 但 skill-graph.json 可以明確定義
5.3 成本
- 首次建圖:$0.3-0.5(小專案)
- 文件更新 = 需要重建
- 頻繁更新的專案成本較高
Part 6:實際建議
6.1 你需要 GraphRAG 嗎?
你的問題是什麼?
├── 「技能 A 代表技能 B 嗎?」
│ └── ❌ 用手動 skill-graph
│
├── 「這份文件的整體流程?」
│ └── ✅ 考慮 GraphRAG
│
├── 「找相關的程式碼片段」
│ └── ❌ 用 LanceDB Hybrid
│
└── 「探索文件之間的關聯」
└── ✅ 考慮 GraphRAG
6.2 混合架構
如果真的需要,可以混合使用:
┌─────────────────────────────────────┐
│ Skill Graph (手動) │
│ 精確的領域知識(技能推斷) │
└─────────────────────────────────────┘
+
┌─────────────────────────────────────┐
│ GraphRAG (自動) │
│ 從文件探索的關係(全局問答) │
└─────────────────────────────────────┘
+
┌─────────────────────────────────────┐
│ LanceDB Hybrid │
│ 精準的內容檢索(局部搜尋) │
└─────────────────────────────────────┘
關鍵學習
- GraphRAG 不是魔法:它的「全局」是 LLM 從文件猜出來的
- 適合探索,不適合定義:領域知識還是要手動維護
- 門檻很低:5 分鐘就能建好,試試無妨
- 成本要考慮:頻繁更新的專案可能不划算
- 混合使用:GraphRAG + 手動圖譜 + 向量搜尋可以互補