微软开源的GraphRAG解读
微软在7月2日开源了GraphRAG,消息一出,技术圈立刻热闹起来。简单来说,这是一种基于图的检索增强生成方法,专门用来对私有或未曾见过的数据集进行问答。它的核心思路是:用大语言模型从数据中提取知识图谱,再把这个图谱聚类成不同粒度的实体社区,最后遍历所有社区生成“社区答案”,汇总成最终输出。整个过程,就像给大模型装上了一张结构化的“知识地图”——不仅知道零散的信息点,还清楚点与点之间的连线关系。

仔细拆解的话,GraphRAG的核心其实就两个图:一个是
文档图谱
实体关系图谱
- :系统输入的原始文件,比如CSV中的一行或一个txt文件。
文档
- :待分析的文本块,块的大小、重叠方式以及是否遵守数据边界都可以配置。
文本单元
- :从文本单元中提取出来的人、地点、事件等具体对象。
实体
- :两个实体之间的联系。
关系
- :带有时间限制的声明信息,比如某实体在特定时间段内的属性陈述。
协变量
- :层次化社区检测后,为每个社区生成的总结报告。
社区报告
- :渲染图视图的布局信息,包含已嵌入和聚类的实体与文档。
节点
1 索引构建过程
文本文档要转换成GraphRAG的知识模型,需要经过几个关键阶段:
1. 文本单元切分
2. 图谱抽取
3. 图谱增强
社区检测
图嵌入
- 注意:社区检测这一步,提供的是显式的拓扑结构理解;而图嵌入则是隐式的表示,两者互为补充。
4. 社区摘要
5. 文档处理
2 两个应用场景
1. 全局搜索
具体实现采用map-reduce方式:把社区报告分割成预定义大小的文本块,每个块生成带评分的中间响应(点列表);然后在reduce步骤中筛选出最重要的点,聚合后作为生成最终响应的上下文。
2. 局部搜索
说白了,局部搜索就是结合知识图谱的结构化数据和原始文档的非结构化数据,让LLM在查询时拥有更充分的上下文。
3 结语
GraphRAG的核心逻辑很清晰:围绕全局搜索和局部搜索两个场景做针对性优化。不过需要警惕的是,它串联了实体识别、实体关系抽取、社区聚类等一系列算法,误差会逐层传播。想真正落地,可能要花费相当大的精力去调优,而且不一定每次都能奏效。但话说回来,它提出的“文档内部+文档外部”双图谱思路,以及基于图谱的嵌入补充方法,确实值得借鉴——至少给RAG的演进提供了一个很有价值的方向。
论文题目:From Local to Global: A Graph RAG Approach to Query-Focused Summarization
论文链接:https://arxiv.org/pdf/2404.16130
项目链接:https://github.com/microsoft/graphrag
-
- 关于宇宙的好的网名有哪些
- 角色扮演 | 1
- 网名