本文档描述了 MetaGPT 的检索增强生成 (RAG) 系统,该系统通过从外部知识源检索相关信息来增强语言模型的响应。MetaGPT RAG 实现提供了一个灵活的框架,用于创建、管理和使用检索增强的 LLM 应用程序。
MetaGPT 中的 RAG 系统构建在 LlamaIndex 之上,提供了一整套工具来
来源: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 系统包含以下主要组件
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 的重排 API | CohereRerankConfig |
| 对象排名器 | 根据对象字段值进行排名 | ObjectRankerConfig |
来源:metagpt/rag/factories/ranker.py19-30 metagpt/rag/schema.py111-153
使用 RAG 系统的典型工作流程包括
来源:metagpt/rag/engines/simple.py187-196 metagpt/rag/benchmark/base.py137-166
有三种主要方法可以创建 SimpleEngine
从目录中的文档或文件列表中创建引擎
来源:metagpt/rag/engines/simple.py90-135
从实现 RAGObject 协议的 Python 对象创建引擎
来源:metagpt/rag/engines/simple.py137-172 metagpt/rag/interface.py7-18
从先前持久化的索引创建引擎
来源:metagpt/rag/engines/simple.py174-185
RAG 系统支持通过 RAGEmbeddingFactory 支持各种嵌入模型
来源:metagpt/rag/factories/embedding.py18-112
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系统包含一个基准测试框架,可以评估以下指标的表现
来源: 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
在可用时,系统可以使用OmniParse进行高级PDF文档提取
来源: metagpt/rag/engines/simple.py393-411 metagpt/rag/schema.py229-269
RAG系统可以集成到MetaGPT的角色和动作中,以增强它们通过外部知识的能力
通过使用RAG系统,MetaGPT角色可以在其推理和响应生成中访问和整合外部知识。
MetaGPT RAG系统为检索增强生成提供了一个强大而灵活的框架。通过结合各种检索机制、嵌入模型和排名器,它能够创建知识增强型应用程序,这些应用程序可以利用检索系统和语言模型两者的优势。