【大模型】GraphRAG入门

412 阅读5分钟

GraphRAG是什么?

GraphRAG(Graph Retrieval-Augmented Generation)是一种结合了知识图谱(Knowledge Graph)与检索增强生成(RAG)的技术,旨在提升大语言模型(LLM)在复杂问答、知识推理等任务中的准确性和可解释性。

优势和挑战

传统RAG的局限

  • 碎片化检索:传统RAG(如基于向量相似度检索)可能返回孤立、片段化的文本,难以捕捉实体间的深层关系。
  • 缺乏全局上下文:无法整合跨文档的复杂关联(如“某公司的CEO的配偶创办的基金会”这类多跳问题)。

GraphRAG优势

  • 多跳推理:直接通过图路径回答复杂关联问题。
  • 可解释性:答案可追溯至图谱中的具体节点和边。
  • 动态更新:新增知识时只需更新图谱,无需重新训练模型。

GraphRAG挑战

  • 图谱质量:错误的三元组会导致级联误差。
  • 稀疏场景:冷门实体的关系可能缺失。
  • 计算成本:大规模图查询的实时性优化。

核心思想

  • 知识图谱作为记忆库:将结构化知识(实体、关系、属性)存储在图数据库中(如Neo4j),而非非结构化文本。
  • 图感知检索:通过图查询(如Cypher、SPARQL)或图神经网络(GNN)显式挖掘实体间的多跳路径,提供逻辑连贯的上下文。
  • 生成增强:LLM基于图谱检索到的子图(包含实体、关系、文本描述)生成答案,兼具事实性与推理能力。

工作流程示例

问题:“爱因斯坦获得诺贝尔奖的研究领域与哪些技术发明有关联?”

1、图谱构建:从文献中提取实体(爱因斯坦、诺贝尔奖、光电效应、激光技术)及关系(爱因斯坦-研究->光电效应光电效应-应用->激光技术)。

2、图检索:定位“爱因斯坦→诺贝尔奖→光电效应→激光技术”的路径。

3、生成答案:LLM结合子图和原始文本描述,生成:“爱因斯坦因光电效应获诺贝尔奖,该理论后来成为激光技术的基础。”

技术实现

  • 图谱构建:用NLP工具(如spaCy、UIMA)抽取实体关系,或结合LLM自动构建(如通过GPT-4生成三元组)。
  • 检索策略:混合图检索(路径查找)与向量检索(文本语义匹配)。
  • 生成模型:微调LLM以理解图谱输入(如将子图序列化为文本或特殊标记)。

FAQ

底层数据频繁更新适合使用GraphRAG吗?

底层数据频繁更新时,GraphRAG 可以用,但必须把“图模式”做成:

  • 只保留缓慢变化的骨架(实体、长期关系);
  • 把高频波动的字段(价格、库存、状态、点击数)迁出图,做成外部时间序列表/KV 存储;
  • 查询时图查骨架 + 外表补数值,两者一起送进 LLM。

否则,每一次高频更新都会触发:

  • 图数据库的锁/事务风暴 → 写入吞吐掉一个量级;
  • 子图版本爆炸 → 历史快照把磁盘吃光;
  • 向量/文本索引频繁重建 → CPU 被拖死;
  • LLM 上下文里混入过期值 → 答案前后矛盾。

把“变”与“不变”拆开

数据特征举例在图里?存储形态更新频率
静态骨架公司、产品、人、品牌、地理、法规条款✅ 主图(冷图)图数据库(Neo4j/TigerGraph)天/周级
准静态关系股权结构、隶属、上下游、合作、位于、属于✅ 主图同上天/周级
快速属性股价、库存、PV、UV、评分、物流状态❌ 迁出KV/RDB/时序库(Redis、Postgres、Influx)秒/分钟级
临时事件订单、支付、传感器读数、日志❌ 迁出事件流(Kafka)+ 物化视图毫秒级

查询链路:图给上下文,外表给实时值

===>用户问题:

“X 公司当前股价是多少?它的最大股东 Y 上周减持后,还持有多少比例?”

===>检索&召回步骤:

1、图查询(只读,毫秒级)

MATCH (c:Company{name:'X'})<-[h:HOLD]-(y:Shareholder{name:'Y'})
RETURN h.ratio as last_ratio, h.lastUpdate as ratio_ts

→ 拿到“最近一次记录的持股比例 12 %,上周三更新”。

2、外部 KV 查(Redis)

GET x_stock_price → 18.42 USD

3、Prompt 拼装

已知:  
- X 公司实时股价 18.42 USD(来源:交易所,更新时间 14:30:05)。  
- 根据知识图谱,Y 最近一次披露的持股比例为 12%,披露日 2025-09-17。  
请回答用户问题……

4、LLM 生成答案

关键点

  • 图只承担“关系定位”和“缓慢属性”,不背实时值的锅;
  • 实时值在最后一秒才捞,保证新鲜;
  • 若监管要求“必须用最新披露比例”,则把“披露事件”也当事件流,图里存“指针”,外表存“最新值”,查询时二次确认。

什么时候不该用GraphRAG?

  • 业务全是单点属性查询(如“当前汇率”“此刻温度”),无多跳关系 → 直接 KV+RAG 足够;
  • 更新频率高到毫秒级,且每次更新都要立即体现在答案(如高频交易策略定价)→ 图骨架也来不及,LLM 直接调实时 API;
  • 图谱规模 <10 万节点,关系简单 → 传统 RAG+向量召回更轻。

GraphRAG 不怕“数据变”,就怕“把变得太快的数据塞进图”。

把图当“稳定骨架”,把快变数据当“外挂血条”,就能在频繁更新的场景里既享受图谱的多跳推理,又不被实时写入拖垮。