该项目以异步,可扩展的方式将Langchain与FastApi集成,并使用PostgreSQL/PGVECTOR提供文档索引和检索的框架。
文件通过file_id组织为嵌入。主要用例是与Librechat集成,但是此简单的API可用于任何基于ID的用例。
使用ID方法的主要原因是在文件级上使用嵌入式。当与存储在数据库中的文件元数据结合使用时,这使得有针对性的查询,例如由Librechat完成。
API会随着时间的推移而发展,以采用不同的查询/重新排列方法,嵌入模型和向量存储。
.env文件docker compose up (也启动RAG API)docker compose -f ./db-compose.yaml updocker compose up (也启动PSQL/PGVECTOR)docker compose -f ./api-compose.yaml upDB_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 :(可选)主机名或IP地址将在其中运行API服务器。默认为“ 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”,“ bedrock”,“ azure”,“ huggingface”,“ huggingfacetei”或“ ollama”,其中“ huggingface”使用senten_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 。
ATLAS_SEARCH_INDEX :(可选)如果使用atlas mongodb,默认为vector_index ,则vector搜索索引的名称
MONGO_VECTOR_COLLECTION :对mongodb弃用,请使用ATLAS_SEARCH_INDEX和COLLECTION_NAME
AWS_DEFAULT_REGION :(可选)默认为us-east-1
AWS_ACCESS_KEY_ID :(可选)基岩嵌入需要
AWS_SECRET_ACCESS_KEY :(可选)基岩嵌入需要
在运行应用程序之前,请确保设置这些环境变量。您可以将它们设置在.env文件或系统环境变量中。
我们可以将Atlas MongoDB用作向量数据库,而不是使用默认的PGVECTOR。为此,设置以下环境变量
VECTOR_DB_TYPE = atlas-mongo
ATLAS_MONGO_DB_URI = <mongodb+srv://...>
COLLECTION_NAME = <vector collection>
ATLAS_SEARCH_INDEX = <vector search index> ATLAS_MONGO_DB_URI可能与Librechat使用的相同或不同。即使是相同的, $COLLECTION_NAME Collection也必须是一个全新的收藏品,与Librechat使用的所有集合分开。此外,使用以下JSON创建上面集合的矢量搜索索引(请记住分配$ATLAS_SEARCH_INDEX ):
{
"fields" : [
{
"numDimensions" : 1536 ,
"path" : " embedding " ,
"similarity" : " cosine " ,
"type" : " vector "
},
{
"path" : " file_id " ,
"type" : " filter "
}
]
}请按照四种记录的方法之一创建向量索引。
确保您的RDS Postgres实例遵守此要求:
The pgvector extension version 0.5.0 is available on database instances in Amazon RDS running PostgreSQL 15.4-R2 and higher, 14.9-R2 and higher, 13.12-R2 and higher, and 12.16-R2 and higher in all applicable AWS Regions, including the AWS GovCloud (US) Regions.
为了使用RAG API设置RDS Postgres,您可以按照以下步骤进行操作:
使用提供的AWS文档创建RDS实例/群集。
使用RDS控制台或IAC解决方案输出的端点连接字符串登录到RDS群集。
登录通过主用户。
为RAG_API创建专用数据库: create database rag_api; 。
为该数据库创建专用的用户角色: create role rag;
切换到您刚创建的数据库: c rag_api
启用向量扩展: create extension vector;
使用上面提供的文档将连接字符串设置为RDS Postgres实例 cluster。
笔记:
create role x with superuser;运行以下命令以安装使用黑色代码格式器:
pip install pre-commit
pre-commit install