GraphRAG如何让知识图谱信息检索焕然一新?
摘要:GraphRAG:当 RAG 遇上知识图谱,信息检索从此不一样了 假设你把公司过去三年的所有周报、会议纪要、项目文档丢进一个 RAG 系统,然后问它:"过去一年里,研发团队和产品团队之间的主要分歧有哪些?&
GraphRAG:当 RAG 遇上知识图谱,信息检索从此不一样了
假设你把公司过去三年的所有周报、会议纪要、项目文档丢进一个 RAG 系统,然后问它:"过去一年里,研发团队和产品团队之间的主要分歧有哪些?"——大概率你会得到几段看起来相关的文字片段,但拼不出一个完整的答案。
这不是幻觉,也不是模型不够强,而是传统 RAG 的架构天生就有个短板:它只会找局部相关的文本片段,不会"连点成线"。
微软在 2024 年 7 月开源了 GraphRAG(GitHub: microsoft/graphrag),用知识图谱彻底重构了 RAG 的检索逻辑。目前已超过 31K Star,成了 RAG 领域绕不开的话题。
这篇文章聚焦两件事:GraphRAG 的核心思想与原理,以及围绕它生长出来的开源生态——包括 GraphRAG 的实现项目和应用项目。
一、传统 RAG 的问题出在哪?
先快速回顾传统 RAG(Retrieval-Augmented Generation)的工作方式:
把文档切成一堆小块(Chunks)
用 Embedding 模型把每个块变成向量
用户提问时,把问题也变成向量,去向量库里找最相似的几个块
把找到的块喂给 LLM,让它基于这些上下文生成回答
这套流程对具体的、指向明确的问题效果不错——比如你问"Kubernetes 的 liveness probe 支持哪些配置参数?"或者"2024 年第三季度的营收是多少?",它能精准命中对应的文本片段,给出靠谱的答案。
但如果你问的是这类问题:
"过去一年里,导致项目延期的根本原因有哪些共性?" — 答案散落在几十份项目复盘报告中
"张三和李四虽然不在同一个部门,但他们之间有什么业务关联?" — 需要从组织架构、项目协作、邮件往来等多个文档中推理
"公司技术栈的演进趋势是什么?" — 需要综合多年的技术选型文档、架构评审记录
传统 RAG 就抓瞎了。为什么?因为这些问题的答案散落在整个文档库的各个角落,不是某一两个文本块能覆盖的。向量检索只给你"局部最优"——找到几个看起来相关的片段,但没法帮你把散落各处的信息串联起来。
一句话:传统 RAG 是"只见树木,不见森林"。
二、GraphRAG 的核心思想:先画一张知识地图
GraphRAG 的解法非常直觉——在检索之前,先用 LLM 把整个文档集合建成一张知识图谱,然后在这张图上做检索。
整个流程分两个大阶段:索引阶段和查询阶段。
2.1 索引阶段:从文本到知识图谱
用大白话说:把一堆非结构化文本,变成一张结构化的知识网络。
Step 1:文本切块(Text Chunking)
跟传统 RAG 一样先切块,但目的不是做向量检索,而是喂给 LLM 做信息提取。
Step 2:实体和关系提取(Entity & Relationship Extraction)
这一步是 GraphRAG 的灵魂。对每个文本块,调用 LLM 提取其中的实体(人、地点、事件、组织等)和关系(谁跟谁有什么关系)。
举个例子,假设某份会议纪要中有这段话:
"2024年Q3复盘会上,CTO王刚指出:搜索团队使用的 Elasticsearch 7.x 集群频繁 OOM,建议迁移到自研的 KSearch 引擎。搜索负责人林涛表示团队正在与基础架构组合作评估方案,预计Q4完成POC。"
GraphRAG 会从中提取出:
实体:王刚(人物/CTO)、林涛(人物/搜索负责人)、搜索团队(组织)、基础架构组(组织)、Elasticsearch 7.x(技术组件)、KSearch 引擎(技术组件)、2024年Q3复盘会(事件)
关系:王刚 → 建议迁移 → KSearch 引擎、搜索团队 → 使用 → Elasticsearch 7.x、林涛 → 负责 → 搜索团队、搜索团队 → 合作 → 基础架构组、Elasticsearch 7.x → 存在问题 → 频繁OOM
这些零散的事实被结构化之后,就能"连点成线"了。
Step 3:构建知识图谱
把所有文本块中提取的实体和关系汇总,去重、合并,构建一张完整的知识图谱。同名实体在不同上下文中的描述会被合并为一个节点。
Step 4:社区检测与分层(Community Detection)
这一步特别关键。GraphRAG 使用图聚类算法(如 Leiden 算法)在知识图谱上检测社区——也就是一组紧密关联的实体群。
