索引架构
关键概念
知识模型
为了支持 GraphRAG 系统,索引引擎的输出(在默认配置模式下)与我们所称的 GraphRAG 知识模型 对齐。 该模型旨在作为底层数据存储技术的抽象,并为 GraphRAG 系统提供一个通用的交互接口。 在正常使用情况下,GraphRAG 索引器的输出将被加载到数据库系统中,而 GraphRAG 的查询引擎将使用知识模型数据存储类型与数据库进行交互。
DataShaper 工作流
GraphRAG 的索引管道构建在我们的开源库 DataShaper 之上。 DataShaper 是一个数据处理库,允许用户使用定义良好的模式声明性地表达数据管道、模式及相关资产。 DataShaper 在 JavaScript 和 Python 中有实现,并且设计为可扩展到其他语言。
DataShaper 中的核心资源类型之一是 Workflow。 工作流被表示为一系列步骤,我们称之为 verbs。 每个步骤都有一个动词名称和一个配置对象。 在 DataShaper 中,这些动词模拟了诸如 SELECT、DROP、JOIN 等关系概念。每个动词都会转换输入数据表,并将该表传递到管道中。
---
title: 示例工作流
---
flowchart LR
input[输入表] --> select[SELECT] --> join[JOIN] --> binarize[BINARIZE] --> output[输出表]
基于 LLM 的工作流步骤
GraphRAG 的索引管道在 DataShaper 库提供的标准关系动词基础上实现了一些自定义动词。这些动词使我们能够利用 GPT-4 等 LLM 的力量,为文本文档添加丰富的结构化数据。我们在标准工作流中使用这些动词来提取实体、关系、声明、社区结构、社区报告和摘要。这种行为是可定制的,并且可以扩展以支持多种基于 AI 的数据增强和提取任务。
工作流图
由于我们的数据索引任务的复杂性,我们需要能够将数据管道表示为一系列多个相互依赖的工作流。 在 GraphRAG 索引管道中,每个工作流可以定义对其他工作流的依赖关系,从而有效地形成一个工作流的定向无环图(DAG),然后用于调度处理。
---
title: 示例工作流 DAG
---
stateDiagram-v2
[*] --> Prepare
Prepare --> Chunk
Chunk --> ExtractGraph
Chunk --> EmbedDocuments
ExtractGraph --> GenerateReports
ExtractGraph --> EmbedEntities
ExtractGraph --> EmbedGraph
数据框消息格式
工作流之间以及工作流步骤之间的主要通信单元是 pandas.DataFrame
的实例。
尽管可能存在副作用,但我们的目标是采用 数据中心化 和 表格中心化 的数据处理方法。
这使我们能够轻松推理数据,并利用基于数据框的生态系统的强大功能。
我们的底层数据框技术可能会随着时间的推移而变化,但我们主要的目标是支持 DataShaper 工作流模式,同时保持单机使用的便利性和开发者的舒适度。
LLM 缓存
GraphRAG 库在设计时考虑到了与 LLM 的交互,而使用 LLM API 时常见的问题是由于网络延迟、限流等导致的各种错误。 由于这些潜在的错误情况,我们在 LLM 交互周围添加了一个缓存层。 当使用相同的输入集(提示和调优参数)进行完成请求时,如果存在缓存结果,我们将返回该结果。 这使得我们的索引器更能抵御网络问题,具有幂等性,并提供更高效的最终用户体验。