跳到内容

索引架构

关键概念

知识模型

为了支持 GraphRAG 系统,索引引擎的输出(在默认配置模式下)与我们称之为 GraphRAG 知识模型的知识模型对齐。该模型旨在成为底层数据存储技术的抽象,并为 GraphRAG 系统提供一个通用的交互接口。在正常用例中,GraphRAG 索引器的输出将加载到数据库系统,GraphRAG 的查询引擎将使用知识模型数据存储类型与数据库进行交互。

工作流

由于我们数据索引任务的复杂性,我们需要能够将我们的数据管道表达为一系列多个相互依赖的工作流。

---
title: Sample Workflow DAG
---
stateDiagram-v2
    [*] --> Prepare
    Prepare --> Chunk
    Chunk --> ExtractGraph
    Chunk --> EmbedDocuments
    ExtractGraph --> GenerateReports
    ExtractGraph --> EmbedEntities
    ExtractGraph --> EmbedGraph

LLM 缓存

GraphRAG 库在设计时考虑了 LLM 交互,使用 LLM API 时常见的挫折是由于网络延迟、节流等引起的各种错误。由于这些潜在的错误情况,我们在 LLM 交互周围添加了一个缓存层。当使用相同的输入集(提示和调优参数)发出完成请求时,如果存在,我们将返回缓存结果。这使得我们的索引器对网络问题更具弹性,可以幂等地操作,并提供更高效的最终用户体验。

提供者和工厂

GraphRAG 中的几个子系统使用工厂模式来注册和检索提供者实现。这允许深度定制以支持您可能使用但未直接内置于 GraphRAG 中的模型、存储等。

以下子系统使用工厂模式,允许您注册自己的实现

  • 语言模型 - 实现您自己的 chatembed 方法,以使用内置 OpenAI/Azure 支持之外的您选择的模型提供者
  • 缓存 - 除了我们提供的文件、blob 和 CosmosDB 缓存之外,创建您自己的缓存存储位置
  • 记录器 - 除了内置的文件和 blob 存储之外,创建您自己的日志写入位置
  • 存储 - 除了内置的文件、blob 和 CosmosDB 存储之外,创建您自己的存储提供者(数据库等)
  • 向量存储 - 实现您自己的向量存储,而不是内置的 lancedb、Azure AI Search 和 CosmosDB
  • 管道 + 工作流 - 使用自定义的 run_workflow 函数实现您自己的工作流步骤,或注册整个管道(命名工作流列表)

每个子系统的链接都指向工厂的源代码,其中包含默认内置实现的注册。此外,我们对语言模型进行了详细讨论,其中包括自定义提供者的示例,以及一个演示自定义向量存储的示例笔记本

所有这些工厂都允许您使用任何您想要的字符串名称注册实现,甚至直接覆盖内置的实现。