菜单

RAG系统

相关源文件

检索增强生成 (RAG) 系统使 GPT Academic 能够通过从个人知识库检索信息来增强 LLM 的响应。这使得响应更加准确和上下文相关,特别是对于需要特定参考材料的领域特定问题。

架构概述

RAG 系统围绕几个关键组件构建,这些组件协同工作,提供文档索引和增强型问答。

来源: crazy_functions/Rag_Interface.py47-152 crazy_functions/rag_fns/llama_index_worker.py65-138

RAG 工作器和向量存储

RAG 系统为每个用户维护单独的工作器,这些工作器存储在 RAG_WORKER_REGISTER 中。每个工作器管理自己的向量存储,用于索引和检索文档。

来源: crazy_functions/Rag_Interface.py12 crazy_functions/rag_fns/llama_index_worker.py65-75 crazy_functions/rag_fns/milvus_worker.py79-91

支持的文档格式

该系统支持多种文档格式来创建知识库

来源: crazy_functions/rag_fns/rag_file_support.py1-22

RAG 系统工作流程

文档上传流程

上传文档后,它们将被处理并添加到向量存储中

来源: crazy_functions/Rag_Interface.py17-43 crazy_functions/rag_fns/llama_index_worker.py90-103

问答流程

当用户提出问题时,系统会检索相关信息并生成答案

来源: crazy_functions/Rag_Interface.py99-152 crazy_functions/rag_fns/llama_index_worker.py119-132

嵌入模型

该系统使用 OpenAI 的嵌入模型将文本转换为向量表示

模型名称尺寸描述
text-embedding-3-small1536相比第二代 ada 嵌入模型,性能有所提升
text-embedding-3-large3072英语和非英语任务中最强大的嵌入模型
text-embedding-ada-0021536最强大的第二代嵌入模型

来源: request_llms/embed_models/openai_embed.py34-72 request_llms/embed_models/bridge_all_embed.py19-39

特殊功能

长输入处理

对于超出令牌限制的长输入,系统会

  1. 将输入截断以适应令牌限制
  2. 将完整的原始输入添加到向量存储中
  3. 显示文本预览,中间部分被截断

这确保了长文档能够被有效处理,同时将上下文保持在 LLM 的令牌限制内。

来源: crazy_functions/Rag_Interface.py103-124

命令识别

系统识别出几个特殊命令

  1. 目录路径检测:如果输入是存在的目录路径,则将其视为文档上传请求
  2. 清空向量数据库:使用命令“清空向量数据库”将清除当前向量存储
  3. 常规问题:任何其他输入都将被视为使用 RAG 系统进行回答的问题

来源: crazy_functions/Rag_Interface.py79-96

使用示例

文档上传

要将文档添加到您的知识库,请输入包含支持文档文件的文件夹路径

/path/to/your/documents

提问

要提出一个将使用您的知识库来回答的问题

What are the key features of the GPT Academic project?

清空知识库

重置您的知识库

清空向量数据库

配置参数

RAG 系统配置了几个参数

参数描述
MAX_HISTORY_ROUND5包含在上下文中的最大对话轮次
MAX_CONTEXT_TOKEN_LIMIT4096上下文的最大令牌限制
REMEMBER_PREVIEW1000长文本预览中显示的字符数

来源: crazy_functions/Rag_Interface.py13-15

实现说明

RAG 系统构建于 LlamaIndex 之上,这是一个简化将自定义数据源连接到大型语言模型的框架。它支持两个向量存储后端

  1. 简单向量存储:默认后端,使用 LlamaIndex 的原生向量存储
  2. Milvus 向量存储:用于提高性能和可伸缩性(如果可用则使用)

来源: crazy_functions/Rag_Interface.py52-59 crazy_functions/rag_fns/milvus_worker.py79-91