RAG-API
Konfigurieren Sie die Retrieval-Augmented Generation (RAG) API für die Dokumentenindizierung und -abfrage unter Verwendung von Langchain und FastAPI. Diese API lässt sich in LibreChat integrieren, um kontextbezogene Antworten basierend auf vom Benutzer hochgeladenen Dateien bereitzustellen.
Die RAG API indiziert vom Benutzer hochgeladene Dateien und ruft relevante Passagen ab, um Ihre Prompts zu erweitern, wodurch LibreChat kontextbezogene Antworten erhält, die auf Ihren Dokumenten basieren. Sie läuft als separater FastAPI-Dienst, der durch eine PostgreSQL + pgvector Datenbank unterstützt wird.
Neu bei RAG?
Die RAG API Presentation erläutert das Konzept im Detail und verlinkt auf ein hilfreiches Video. Diese Seite behandelt die Einrichtung und Konfiguration.
Verfügbarkeit
RAG funktioniert mit Agents sowie mit Custom Endpoints, OpenAI, Azure OpenAI, Anthropic und Google.
OpenAI Assistants verfügen über eine eigene RAG-Implementierung durch die „Retrieval“-Funktion (Details hier). Die Verwendung der RAG-API mit der Assistants API ist dennoch sinnvoll, da OpenAI sowohl für die Dateispeicherung als auch für das Retrieval Gebühren erhebt. Diese Integration ist für ein zukünftiges Update geplant.
Docker Quick Start
Für Docker ist die RAG-API bereits sowohl in der standardmäßigen docker-compose.yml als auch in der deploy-compose.yml Datei vorkonfiguriert, einschließlich des RAG_API_URL-Werts. Sie müssen lediglich sicherstellen, dass Sie das neueste Image und die neuesten Compose-Dateien verwenden. Lesen Sie den Updating LibreChat guide for Docker, falls Sie sich nicht sicher sind, wie das Update durchgeführt wird.
Geteilte .env Datei
Bei der standardmäßigen Docker-Einrichtung wird die .env-Datei zwischen LibreChat und der RAG API geteilt. Definieren Sie die RAG-Variablen in derselben Datei. Die vollständige Liste finden Sie in der RAG API README.
Wählen Sie den Embeddings-Anbieter aus, den Sie verwenden möchten.
Verwenden Sie RAG mit OpenAI-Embeddings. Dies ist die Standardkonfiguration.
Legen Sie die RAG API URL fest. Fügen Sie Folgendes zu Ihrer .env Datei hinzu:
Stellen Sie einen OpenAI API-Schlüssel bereit (falls erforderlich). Wenn Ihr OpenAI API-Schlüssel auf user_provided gesetzt ist, fügen Sie einen Schlüssel für Embeddings hinzu. Überspringen Sie diesen Schritt, wenn Sie den OpenAI-Schlüssel bereits in Ihrer .env Datei bereitstellen.
Starten Sie die Container.
Lite vs. Vollständiges Image
Docker verwendet standardmäßig das "lite"-Image der RAG API (registry.librechat.ai/danny-avila/librechat-rag-api-dev-lite:latest), das nur Remote-Embeddings von OpenAI oder einem von Ihnen konfigurierten Remote-HuggingFace/Ollama-Dienst unterstützt.
Für lokale Embeddings ändern Sie das Image in der Compose-Datei auf den vollständigen Build: registry.librechat.ai/danny-avila/librechat-rag-api-dev:latest. Nehmen Sie diese Änderung in Ihrer Docker Compose Override File vor. Ein Beispiel finden Sie in der docker-compose.override.yml.example im Stammverzeichnis des Projekts.
Wenn Sie eine compose-Datei wünschen, die nur die PostgreSQL + pgvector-Datenbank und die Python-API enthält, siehe rag.yml im Stammverzeichnis des Projekts.
Datenbankspeicherung
Die standardmäßigen Compose-Dateien speichern die pgvector/PostgreSQL-Daten im von Docker verwalteten pgdata2-Volume. Dies ist beabsichtigt: Die Datenbankdateien müssen nicht direkt vom Host aus bearbeitet werden, und ein verwaltetes Volume vermeidet häufige Probleme mit Eigentumsrechten und Berechtigungen. Benutzerseitige, bearbeitbare Dateien (Uploads, Protokolle, Bilder, MongoDB-Daten und NGINX-Konfiguration) werden per Bind-Mount in Projektordner eingebunden, wo ein direkter Zugriff vom Host aus nützlich ist.
Lokale Einrichtung
Eine Einrichtung ohne Container erfordert mehr manuelle Arbeit. Befolgen Sie die Anweisungen im RAG API repo.
Setzen Sie RAG_API_URL in Ihrer LibreChat .env Datei auf den Ort, an dem die API von Ihrem Setup aus erreichbar ist. Dies unterscheidet sich von Docker, wo der Wert bereits in der standardmäßigen docker-compose.yml Datei festgelegt ist.
Konfiguration
Legen Sie RAG API-Optionen über Umgebungsvariablen in einer .env-Datei fest, auf die die API zugreifen kann. Die meisten sind optional, abgesehen von den Anmeldeinformationen und Pfaden, die von Ihrem gewählten Anbieter benötigt werden. In der Standardkonfiguration ist nur RAG_OPENAI_API_KEY erforderlich.
Umgebungsvariablen
| Key | Type | Description | Example |
|---|---|---|---|
| RAG_API_URL | string | URL des RAG-API-Dienstes. | RAG_API_URL=http://host.docker.internal:8000 |
| RAG_OPENAI_API_KEY | string | OpenAI API-Schlüssel für Embeddings. Überschreibt OPENAI_API_KEY für RAG. | # RAG_OPENAI_API_KEY=sk-your-key |
| RAG_OPENAI_BASEURL | string | Benutzerdefinierte OpenAI-Basis-URL für RAG-Embeddings. | # RAG_OPENAI_BASEURL= |
| RAG_USE_FULL_CONTEXT | boolean | Gesamten Dateikontext abrufen anstatt nur die ersten 4 Ergebnisse. Standard: false. | # RAG_USE_FULL_CONTEXT=true |
| EMBEDDINGS_PROVIDER | string | Embeddings-Anbieter: openai, azure, huggingface, huggingfacetei oder ollama. Standard: openai. | # EMBEDDINGS_PROVIDER=openai |
| EMBEDDINGS_MODEL | string | Zu verwendendes Embeddings-Modell. Der Standardwert hängt vom Anbieter ab. | # EMBEDDINGS_MODEL=text-embedding-3-small |
| RAG_PORT | number | Port, auf dem die RAG API läuft. Standard: 8000. | # RAG_PORT=8000 |
| RAG_HOST | string | Hostname für die RAG-API. Standard: 0.0.0.0. | # RAG_HOST=0.0.0.0 |
| COLLECTION_NAME | string | Name der Vector Store-Collection. Standard: testcollection. | # COLLECTION_NAME=testcollection |
| CHUNK_SIZE | number | Größe der Text-Chunks. Standard: 1500. | # CHUNK_SIZE=1500 |
| CHUNK_OVERLAP | number | Überlappung zwischen Chunks. Standard: 100. | # CHUNK_OVERLAP=100 |
| OLLAMA_BASE_URL | string | Ollama Basis-URL bei Verwendung von Ollama-Embeddings. | # OLLAMA_BASE_URL=http://host.docker.internal:11434 |
Anmeldeinformations-Rangfolge
OPENAI_API_KEY funktioniert für RAG-Embeddings, aber RAG_OPENAI_API_KEY überschreibt diesen Wert, um Anmeldeinformationskonflikte zu vermeiden.
Für die vollständige Liste der Variablen und deren Beschreibungen siehe das RAG API repo.
Verwendung
Sobald die RAG API läuft, integriert sie sich automatisch in LibreChat. Wenn ein Benutzer Dateien in eine Unterhaltung hochlädt, indiziert die API diese und verwendet sie für kontextbezogene Antworten.
Laden Sie Dateien in die Unterhaltung hoch. Wenn RAG_API_URL nicht konfiguriert oder nicht erreichbar ist, schlägt der Upload fehl.
Chatten Sie wie gewohnt. Während der Benutzer mit dem Modell interagiert, ruft die RAG API basierend auf der Eingabe relevante Passagen aus den indizierten Dateien ab und verwendet diese, um den Prompt zu erweitern.
Steuern Sie, wann Dateien abgefragt werden. Standardmäßig wird der Vektorspeicher bei jeder neuen Nachricht in einer Konversation abgefragt, an die eine Datei angehängt ist. Formulieren Sie Ihre Prompts entsprechend.
Deaktivieren Sie Resend Files in den Konversationseinstellungen, um Dateien nur dann abzufragen, wenn sie explizit an eine Nachricht angehängt sind.
Indizierte Dateien wiederverwenden. Laden Sie eine Datei einmal hoch und hängen Sie sie dann über die Seitenleiste an jede neue Nachricht oder Unterhaltung an.
Dateien müssen sich im "Host"-Speicher befinden. "OpenAI"-Dateien werden anders behandelt und sind exklusiv für Assistants; sie dürfen daher nicht hochgeladen worden sein, während der Assistants endpoint ausgewählt und aktiv war. Zeigen Sie Ihre Dateien über das Seitenpanel an und verwalten Sie diese dort.
Fehlerbehebung
Falls bei der Einrichtung oder Verwendung der RAG API Probleme auftreten:
- Stellen Sie sicher, dass alle erforderlichen Umgebungsvariablen korrekt in Ihrer
.envDatei gesetzt sind. - Stellen Sie sicher, dass die Vektordatenbank konfiguriert und zugänglich ist.
- Überprüfen Sie, ob der OpenAI API-Schlüssel oder andere Anbieter-Anmeldedaten gültig sind.
- Überprüfen Sie sowohl die LibreChat- als auch die RAG-API-Protokolle auf Fehler oder Warnungen.
Falls das Problem weiterhin besteht, lesen Sie die RAG API Dokumentation oder fragen Sie die LibreChat Community auf GitHub Discussions oder Discord.
Wie finden Sie diese Anleitung?