Skip to content

GraphRAG:把知識做成圖,讓 LLM 沿著關係推理

2026年3月12日 1 分鐘
TL;DR 向量搜尋找相似,圖搜尋走關係。當問題需要跨多個實體的推理(岩場→路線→完攀者→難度分布),GraphRAG 比標準 RAG 更有優勢。

標準 RAG 找的是「語義相近的文件」,但有些問題需要的不是語義相似,而是關係推理

「龍洞哪些路線是第一次戶外攀岩的人完攀的」—— 這個問題涉及:

  • 完攀記錄(誰完攀了什麼路線)
  • 使用者資料(他是第幾次戶外)
  • 路線屬性(難度、類型)

向量搜尋找不到這些關係,它只能找「語義上關於新手完攀的文件」,無法沿著實體關係走。

GraphRAG 在知識圖譜上做搜尋,沿著實體之間的關係走,適合這類多跳推理問題。

Knowledge Graph 的結構

攀岩場景的知識圖譜可能長這樣:

[Region: 北部]
    ↓ contains
[Area: 瑞芳]
    ↓ contains
[Crag: 龍洞]
    ↓ has_route
[Route: 龍洞北壁某路線]
    ↓ has_grade     ↓ has_type      ↓ completed_by
[Grade: 5.11a]  [Type: 運動攀登]  [User: Alice]
                                        ↓ has_level
                                   [Level: 中級]

每個節點是一個實體,每條邊是一種關係。圖查詢可以沿著邊走,組合多個條件。

GraphRAG 的兩種模式

Microsoft GraphRAG(2024 年發表)提出了兩種查詢模式:

Local Search:從特定實體出發,沿著關係擴展,回答關於特定實體的問題。

問:「龍洞有哪些適合中級攀岩者的路線」
→ 找到 Crag: 龍洞
→ 遍歷 has_route 邊 → 找到所有路線
→ 過濾 grade 在中級範圍的
→ 取路線描述 → 送給 LLM 生成回答

Global Search:跨整個圖做全局聚合,回答「整體趨勢」類的問題。

問:「台灣北部最受歡迎的岩場是哪些」
→ 聚合 Region: 北部 下所有 Crag
→ 計算每個 Crag 的完攀記錄數
→ 排序後取 Top-K
→ 送給 LLM 生成回答

圖的建構

有兩種建構方式:

手動定義:根據業務邏輯定義實體和關係,從結構化資料(資料庫)填充。

// 從資料庫建構圖
const graph = new KnowledgeGraph();

for (const crag of crags) {
  graph.addNode({ id: crag.id, type: 'Crag', properties: crag });
  graph.addEdge({ from: crag.areaId, to: crag.id, relation: 'contains' });
}

for (const route of routes) {
  graph.addNode({ id: route.id, type: 'Route', properties: route });
  graph.addEdge({ from: route.cragId, to: route.id, relation: 'has_route' });
}

LLM 自動提取:從非結構化文字中提取實體和關係,建構圖。Microsoft GraphRAG 用這種方式,從文件中提取 entity 和 relationship。

攀岩場景有清晰的資料庫 schema,手動定義更準確,不需要靠 LLM 從文字推斷。

Graph + Vector 混合

GraphRAG 不是取代向量搜尋,而是補充它。混合架構:

查詢

[Query Classification]
  ├ 關係型查詢 → [圖查詢] → 結構化結果 → LLM 生成
  ├ 語義型查詢 → [向量搜尋] → 相似文件 → LLM 生成
  └ 混合型查詢 → [圖查詢 + 向量搜尋] → 結合結果 → LLM 生成

圖查詢擅長「誰完攀了什麼」、「這個岩場屬於哪個地區」這類關係問題;向量搜尋擅長「描述類似 X 的路線」這類語義問題。

在攀岩社群的潛力

幾個用 GraphRAG 能顯著改善的查詢:

社群推薦:「和我程度差不多的攀岩者最近在爬什麼路線」

  • 圖查詢:找到相近程度的使用者 → 找他們最近的完攀記錄 → 取路線

進階路徑規劃:「我完攀了龍洞 5.10b 之後,下一條應該挑戰什麼」

  • 圖查詢:找類似風格但難度稍高的路線 → 考慮其他人的完攀順序

岩場關係查詢:「龍洞附近還有什麼岩場」

  • 圖查詢:找到龍洞所屬 Area → 找同一 Area 的其他 Crag

這些查詢靠向量搜尋很難實現,但在知識圖譜上走幾步就能找到。

工程成本

GraphRAG 的工程複雜度比標準 RAG 高很多:

  • 需要維護圖資料庫(Neo4j、或用 D1 模擬)
  • 圖查詢語言(Cypher、Gremlin)有學習成本
  • 圖和向量索引要同步更新

在 Cloudflare Workers 環境,沒有原生的圖資料庫支援。可以用 D1 模擬簡單的圖(adjacency list),但複雜的圖遍歷效能會受限。

整體來說

GraphRAG 解決的是向量搜尋的根本盲點:關係推理。對有明確實體關係的垂直領域(攀岩、醫療、法律),知識圖譜能顯著提升多跳查詢的品質。

代價是工程複雜度的大幅提升。對攀岩社群平台,標準 RAG 目前已經夠用,GraphRAG 是值得在後期評估的方向,特別是當「推薦系統」和「社群關係查詢」需求越來越強時。


參考資料