菜单

检索增强生成 (RAG)

相关源文件

本文档描述了 MetaGPT 的检索增强生成 (RAG) 系统,该系统通过从外部知识源检索相关信息来增强语言模型的响应。MetaGPT RAG 实现提供了一个灵活的框架,用于创建、管理和使用检索增强的 LLM 应用程序。

概述

MetaGPT 中的 RAG 系统构建在 LlamaIndex 之上,提供了一整套工具来

  1. 索引和存储文档集合和数据对象
  2. 检索给定查询的最相关信息
  3. 使用检索到的信息增强 LLM 响应
  4. 支持各种检索机制和排名方法

来源:metagpt/rag/engines/simple.py64-71

架构

MetaGPT 的 RAG 系统核心架构由多个组件组成,它们协同工作以提供无缝的检索和增强体验。

来源:metagpt/rag/engines/simple.py64-411 metagpt/rag/schema.py21-269 metagpt/rag/retrievers/base.py11-75 metagpt/rag/interface.py7-24

主要组件

RAG 系统包含以下主要组件

  1. SimpleEngine:集成所有 RAG 组件的主要入口点
  2. Retrievers:从索引文档中获取相关信息的组件
  3. Rankers:按相关性重新排序检索到的文档的组件
  4. Factories:创建检索器、排名器、嵌入和索引的组件
  5. Schema:各种组件的配置类

SimpleEngine

SimpleEngine 类是 RAG 实现的核心,它提供了一个简化的接口来访问底层的检索功能。它扩展了 LlamaIndex 的 RetrieverQueryEngine,并添加了 MetaGPT 特有的功能。

来源:metagpt/rag/engines/simple.py64-186 metagpt/rag/engines/simple.py187-239

检索器和配置

MetaGPT 支持多种检索方法,每种方法都有其自身的配置选项。

支持的检索器

检索器类型描述配置
FAISS使用 FAISS 索引进行基于向量的检索FAISSRetrieverConfig
BM25使用 BM25 算法进行基于关键字的检索BM25RetrieverConfig
Chroma具有持久化存储的基于向量的检索ChromaRetrieverConfig
Elasticsearch支持向量和关键字搜索的混合检索ElasticsearchRetrieverConfig
混合模式合并多个检索器多个配置

来源:metagpt/rag/factories/retriever.py50-73 metagpt/rag/schema.py21-109

检索器工厂

RetrieverFactory 类根据提供的配置创建检索器

来源:metagpt/rag/factories/retriever.py1-157 metagpt/rag/retrievers/base.py11-75

检索器功能

RAG 系统定义了检索器的多个接口来实现特定的功能

  • ModifiableRAGRetriever:支持添加新文档
  • PersistableRAGRetriever:支持将索引保存到磁盘
  • QueryableRAGRetriever:支持查询文档总数
  • DeletableRAGRetriever:支持清除所有文档

这些接口使 SimpleEngine 能够提供一致的 API,而无需考虑底层检索器的实现。

来源:metagpt/rag/retrievers/base.py22-75

排名器和重排

检索到文档后,可以使用排名器来改进相关性排序。

支持的排名器

排名器类型描述配置
LLM 排名器使用 LLM 进行结果重排LLMRankerConfig
Colbert 排名器使用 Colbert 模型ColbertRerankConfig
BGE 排名器使用 BGE 重排模型BGERerankConfig
Cohere 排名器使用 Cohere 的重排 APICohereRerankConfig
对象排名器根据对象字段值进行排名ObjectRankerConfig

来源:metagpt/rag/factories/ranker.py19-30 metagpt/rag/schema.py111-153

RAG 工作流程

使用 RAG 系统的典型工作流程包括

来源:metagpt/rag/engines/simple.py187-196 metagpt/rag/benchmark/base.py137-166

创建 SimpleEngine

有三种主要方法可以创建 SimpleEngine

1. 从文档创建

从目录中的文档或文件列表中创建引擎

来源:metagpt/rag/engines/simple.py90-135

2. 从对象创建

从实现 RAGObject 协议的 Python 对象创建引擎

来源:metagpt/rag/engines/simple.py137-172 metagpt/rag/interface.py7-18

3. 从索引创建

从先前持久化的索引创建引擎

来源:metagpt/rag/engines/simple.py174-185

嵌入模型

RAG 系统支持通过 RAGEmbeddingFactory 支持各种嵌入模型

来源:metagpt/rag/factories/embedding.py18-112

与 LLM 的集成

MetaGPT 的 LLM 接口通过 RAGLLM 类适配 LlamaIndex 使用

来源: metagpt/rag/factories/llm.py21-80

使用示例

基本查询

添加文档

来源: metagpt/rag/engines/simple.py206-222

持久化和加载

来源: metagpt/rag/engines/simple.py223-228 metagpt/rag/engines/simple.py174-185

性能评估

RAG系统包含一个基准测试框架,可以评估以下指标的表现

  • BLEU分数
  • Rouge-L分数
  • 语义相似度
  • 召回率
  • 命中率
  • 平均倒数排名

来源: metagpt/rag/benchmark/base.py27-201

高级特性

混合检索

SimpleHybridRetriever 结合了来自多个检索器的结果

这种方法可以通过并行使用不同的检索方法来提高召回率。

来源: metagpt/rag/retrievers/hybrid_retriever.py10-48

对象节点

RAG系统可以通过ObjectNode类来存储和检索自定义Python对象

来源: metagpt/rag/schema.py202-226 metagpt/rag/engines/simple.py359-370

PDF解析

在可用时,系统可以使用OmniParse进行高级PDF文档提取

来源: metagpt/rag/engines/simple.py393-411 metagpt/rag/schema.py229-269

与MetaGPT集成

RAG系统可以集成到MetaGPT的角色和动作中,以增强它们通过外部知识的能力

通过使用RAG系统,MetaGPT角色可以在其推理和响应生成中访问和整合外部知识。

结论

MetaGPT RAG系统为检索增强生成提供了一个强大而灵活的框架。通过结合各种检索机制、嵌入模型和排名器,它能够创建知识增强型应用程序,这些应用程序可以利用检索系统和语言模型两者的优势。