該項目以異步,可擴展的方式將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 :def for 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