Dieses Projekt integriert Langchain in asynchroner, skalierbarer Weise mit Fastapi und bietet einen Rahmen für die Indexierung und Abruf von Dokumenten unter Verwendung von PostgreSQL/PGVector.
Dateien werden nach file_id in Einbetten organisiert. Der primäre Anwendungsfall ist für die Integration mit Librechat gedacht. Diese einfache API kann jedoch für jeden ID-basierten Anwendungsfall verwendet werden.
Der Hauptgrund für die Verwendung des ID-Ansatzes ist die Arbeit mit Einbettungen auf einer Dateiebene. Dies sorgt für gezielte Abfragen in Kombination mit Dateimetadaten, die in einer Datenbank gespeichert sind, z. B. von Librechat.
Die API wird sich im Laufe der Zeit entwickeln, um verschiedene Abfragen-/Wiederholungsmethoden, Einbettungsmodelle und Vektorspeicher einzusetzen.
.env -Datei basierend auf dem folgenden Abschnittdocker compose up (startet auch Lappen -API)docker compose -f ./db-compose.yaml updocker compose up (startet auch PSQL/PGVector)docker compose -f ./api-compose.yaml upDB_HOST auf den richtigen Datenbank -Hostnamen einrichtenpip install -r requirements.txt
uvicorn main:appDie folgenden Umgebungsvariablen sind erforderlich, um die Anwendung auszuführen:
RAG_OPENAI_API_KEY : Der API -Schlüssel für OpenAI -API -Einbetten (falls die Standardeinstellungen verwendet).
OPENAI_API_KEY funktioniert, aber RAG_OPENAI_API_KEY wird es überschreiben, um nicht mit der Einstellung der Librechat in Konflikt zu stehen. RAG_OPENAI_BASEURL : (optional) Die Basis -URL für Ihre OpenAI -API -Einbettungen
RAG_OPENAI_PROXY : (optional) Proxy für OpenAI -API -Einbettungen
VECTOR_DB_TYPE : (optional) Wählen Sie Vektor -Datenbanktyp, Standard für pgvector .
POSTGRES_DB : (optional) Der Name der PostgreSQL -Datenbank, verwendet, wenn VECTOR_DB_TYPE=pgvector .
POSTGRES_USER : (optional) Der Benutzername für eine Verbindung zur PostgreSQL -Datenbank.
POSTGRES_PASSWORD : (optional) Das Kennwort für eine Verbindung zur PostgreSQL -Datenbank.
DB_HOST : (optional) Der Hostname oder die IP -Adresse des PostgreSQL -Datenbankservers.
DB_PORT : (optional) Die Portnummer des PostgreSQL -Datenbankservers.
RAG_HOST : (optional) Die Hostname oder die IP -Adresse, in der der API -Server ausgeführt wird. Standardeinstellung zu "0.0.0.0"
RAG_PORT : (optional) Die Portnummer, auf der der API -Server ausgeführt wird. Standardeinstellung nach Port 8000.
JWT_SECRET : (optional) Der geheime Schlüssel zur Überprüfung von JWT -Token für Anforderungen.
COLLECTION_NAME : (optional) Der Name der Sammlung im Vektor Store. Der Standardwert ist "testcollection".
CHUNK_SIZE : (optional) Die Größe der Stücke für die Textverarbeitung. Der Standardwert ist "1500".
CHUNK_OVERLAP : (optional) Die Überlappung zwischen Stücken während der Textverarbeitung. Der Standardwert ist "100".
RAG_UPLOAD_DIR : (optional) Das Verzeichnis, in dem hochgeladene Dateien gespeichert werden. Der Standardwert ist "./uploads/".
PDF_EXTRACT_IMAGES : (optional) Ein boolescher Wert, der angibt, ob Bilder aus PDF -Dateien extrahiert werden sollen. Der Standardwert ist "falsch".
DEBUG_RAG_API : (Optional) Setzen
CONSOLE_JSON : (optional) auf "true" als JSON für Cloud -Protokollierungsaggregationen festgelegt
EMBEDDINGS_PROVIDER : (optional) entweder "Openai", "Bedrock", "Azure", "Huggingface", "HuggingFacetei" oder "Ollama", wobei "Huggingface" Satz_Transformer verwendet; Standardeinstellungen zu "OpenAI"
EMBEDDINGS_MODEL : (optional) Legen Sie ein gültiges Emetten -Modell ein, das vom konfigurierten Anbieter verwendet werden soll.
RAG_AZURE_OPENAI_API_VERSION : (optional) Standard ist 2023-05-15 . Die Version der Azure OpenAI -API.
RAG_AZURE_OPENAI_API_KEY : (optional) Der API -Schlüssel für den Azure OpenAI -Dienst.
AZURE_OPENAI_API_KEY funktioniert, aber RAG_AZURE_OPENAI_API_KEY wird es überschreiben, um nicht mit der Einstellung der Librechat in Konflikt zu geraten. RAG_AZURE_OPENAI_ENDPOINT : (optional) Die Endpunkt -URL für den Azure OpenAI -Dienst, einschließlich der Ressource.
https://YOUR_RESOURCE_NAME.openai.azure.com .AZURE_OPENAI_ENDPOINT funktioniert, aber RAG_AZURE_OPENAI_ENDPOINT wird es überschreiben, um nicht mit der Einstellung von Librechat in Konflikt zu geraten. HF_TOKEN : (optional) bei Bedarf für die Option huggingface .
OLLAMA_BASE_URL : (optional) standardmäßig http://ollama:11434 .
ATLAS_SEARCH_INDEX : (optional) Der Name des Vektorsuchesindex bei Verwendung von Atlas MongoDB, Standard für vector_index
MONGO_VECTOR_COLLECTION : für mongoDB veraltet, bitte verwenden Sie ATLAS_SEARCH_INDEX und COLLECTION_NAME
AWS_DEFAULT_REGION : (optional) standardmäßig für us-east-1
AWS_ACCESS_KEY_ID : (optional) benötigt für Grundgesteinsbettendings
AWS_SECRET_ACCESS_KEY : (optional) benötigt für Grundgesteinsbettendings
Stellen Sie sicher, dass Sie diese Umgebungsvariablen festlegen, bevor Sie die Anwendung ausführen. Sie können sie in einer .env -Datei oder als Systemumgebungsvariablen festlegen.
Anstatt den Standard -PGVector zu verwenden, könnten wir Atlas MongoDB als Vektordatenbank verwenden. Stellen Sie dazu die folgenden Umgebungsvariablen fest
VECTOR_DB_TYPE = atlas-mongo
ATLAS_MONGO_DB_URI = <mongodb+srv://...>
COLLECTION_NAME = <vector collection>
ATLAS_SEARCH_INDEX = <vector search index> Das ATLAS_MONGO_DB_URI kann gleich oder unterscheiden sich von dem, was von Librechat verwendet wird. Auch wenn es dasselbe ist, muss die Kollektion $COLLECTION_NAME ein völlig neu sein, getrennt von allen von Librechat verwendeten Sammlungen. Erstellen Sie außerdem einen Vektor -Suchindex für die obige Sammlung (denken Sie daran, $ATLAS_SEARCH_INDEX zuzuweisen) mit dem folgenden JSON:
{
"fields" : [
{
"numDimensions" : 1536 ,
"path" : " embedding " ,
"similarity" : " cosine " ,
"type" : " vector "
},
{
"path" : " file_id " ,
"type" : " filter "
}
]
}Befolgen Sie eine der vier dokumentierten Methoden, um den Vektorindex zu erstellen.
Stellen Sie sicher, dass Ihre RDS -Postgres -Instanz diese Anforderung haftet:
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.
Um RDS -Postgres mit Rag -API einzurichten, können Sie folgende Schritte befolgen:
Erstellen Sie eine RDS -Instanz/Cluster mit der bereitgestellten AWS -Dokumentation.
Melden Sie sich beim RDS -Cluster mit der Endpunktverbindungszeichenfolge aus der RDS -Konsole oder von Ihrer IAC -Lösung aus.
Die Anmeldung erfolgt über den Master -Benutzer .
Erstellen Sie eine dedizierte Datenbank für RAG_API: create database rag_api; .
Erstellen Sie eine dedizierte Benutzerrolle für diese Datenbank: create role rag;
Wechseln Sie zur Datenbank, die Sie gerade erstellt haben: c rag_api
Aktivieren Sie die Vektorerweiterung: create extension vector;
Verwenden Sie die oben angegebene Dokumentation, um die Verbindungszeichenfolge für die RDS Postgres Instance Cluster einzurichten.
Anmerkungen:
create role x with superuser;Führen Sie die folgenden Befehle aus, um die Formatiererin vor dem Kommunikation zu installieren, bei der Black Code Formatter verwendet wird:
pip install pre-commit
pre-commit install