本项目以异步、可扩展的方式将Langchain与FastAPI集成,提供了一个文档索引和检索的框架,使用PostgreSQL/pgvector。
文件按file_id
组织成嵌入向量。主要用例是与LibreChat集成,但这个简单的API可用于任何基于ID的场景。
使用ID方法的主要原因是在文件级别处理嵌入向量。当与存储在数据库中的文件元数据结合使用时(如LibreChat所做的那样),这使得查询更有针对性。
随着时间的推移,API将不断发展,采用不同的查询/重新排序方法、嵌入模型和向量存储。
.env
文件docker compose up
(同时启动RAG API)
docker compose -f ./db-compose.yaml up
docker compose up
(同时启动PSQL/pgvector)
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令牌的密钥。
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
:(可选)从配置的提供商 中设置有效的嵌入模型。
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
文件中或作为系统环境变量进行设置。
除了使用默认的 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" } ] }
按照 四种记录方法 之一创建向量索引。
确保您的 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;
运行以下命令安装pre-commit格式化工具,它使用black代码格式化器:
pip install pre-commit pre-commit install
AI小说写作助手,一站式润色、改写、扩写
蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。
字节跳动发布的AI编程神器IDE
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。 利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
全能AI智能助手,随时解答生活与工作的多样问题