標準 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 是值得在後期評估的方向,特別是當「推薦系統」和「社群關係查詢」需求越來越強時。