rag_api

rag_api

基于FastAPI的异步文档索引与检索框架

这是一个基于FastAPI和Langchain的异步文档索引和检索框架。它利用PostgreSQL/pgvector进行向量存储,按文件ID组织嵌入向量。该框架提供文档管理、向量存储和异步操作功能,可集成到LibreChat或应用于其他ID导向的场景。支持多种向量数据库和嵌入模型,并包含详细的配置指南。

RAGFastAPILangchain向量数据库嵌入式检索Github开源项目

基于ID的RAG FastAPI

概述

本项目以异步、可扩展的方式将Langchain与FastAPI集成,提供了一个文档索引和检索的框架,使用PostgreSQL/pgvector。

文件按file_id组织成嵌入向量。主要用例是与LibreChat集成,但这个简单的API可用于任何基于ID的场景。

使用ID方法的主要原因是在文件级别处理嵌入向量。当与存储在数据库中的文件元数据结合使用时(如LibreChat所做的那样),这使得查询更有针对性。

随着时间的推移,API将不断发展,采用不同的查询/重新排序方法、嵌入模型和向量存储。

功能

  • 文档管理:添加、检索和删除文档的方法。
  • 向量存储:利用Langchain的向量存储进行高效的文档检索。
  • 异步支持:提供异步操作以增强性能。

设置

入门

  • 根据下面的部分配置.env文件
  • 设置pgvector数据库:
    • 运行现有的PSQL/PGVector设置,或者,
    • Docker:docker compose up(同时启动RAG API)
      • 或者,仅使用docker运行数据库:docker compose -f ./db-compose.yaml up
  • 运行API
    • Docker:docker compose up(同时启动PSQL/pgvector)
      • 或者,仅使用docker运行RAG API:docker compose -f ./api-compose.yaml up
    • 本地运行:
      • 确保将DB_HOST设置为正确的数据库主机名
      • 运行以下命令(最好在虚拟环境中)
pip install -r requirements.txt uvicorn main:app

环境变量

运行应用程序需要以下环境变量:

  • RAG_OPENAI_API_KEY:OpenAI API嵌入的API密钥(如果使用默认设置)。

    • 注意:OPENAI_API_KEY也可以使用,但RAG_OPENAI_API_KEY会覆盖它,以避免与LibreChat设置冲突。
  • RAG_OPENAI_BASEURL:(可选)OpenAI API嵌入的基础URL

  • RAG_OPENAI_PROXY:(可选)OpenAI API嵌入的代理

  • VECTOR_DB_TYPE:(可选)选择向量数据库类型,默认为pgvector

  • POSTGRES_DB:(可选)PostgreSQL数据库名称,当VECTOR_DB_TYPE=pgvector时使用。

  • POSTGRES_USER:(可选)连接PostgreSQL数据库的用户名。

  • POSTGRES_PASSWORD:(可选)连接PostgreSQL数据库的密码。

  • DB_HOST:(可选)PostgreSQL数据库服务器的主机名或IP地址。

  • DB_PORT:(可选)PostgreSQL数据库服务器的端口号。

  • RAG_HOST:(可选)API服务器将运行的主机名或IP地址。默认为"0.0.0.0"

  • RAG_PORT:(可选)API服务器将运行的端口号。默认为8000端口。

  • JWT_SECRET:(可选)用于验证请求JWT令牌的密钥。

    • 该密钥仅用于验证。这种基本方法假设JWT由其他地方签名。
    • 省略以运行API而不需要身份验证
  • COLLECTION_NAME:(可选)向量存储中集合的名称。默认值为"testcollection"。

  • CHUNK_SIZE:(可选)文本处理的块大小。默认值为"1500"。

  • CHUNK_OVERLAP:(可选)文本处理期间块之间的重叠。默认值为"100"。

  • RAG_UPLOAD_DIR:(可选)上传文件存储的目录。默认值为"./uploads/"。

  • PDF_EXTRACT_IMAGES:(可选)一个布尔值,指示是否从PDF文件中提取图像。默认值为"False"。

  • DEBUG_RAG_API:(可选)设置为"True"以在服务器控制台显示更详细的日志输出,并启用postgresql数据库路由

  • CONSOLE_JSON:(可选)设置为"True"以 JSON 格式记录日志,用于云日志聚合

  • EMBEDDINGS_PROVIDER:(可选)可选择"openai"、"azure"、"huggingface"、"huggingfacetei"或"ollama",其中"huggingface"使用 sentence_transformers;默认为"openai"

  • EMBEDDINGS_MODEL:(可选)从配置的提供商中设置有效的嵌入模型。

    • 默认值
    • openai:"text-embedding-3-small"
    • azure:"text-embedding-3-small"(将用作您的 Azure 部署)
    • huggingface:"sentence-transformers/all-MiniLM-L6-v2"
    • huggingfacetei:"http://huggingfacetei:3000"。Hugging Face TEI 使用 TEI 服务启动时定义的模型。
    • ollama:"nomic-embed-text"
  • RAG_AZURE_OPENAI_API_VERSION:(可选)默认为 2023-05-15。Azure OpenAI API 的版本。

  • RAG_AZURE_OPENAI_API_KEY:(可选)Azure OpenAI 服务的 API 密钥。

    • 注意:AZURE_OPENAI_API_KEY 也可以使用,但 RAG_AZURE_OPENAI_API_KEY 将覆盖它,以避免与 LibreChat 设置冲突。
  • RAG_AZURE_OPENAI_ENDPOINT:(可选)Azure OpenAI 服务的端点 URL,包括资源。

    • 示例:https://YOUR_RESOURCE_NAME.openai.azure.com
    • 注意:AZURE_OPENAI_ENDPOINT 也可以使用,但 RAG_AZURE_OPENAI_ENDPOINT 将覆盖它,以避免与 LibreChat 设置冲突。
  • HF_TOKEN:(可选)如果使用 huggingface 选项时需要。

  • OLLAMA_BASE_URL:(可选)默认为 http://ollama:11434

在运行应用程序之前,请确保设置这些环境变量。您可以在 .env 文件中或作为系统环境变量进行设置。

使用 Atlas MongoDB 作为向量数据库

除了使用默认的 pgvector,我们还可以使用 Atlas MongoDB 作为向量数据库。要实现这一点,请设置以下环境变量:

VECTOR_DB_TYPE=atlas-mongo ATLAS_MONGO_DB_URI=<mongodb+srv://...> MONGO_VECTOR_COLLECTION=<collection name>

ATLAS_MONGO_DB_URI 可以与 LibreChat 使用的相同或不同。即使相同,$MONGO_VECTOR_COLLECTION 集合也需要是一个全新的集合,与 LibreChat 使用的所有集合分开。此外,为 $MONGO_VECTOR_COLLECTION 创建一个向量搜索索引,使用以下 JSON:

{ "fields": [ { "numDimensions": 1536, "path": "embedding", "similarity": "cosine", "type": "vector" }, { "path": "file_id", "type": "filter" } ] }

按照 四种记录方法 之一创建向量索引。

云安装设置:

AWS:

确保您的 RDS Postgres 实例符合以下要求:

pgvector 扩展版本 0.5.0 可用于在所有适用的 AWS 区域(包括 AWS GovCloud(美国)区域)中运行 PostgreSQL 15.4-R2 及更高版本、14.9-R2 及更高版本、13.12-R2 及更高版本和 12.16-R2 及更高版本的 Amazon RDS 数据库实例。

要使用 RAG API 设置 RDS Postgres,您可以按照以下步骤操作:

  • 使用提供的 AWS 文档 创建 RDS 实例/集群。

  • 使用 RDS 控制台或您的 IaC 解决方案输出中的终端节点连接字符串登录到 RDS 集群。

  • 登录是通过主用户进行的。

  • 为rag_api创建一个专用数据库: create database rag_api;

  • 为该数据库创建一个专用用户/角色: create role rag;

  • 切换到你刚刚创建的数据库:\c rag_api

  • 启用Vector扩展:create extension vector;

  • 使用上面提供的文档设置连接到RDS Postgres实例/集群的连接字符串。

注意事项:

  • 即使你是以主用户身份登录,它也没有所有的超级用户权限,这就是为什么我们不能使用命令:create role x with superuser;
  • 如果你不启用扩展,rag_api服务将会抛出一个错误,表示由于上述原因无法创建扩展。

开发者注意事项:

安装pre-commit格式化工具

运行以下命令安装pre-commit格式化工具,它使用black代码格式化器:

pip install pre-commit pre-commit install

编辑推荐精选

蛙蛙写作

蛙蛙写作

AI小说写作助手,一站式润色、改写、扩写

蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。

AI辅助写作AI工具蛙蛙写作AI写作工具学术助手办公助手营销助手AI助手
Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

下拉加载更多