传统向量检索的天花板

传统 RAG 用向量相似度检索——把文档切块、做 Embedding、用户提问也做 Embedding、找最近邻。这套方法对「找相关段落」很有效,但对需要多跳推理的问题就力不从心了。比如「A 公司收购的那家公司的创始人之前在哪家公司工作过」,这种问题需要在知识图谱上跳好几跳,单纯靠向量相似度找段落很难一次找全。

另一个问题是全局摘要类问题。比如「这批文档主要讲了哪几个主题」,向量检索只能返回和问题最相似的几段,没法给出全局视角。GraphRAG 就是为了解决这些天花板问题而生的。

传统 RAG 擅长「找相关段落」,GraphRAG 擅长「理解关系网络」。前者是点检索,后者是图遍历。
本文核心知识点
  • GraphRAG在向量检索基础上引入知识图谱,支持多跳关系推理。
  • 实体抽取用大模型从文档中提取实体和关系,构建图谱。
  • 混合检索向量语义检索加关键词精确匹配,两路结果融合。
  • 重排对初筛结果做二次精排,提升最终送入模型的质量。
GraphRAG 配图:中央发光圆形知识图谱网络,周围文档图标和搜索框通过箭头连接,蓝色渐变扁平风格
GraphRAG 的核心:中央是知识图谱网络,周围是原始文档和查询入口。

GraphRAG:把知识图谱接进来

GraphRAG 的思路是:先用大模型从文档里抽取实体和它们之间的关系,存成一张知识图谱。用户提问时,不只做向量检索,还在图谱上做遍历——找到问题涉及的实体,沿关系边走,把相关的邻居实体和它们的描述一起捞出来。

# GraphRAG 的基本流程
# 1. 离线建图阶段:
#    - 从每篇文档中用 LLM 抽取实体(人名、公司、产品等)
#    - 抽取实体之间的关系(收购、投资、任职等)
#    - 把实体和关系存入图数据库

# 2. 在线查询阶段:
#    - 用户问题先做实体识别,找到涉及哪些实体
#    - 在图谱上找到这些实体及其一跳/两跳邻居
#    - 把图谱信息和向量检索结果一起拼进上下文
#    - 交给 LLM 生成最终答案

实体抽取与图谱构建

建图阶段最耗成本的是实体抽取。你要给 LLM 一个提示词,让它从每段文本里抽出实体和关系。提示词要定义好实体类型(公司、人物、产品、地点)和关系类型(收购、任职、竞品),并且要求输出结构化格式(JSON)方便入库。

抽取完之后要做实体对齐——不同文档里提到「阿里巴巴」和「阿里」其实是同一家公司,要合并成同一个节点。这一步通常靠规则加 Embedding 相似度结合做,纯人工对齐成本太高。

混合检索:向量加关键词

纯向量检索有个软肋:精确匹配能力差。用户搜「Model 3」,向量检索可能把「汽车」相关的段落都捞出来,但精确含「Model 3」的段落不一定排第一。混合检索就是向量语义加关键词精确匹配两路并行,最后融合排序。

检索路线擅长短板
向量检索语义相近的模糊匹配精确术语排不上来
关键词检索精确匹配专有名词同义词泛化差
图谱遍历多跳关系推理建图成本高

重排策略:精排怎么排

初筛阶段从几万条里捞出 Top 50,这一步追求快,用向量距离就够了。但最终只送 5 条给 LLM,这 5 条选谁,要做精排。精排用一个 Cross-Encoder 模型——它把问题和每条候选文档拼在一起,直接打分,比向量相似度更准,但慢,所以只能用在小候选集上。

# 混合检索加重排的完整管线
# 1. 粗筛:向量检索 Top 50 + 关键词检索 Top 50,合并去重
# 2. 重排:Cross-Encoder 对合并后的候选集打分,取 Top 10
# 3. 图谱补充:如果问题涉及多跳关系,从图谱补充相关实体描述
# 4. 组装:把 Top 10 文档片段 + 图谱信息拼成 LLM 上下文