导读 大家好,我是古思为,我们团队主要做 NebulaGraph 这个项目,它是一个很多国内外厂商都在用的开源的分布式图数据库,同时我们也做开源社区。本次分享将介绍我们这一年多来在 GraphRAG 方面的工作。文章将从三个方面展开,首先是去年 8 月提出 GraphRAG 方法时解决的问题、简单的策略与经验以及后面业界产生的新方法,接着分享我们在 GraphRAG 领域的沉淀以及在产品中的应用,最后简单介绍一下对未来工作的规划。
1. GraphRAG 背景介绍
2. 我们的方法
3. 未来工作
分享嘉宾|古思为 NebulaGraph GenAI TL
编辑整理|胡绍阳
内容校对|李瑶
出品社区|DataFun
GraphRAG 背景介绍
2. RAG 挑战
细粒度检索:碎片化知识的召回
举个例子,做 chunk 分块是一个很强的对信息浓度的假设,无论是用语义的方式还是固定大小来分块,一旦确定了这个分块,其实对知识被召回的数据的信息浓度做了一个很强的假设,有的时候就存在一些重要而细粒度的分散的信息没办法进行召回,质量就会有些损失。
全局上下文:丢失链接
这里指的是,索引的知识块中,核心知识点和其他知识点的关联,有些知识有局部性,例如 A 和 B 在一个块关联,B 和 C 在一个块关联,C 和 D 在一个块关联,如果某些任务依赖于全局的上下文,但任务中又只提及 A 和 D,这中间的关联在做 chunk 的 RAG 索引一般是丢失的,无法获取全局上下文的关联。
语义相似度:相关性错配
传统 RAG 的索引的方法追求的是相似,但是 RAG 捞取上下文学习的目标是相关,相似和相关很大程度是一回事,但他们之间也存在没有交集的一部分,这种情况其实就是相似性召回中产生幻觉的一种来源。
分层摘要:宏观问题挑战
例如索引了 100 首诗,有一种类型的问题需要回答哪些诗与家国情怀或者自然景观有关,这种情况下用 RAG 就可以,但如果问哪些诗比较奇怪,这属于宏观性的问题,这类问题可以通过上下文总体学习来召回,或者做一定程度的分层摘要来回答,总之必须了解整体诗集讲什么才能回答。
分割内容可能会使检索细粒度、分散的知识变得具有挑战
分区可能会在多个片段中稀释关键信息,使其更难捕获完整的上下文。
线性分割大块知识可能会导致丢失全局上下文 / 连接;
面向连接的检索在上下文分散在多来源(不具有局部性)时可能有挑战。
基础模型通常依赖于常识或字面意义,导致相关性(相关性幻觉)的错误正例;
高相似度(例如,95%)并不保证相关性;上下文无关的片段可能看起来非常相似(例如,虚构的食谱或不存在的情节)。线性分割大块知识可能会导致丢失全局上下文 / 连接面向连接的检索在上下文分散在多来源(不具有局部性)时可能有挑战。
难以从多个来源的分散信息中回答广泛、全局的问题;
需要从整个数据集中总体获得洞察,而不是某几个孤立的片段。
3. 图结构数据
4. GraphRAG
5. GraphRAG Examples
相关性 vs 相似性
大海捞针
穿针引线
投影 Meta/Domain 知识到 Pipeline
Graph Algo:
Node Importance(HippoRAG)
Community Detection(MS From Local to Global)
结构化数据 RAG
在检索方法方面,Chunk-Based Baseline RAG 是基于整体相似性进行语义向量搜索,同时查询与块匹配以寻找相似上下文。而 GraphRAG 从关键实体开始图形检索,同时使用图推理或子图检索通过关系找到相关上下文。
在相关性评估方面,Chunk-Based Baseline RAG 依赖语义相似性,基于概率阈值比较整个查询与块,同时倾向于找到"相似"的上下文,即使它们不相关。而 GraphRAG 从细粒度实体提取开始,遵循高质量关系(手动定义或由大型语言模型定义)进行精确的上下文匹配。
在生成准确性方面,Chunk-Based Baseline RAG 会产生幻觉答案,而 GraphRAG 能够正确识别缺乏相关内容。
在检索方法方面,Baseline RAG 依赖向量搜索基于查询的整体相似性检索块,而 GraphRAG && VectorRAG 是结合向量搜索和基于图的索引,以实现更全面的上下文检索。
在细粒度检索方面,Baseline RAG 能成功检索出包含⾼浓度 NASA 相关内容的块,然而⼀些细粒度的信息可能在聚焦于其他主题的块中被稀释。GraphRAG && VectorRAG 能有效捕获高浓度 NASA 块和较小的、分散的相关信息片段,同时图索引有助于连接分散的知识。
在上下文完整性方面,Baseline RAG 由于稀释而存在遗漏关键小段的风险,同时可能导致答案不完整。GraphRAG && VectorRAG 能通过合并向量和图方法实现最佳性能,同时通过链接相关实体确保更完整和连贯的问题相关知识检索。
在检索方法方面,Baseline RAG 利用语义向量搜索基于整体相似性匹配查询与整个知识库块,但对于需要多跳推理和理解复杂互连的查询效果不佳。GraphRAG 采用基于图的检索,从关键实体开始,跨多个跳跃遍历关系。同时利用知识图谱来连接实体并追踪相关路径,以全面收集信息。
在多跳查询方面,Baseline RAG 在处理多跳查询时遇到困难,因为无法有效地跟踪分段块之间的关系,除非信息在同⼀块内(这并不总是如此),否则无法连接分散的信息片段。GraphRAG 通过遵循知识图谱中的关系,高效管理多跳查询。同时可以从(全球金融危机)无缝导航到(监管变化),然后到(银行 X 的信贷政策)。
在关系捞取方面,Baseline RAG 捕捉分布在不同块中的实体之间复杂相互关系的能力有限,同时可能忽视对全面理解至关重要的关键连接。GraphRAG 擅长识别和利用实体之间的相互关系,同时能整合来自各种相互连接节点的信息,提供全面和准确的响应。
在索引策略方面,Traditional RAG 采用树状结构,硬编码检索,而GraphRAG 具有灵活查询策略的图索引。
在知识集成方面,Traditional RAG 知识集成能力有限,缺乏深度推理,而 GraphRAG 具备封装元知识和推理的能力。
在检索效率方面,Traditional RAG 比较僵化,需要自定义逻辑。GraphRAG 比较灵活,实用现有查询语言(Cypher)和/或 GraphRAG 策略。
在泛化能力方面,Traditional RAG 适应性有限,而 GraphRAG 除图建模本身外,广泛适用于各个领域。
6. GraphRAG 常见问题
GraphRAG 将上下文学习转移到索引阶段
推理成本最多约为原始知识的 20 倍 token
存在权衡取舍,有多种可选策略
这是一种馈赠而非负担,我们可以选择哪些知识进行开卷考试的预先学习
索引阶段的优势:
批量 API 使用
微调的小型模型
有 NER-Link 模型可以利用:
模型的大小要小很多,可以用来辅助做图的索引。
大海捞针(Needle in a Haystack):
当需要细粒度检索或连接分散信息时,Graph Index 和 Retrieval 提供最佳解决方案。
分层索引与摘要:
当需要分层索引和摘要时,将 RAPTOR/Tree-RAG 集成到 Graph DB 中可以将检索转化为灵活的查询模式模板。
全局搜索:
当需要全局上下文或全面理解时,GraphRAG 中的社区检测摘要优于传统方法。预先学习的整体知识表现更好,而等效查询时间的(不使用 GraphRAG 的)RAG 需要将所有知识传递给 LLM。
领域知识集成:
当将领域知识嵌入到流程中时,将这些知识投影和抽象到图模式中是元方法,能够实现稳健的推理和高效的检索。
GraphRAG:
一个更广泛的概念,具有灵活的图形索引结构。
对图结构的要求较低;更具成本效益。
检索通常涉及对图的较少严格推理,对图索引质量的依赖性较低。
KG-RAG:
GraphRAG 的一个特殊(更理想)情况。
图索引涉及完整的知识图谱构建。
将现有或公共知识图谱集成到 RAG 流程中,利用其结构化、高质量的数据进行精确推理和检索。
Schema 有以下 3 种方法:
无 Schema 知识图谱 (Knowledge Graph Schema-less)
有 Schema 知识图谱 (Knowledge Graph Schema-full)
图索引中的元知识 (Meta Knowledge in Graph Index)
编排 (Orchestration)有以下3种方法:
与其他 RAG 检索结果重新排序 (Rerank with other RAG retrieval results)
代理式图查询模板 (Agentic Graph Query Template)
全图处理 (All in Graph)
检索 (Retrieval)有以下 5 种方法:
子图检索 (SubGraph Retrieval)
路径检索 (Path Retrieval)
基于模板的复杂查询 (Template based Complex Query)
文本到图查询 (Text-to-Graph Query)
基于规划的图检索 (Planning based Graph Retrieval)
我们的工作
1. NebulaGraph GenAI Suite
CoT based Prompting
Predefined General Schema
Remote Callable Extractor
Schema Auto-Templating(WIP)
Rule based Correction
Agentic Self-Reflection(Optional)
AST based Correction(WIP)
SubGraphRAG(less invasive)
Existing KG-RAG with CoE
Doc-Aware
Doc-Aware with Community Summary
Doc-Aware with Community Summary + CoE
2. NebulaGraph RAG
未来工作
Memory: 高级 Graph-Based Memory,以应对长期问题。其中包括多个不同层级的summary,可以按不同主题找到之前升华的结论。 DAG Store: 建立元知识持久化层。将元数据以图的形式持久化下来,使部分用户可以 online地进行优化。
原生向量存储: 构建大规模统一知识层。
微调工具包/微调模型用于 GraphRAG 索引/检索。
分享嘉宾
INTRODUCTION
古思为
NebulaGraph
GenAI TL
NebulaGraph 团队 GenAI 总监
NebulaGraph 社区 Commiter、LlamaIndex top 贡献者
NebulaGraph AI Suite 项目作者
Microsoft MVP Python&AI
GraphRAG 技术最初提出与开源(LlamaIndex)实现作者。
往期推荐
AIGC 在蚂蚁保保险领域的应用探索
腾讯大数据实时湖仓智能优化实践
百川智能:深度学习大模型推理性能优化策略
统一元数据管理 - Gravitino 在 B 站的最佳实践
大模型与行业融合:推动钢铁、医疗、教育领域的智能化变革
多模态大语言模型领域进展分享
智能驾驶技术趋势及成熟应用场景
面向生成式 AI 的向量数据库:架构,性能与未来趋势
360在图文多模态大模型领域的突破与实践
西门子利用 LLM 打造通用公司智能助理的实践
点个在看你最好看
SPRING HAS ARRIVED