图谱检索 GraphRAG
向量检索擅长「语义相似」,但不擅长回答「A 和 B 是什么关系」「谁影响了谁」这类需要多跳推理的问题。GraphRAG 把知识组织成图,弥补这一盲区。
1. 向量检索的盲区
问题: "导致项目延期的关键风险有哪些?它们如何相互关联?"
向量检索: 召回零散的几段描述,但拼不出「风险 A → 引发 → 风险 B」的链路
图谱检索: 沿实体关系游走,还原完整的因果链当答案依赖实体间的结构关系而非文本相似度时,纯向量检索会力不从心。
2. 什么是 GraphRAG
GraphRAG(微软提出)分两步:
- 建图:用 LLM 从文档抽取「实体—关系—实体」三元组,聚合成知识图谱。
- 检索:沿图游走做局部查询,或对整图做社区摘要做全局查询。
ℹ️图与向量的分工
向量负责「找语义相近的片段」,图负责「理清实体间的关系」。两者常组合:先用图定位相关实体,再取回原文喂给 LLM。
3. 抽取与索引
# 用 LLM 从一段文本抽取三元组(示意)
prompt = f"""
从下面文本抽取实体关系,输出 JSON 列表,每项含 subject/relation/object:
{chunk}
"""
triples = llm.json(prompt) # [{"subject":"项目X","relation":"依赖","object":"服务Y"}, ...]
# 写入图数据库(Neo4j / Nebula 等)
for t in triples:
graph.merge_entity(t["subject"])
graph.merge_entity(t["object"])
graph.add_edge(t["subject"], t["object"], t["relation"])4. 两种查询模式
| 模式 | 适合 | 做法 |
|---|---|---|
| 局部查询 | 具体实体问答 | 从相关节点沿边游走,取邻域子图 + 原文 |
| 全局查询 | 整体总结(「这套文档的主题是什么」) | 对图做社区检测,逐层摘要再汇总 |
⚠️建图有额外成本
抽取三元组依赖 LLM,文档量大时耗时且烧钱;图质量高度依赖抽取 prompt。小语料、浅关系场景,普通 RAG 已够用,别为了用图而用图。
5. 适用场景
- 科研文献的「方法 A 引用了谁、被谁改进」
- 企业内部的「谁负责什么、向谁汇报」组织问答
- 运维领域的「服务依赖与故障传播链」
💡先用向量,不够再上图
经验法则:先跑通向量 RAG 并用第 13 章指标评估。只有当「多跳关系 / 全局总结」类问题持续答不好时,再引入 GraphRAG。
🎯练习
挑一段你熟悉的文档,手写 5 个三元组(实体—关系—实体),思考其中哪几个问题用向量检索答不出、但用图能答出。
小结
- 向量检索弱在多跳关系与全局总结,GraphRAG 用知识图谱补位
- 流程:LLM 抽三元组建图 → 局部游走 / 全局社区摘要
- 图与向量互补,常组合使用
- 建图有额外成本,先用指标验证确有需要再引入
- 下一章看让模型自主决定「何时检索」的 Agentic / Self-RAG →