微软官方文档: Getting Started - GraphRAG
GraphRAG 全流程实战指南
graph
语义网络,由节点(实体)和边(关系)组成
分类
主要有两种形式
| 对比维度 | LPG | RDF |
|---|---|---|
| 基本结构 | 节点和边 | 三元组 |
| 节点属性 | 可直接添加 | 表示为额外三元组 |
| 边属性 | 可直接添加 | 传统 RDF 较麻烦,需重ification或 RDF-star |
| 节点类型 | Label,例如 :Person | rdf:type 三元组 |
| 关系类型 | Edge Label,例如 WORKS_AT | Predicate,例如 worksAt |
| Schema | 通常较灵活,偏弱模式 | 可通过 RDFS、OWL 定义正式语义 |
| 查询语言 | Cypher、Gremlin | SPARQL |
| 主要优势 | 图遍历直观、工程开发方便 | 标准化、语义推理、跨系统互操作 |
| 常见应用 | 推荐系统、社交网络、欺诈检测、GraphRAG | 本体、开放知识库、语义网、科学知识整合 |
LPG 节点 + 带类型的边 + 属性
节点和边都可以直接拥有属性,适合图遍历、关系分析和工程应用。

RDF 所有内容拆成三元组
主语 Subject — 谓语 Predicate — 宾语 Object
标签和属性都成为了单独的实体
适合需要丰富语义表达和推理的应用:实体更多,关系更多

构建

1. 本体建模(Ontology Modeling)
本体建模用于定义知识图谱的整体结构,包括需要存储的实体类型、关系类型及其属性。例如,可以定义 Person、Organization 等实体,以及 worksAt、collaboratesWith 等关系。本体相当于知识图谱的数据规范,保证后续抽取的数据结构一致。
2. 数据收集与预处理(Data Collection and Preprocessing)
从文档、数据库、网页、API 等不同来源收集原始数据,并进行清洗、去重和格式统一。对于文本数据,通常还需要进行分句、分词、文档切块和无效内容过滤,为后续知识抽取提供高质量输入。
3. 实体识别与关系抽取(Entity and Relation Extraction)
实体识别用于从文本中发现具有实际意义的对象,例如人物、地点、组织和产品。关系抽取则判断实体之间存在的联系,例如从“Alice 在 OpenAI 工作”中抽取出 Alice — worksAt → OpenAI。
4. 知识融合与消歧(Knowledge Fusion and Disambiguation)
知识融合用于整合来自不同数据源的重复或冲突信息。实体消歧则判断名称相同或相似的实体是否指向同一个真实对象,例如区分“苹果公司”和“苹果水果”,并将同一实体的不同名称进行合并。
5. 知识图谱存储(Knowledge Graph Storage)
将处理后的实体、关系和属性存入图数据库,形成可查询和扩展的图结构。以 LPG 为例,可以使用 Neo4j 等数据库存储节点和边,并通过 Cypher 实现实体检索、多跳遍历和子图查询。
Graph Rag
基于图的增强回答:借助图谱的互联性,为llm提供复杂关系信息,使其能进行更复杂的推理
点的类别划分:聚类
流程
一般情况下是双路召回的,如下图,上面是基于graph rag, 然后下面是基于一般检索

graph rag 流程

搜索方式
global search
Global Search 面向需要综合整个语料库的宏观问题,例如:
- 整个数据集有哪些主要主题?
- 文档中反复出现的主要风险是什么?
- 不同社区的共同观点和分歧是什么?
GraphRAG 在构图阶段会对实体图进行社区划分,并为每个社区生成 Community Report。查询时,Global Search 会检索大量社区报告,通过 Map-Reduce 方式分别生成局部结论,再将重要结论汇总成最终答案

每一个cluster都有一个总结报告,最后所有信息整合起来得到概括性信息
整个过程非常!消耗!token!数量!
local search
Local Search 面向具体实体、事件或关系问题,例如:
- Alice 与哪些项目有关?
- 公司 A 为什么与公司 B 合作?
- 某个模型的主要问题是什么?
查询时,系统首先找到与问题语义相关的实体,并以这些实体作为图中的入口,进一步检索其邻居实体、关系、相关社区报告以及原始文本块。最终将这些局部信息筛选、排序,并放入一个上下文窗口中生成答案。

chunk 的挂载与召回
存储
text_chunks 用来存chunk的
chunks_vdb chunk 向量数据库
entity_chunks 实体→关联chunk_id 列表的反向索引
召回
query → 关键词 →
1) kg (ann)→ source_id 解析候选chunk
* ann = approximate nearest neighbor 近似最近邻搜索
2)
选chunk 策略:
1) 按实体重要性加权轮询
2) 与query 算cosine选top

2797

被折叠的 条评论
为什么被折叠?



