Eine saubere und anpassbare Open-Source-RAG-Benutzeroberfläche zum Chatten mit Ihren Dokumenten. Entwickelt sowohl für Endbenutzer als auch für Entwickler.
Live-Demo | Online-Installation | Benutzerhandbuch | Entwicklerhandbuch | Feedback | Kontakt
Dieses Projekt dient als funktionale RAG-Benutzeroberfläche sowohl für Endbenutzer, die eine Qualitätssicherung für ihre Dokumente durchführen möchten, als auch für Entwickler, die ihre eigene RAG-Pipeline erstellen möchten.
+------------------------------------------------- ------------+| Endbenutzer: Diejenigen, die mit „kotaemon“ erstellte Apps verwenden. || (Sie verwenden eine App wie die in der Demo oben) || +------------------------------------------------- ---------------+ || | Entwickler: Diejenigen, die mit „kotaemon“ gebaut haben. | || | (Sie haben irgendwo in Ihrem Projekt `import kotaemon`) | || | +------------------------------------------------- ---+ | || | | Mitwirkende: Diejenigen, die „kotaemon“ besser machen. | | || | | (Sie machen PR für dieses Repo) | | || | +------------------------------------------------- ---+ | || +------------------------------------------------- --------------+ |+-------------------------------- --------------------------------------------+
Saubere und minimalistische Benutzeroberfläche : Eine benutzerfreundliche Oberfläche für RAG-basierte Qualitätssicherung.
Unterstützung für verschiedene LLMs : Kompatibel mit LLM-API-Anbietern (OpenAI, AzureOpenAI, Cohere usw.) und lokalen LLMs (über ollama
und llama-cpp-python
).
Einfache Installation : Einfache Skripte für einen schnellen Einstieg.
Framework für RAG-Pipelines : Tools zum Erstellen Ihrer eigenen RAG-basierten Dokument-QA-Pipeline.
Anpassbare Benutzeroberfläche : Sehen Sie Ihre RAG-Pipeline in Aktion mit der bereitgestellten Benutzeroberfläche, die mit Gradio erstellt wurde.
Gradio-Thema : Wenn Sie Gradio für die Entwicklung verwenden, sehen Sie sich unser Thema hier an: kotaemon-gradio-theme.
Hosten Sie Ihre eigene Dokument-QA (RAG)-Web-UI : Unterstützen Sie die Mehrbenutzeranmeldung, organisieren Sie Ihre Dateien in privaten/öffentlichen Sammlungen, arbeiten Sie zusammen und teilen Sie Ihren Lieblingschat mit anderen.
Organisieren Sie Ihre LLM- und Einbettungsmodelle : Unterstützen Sie sowohl lokale LLMs als auch beliebte API-Anbieter (OpenAI, Azure, Ollama, Groq).
Hybrid-RAG-Pipeline : Vernünftige Standard-RAG-Pipeline mit Hybrid-Retriever (Volltext und Vektor) und Re-Ranking, um die beste Retrieval-Qualität sicherzustellen.
Multimodale QA-Unterstützung : Führen Sie die Beantwortung von Fragen für mehrere Dokumente mit Unterstützung für Abbildungen und Tabellen durch. Unterstützt das Parsen multimodaler Dokumente (wählbare Optionen auf der Benutzeroberfläche).
Erweiterte Zitate mit Dokumentvorschau : Standardmäßig stellt das System detaillierte Zitate bereit, um die Richtigkeit der LLM-Antworten sicherzustellen. Sehen Sie sich Ihre Zitate (einschließlich relevanter Partitur) direkt im PDF-Viewer im Browser mit Hervorhebungen an. Warnung, wenn die Abrufpipeline Artikel mit geringer Relevanz zurückgibt.
Unterstützen Sie komplexe Argumentationsmethoden : Verwenden Sie die Fragenzerlegung, um Ihre komplexe/Multi-Hop-Frage zu beantworten. Unterstützen Sie agentenbasiertes Denken mit ReAct
, ReWOO
und anderen Agenten.
Konfigurierbare Benutzeroberfläche für Einstellungen : Sie können die wichtigsten Aspekte des Abruf- und Generierungsprozesses auf der Benutzeroberfläche anpassen (einschließlich Eingabeaufforderungen).
Erweiterbar : Da es auf Gradio aufbaut, können Sie beliebige UI-Elemente nach Belieben anpassen oder hinzufügen. Außerdem ist es unser Ziel, mehrere Strategien für die Indizierung und den Abruf von Dokumenten zu unterstützen. Als Beispiel wird GraphRAG
Indizierungspipeline bereitgestellt.
Wenn Sie kein Entwickler sind und die App nur nutzen möchten, lesen Sie bitte unser leicht verständliches Benutzerhandbuch. Laden Sie die
.zip
Datei der neuesten Version herunter, um alle neuesten Funktionen und Fehlerbehebungen zu erhalten.
Python >= 3.10
Docker: optional, wenn Sie mit Docker installieren
Unstrukturiert, wenn Sie andere Dateien als .pdf
, .html
, .mhtml
und .xlsx
Dokumente verarbeiten möchten. Die Installationsschritte unterscheiden sich je nach Betriebssystem. Bitte besuchen Sie den Link und befolgen Sie die dort bereitgestellten spezifischen Anweisungen.
Wir unterstützen sowohl lite
als auch full
von Docker-Images. Mit full
werden auch die zusätzlichen Pakete von unstructured
installiert, es können zusätzliche Dateitypen unterstützt werden ( .doc
, .docx
, ...), aber der Preis ist höher, die Größe des Docker-Images ist höher. Für die meisten Benutzer sollte das lite
-Image in den meisten Fällen gut funktionieren.
Um die lite
-Version zu verwenden.
Docker-Lauf -e GRADIO_SERVER_NAME=0.0.0.0 -e GRADIO_SERVER_PORT=7860 -p 7860:7860 -it --rm ghcr.io/cinnamon/kotaemon:main-lite
Um die full
zu nutzen.
Docker-Lauf -e GRADIO_SERVER_NAME=0.0.0.0 -e GRADIO_SERVER_PORT=7860 -p 7860:7860 -it --rm ghcr.io/cinnamon/kotaemon:main-full
Wir unterstützen und testen derzeit zwei Plattformen: linux/amd64
und linux/arm64
(für neuere Mac). Sie können die Plattform angeben, indem Sie im docker run
-Befehl --platform
übergeben. Zum Beispiel:
# Um Docker mit der Plattform Linux/arm64docker auszuführen, führen Sie es aus -e GRADIO_SERVER_NAME=0.0.0.0 -e GRADIO_SERVER_PORT=7860 -p 7860:7860 -it --rm --platform linux/arm64 ghcr.io/cinnamon/kotaemon:main-lite
Sobald alles richtig eingerichtet ist, können Sie über http://localhost:7860/
auf die WebUI zugreifen.
Wir verwenden GHCR zum Speichern von Docker-Bildern. Alle Bilder finden Sie hier.
Klonen und installieren Sie die erforderlichen Pakete in einer neuen Python-Umgebung.
# optional (setup env)conda create -n kotaemon python=3.10 Conda aktiviert Kotaemon# klont diesen Repogit-Klon https://github.com/Cinnamon/kotaemoncd Kotaemon pip install -e "libs/kotaemon[all]"pip install -e "libs/ktem"
Erstellen Sie eine .env
Datei im Stammverzeichnis dieses Projekts. Verwenden Sie .env.example
als Vorlage
Die .env
Datei ist für Anwendungsfälle gedacht, bei denen Benutzer die Modelle vor dem Start der App vorkonfigurieren möchten (z. B. die App auf einem HF-Hub bereitstellen). Die Datei wird nur einmal zum Auffüllen der Datenbank beim ersten Durchlauf verwendet. Sie wird in nachfolgenden Durchläufen nicht mehr verwendet.
(Optional) Um PDF_JS
Viewer im Browser zu aktivieren, laden Sie PDF_JS_DIST herunter und extrahieren Sie es dann nach libs/ktem/ktem/assets/prebuilt
Starten Sie den Webserver:
Python app.py
Die App wird automatisch in Ihrem Browser gestartet.
Der Standardbenutzername und das Standardkennwort lauten beide admin
. Sie können zusätzliche Benutzer direkt über die Benutzeroberfläche einrichten.
Überprüfen Sie die Registerkarte Resources
“ sowie LLMs and Embeddings
und stellen Sie sicher, dass Ihr api_key
Wert in Ihrer .env
Datei korrekt festgelegt ist. Wenn es nicht festgelegt ist, können Sie es dort festlegen.
Notiz
Die offizielle MS GraphRAG-Indizierung funktioniert nur mit OpenAI oder Ollama API. Wir empfehlen den meisten Benutzern, die NanoGraphRAG-Implementierung für eine einfache Integration mit Kotaemon zu verwenden.
Nano-GraphRAG installieren: pip install nano-graphrag
Die Installation nano-graphrag
kann zu Versionskonflikten führen, siehe dieses Problem
Um das Problem schnell zu beheben: pip uninstall hnswlib chroma-hnswlib && pip install chroma-hnswlib
Starten Sie Kotaemon mit der Umgebungsvariablen USE_NANO_GRAPHRAG=true
.
Legen Sie Ihre Standard-LLM- und Einbettungsmodelle in den Ressourceneinstellungen fest und sie werden automatisch von NanoGraphRAG erkannt.
Nicht-Docker-Installation : Wenn Sie Docker nicht verwenden, installieren Sie GraphRAG mit dem folgenden Befehl:
Pip Install Graphrag Future
API-SCHLÜSSEL einrichten : Um die GraphRAG-Retriever-Funktion zu verwenden, stellen Sie sicher, dass Sie die Umgebungsvariable GRAPHRAG_API_KEY
festlegen. Sie können dies direkt in Ihrer Umgebung oder durch Hinzufügen zu einer .env
Datei tun.
Verwenden lokaler Modelle und benutzerdefinierter Einstellungen : Wenn Sie GraphRAG mit lokalen Modellen (wie Ollama
) verwenden oder das Standard-LLM und andere Konfigurationen anpassen möchten, setzen Sie die Umgebungsvariable USE_CUSTOMIZED_GRAPHRAG_SETTING
auf true. Passen Sie dann Ihre Einstellungen in der Datei settings.yaml.example
an.
Siehe Einrichtung lokaler Modelle.
Standardmäßig werden alle Anwendungsdaten im Ordner ./ktem_app_data
gespeichert. Sie können diesen Ordner sichern oder kopieren, um Ihre Installation auf einen neuen Computer zu übertragen.
Für fortgeschrittene Benutzer oder bestimmte Anwendungsfälle können Sie diese Dateien anpassen:
flowsettings.py
.env
flowsettings.py
Diese Datei enthält die Konfiguration Ihrer Anwendung. Sie können das Beispiel hier als Ausgangspunkt verwenden.
# Richten Sie Ihren bevorzugten Dokumentenspeicher ein (mit Volltextsuchfunktionen). KH_DOCSTORE=(Elasticsearch | LanceDB | SimpleFileDocumentStore)# Richten Sie Ihren bevorzugten Vektorspeicher ein (für vektorbasierte Suche). multimodal QAKH_REASONINGS_USE_MULTIMODAL=True# Richten Sie Ihre neue Reasoning-Pipeline ein oder ändern Sie eine vorhandene .reasoning.rewoo.RewooAgentPipeline", ]
.env
Diese Datei bietet eine weitere Möglichkeit, Ihre Modelle und Anmeldeinformationen zu konfigurieren.
Alternativ können Sie die Modelle über die .env
Datei mit den für die Verbindung zu den LLMs erforderlichen Informationen konfigurieren. Diese Datei befindet sich im Ordner der Anwendung. Wenn Sie es nicht sehen, können Sie eines erstellen.
Derzeit werden folgende Anbieter unterstützt:
Verwendung ollama
OpenAI-kompatiblen Servers:
Verwendung von GGUF
mit llama-cpp-python
Sie können ein LLM suchen und herunterladen, um es lokal über den Hugging Face Hub auszuführen. Derzeit werden diese Modellformate unterstützt:
Installieren Sie ollama und starten Sie die Anwendung.
Ziehen Sie Ihr Modell, zum Beispiel:
Ollama Pull Lama3.1:8b Ollama Pull nomic-embed-text
Legen Sie die Modellnamen auf der Web-Benutzeroberfläche fest und legen Sie sie als Standard fest:
GGUF
Sie sollten ein Modell wählen, dessen Größe kleiner als der Speicher Ihres Geräts ist und etwa 2 GB übrig bleiben sollte. Wenn Sie beispielsweise insgesamt über 16 GB RAM verfügen, von denen 12 GB zur Verfügung stehen, dann sollten Sie ein Modell wählen, das maximal 10 GB RAM belegt. Größere Modelle liefern tendenziell eine bessere Generierung, benötigen aber auch mehr Verarbeitungszeit.
Hier sind einige Empfehlungen und deren Größe im Speicher:
Qwen1.5-1.8B-Chat-GGUF: ca. 2 GB
Fügen Sie ein neues LlamaCpp-Modell mit dem angegebenen Modellnamen auf der Web-Benutzeroberfläche hinzu.
OpenAI
Legen Sie in der .env
Datei die Variable OPENAI_API_KEY
mit Ihrem OpenAI-API-Schlüssel fest, um den Zugriff auf die Modelle von OpenAI zu ermöglichen. Es gibt weitere Variablen, die geändert werden können. Bitte bearbeiten Sie sie entsprechend Ihrem Fall. Ansonsten sollte der Standardparameter für die meisten Leute funktionieren.
OPENAI_API_BASE=https://api.openai.com/v1 OPENAI_API_KEY=OPENAI_CHAT_MODEL=gpt-3.5-turbo OPENAI_EMBEDDINGS_MODEL=text-embedding-ada-002
Azure OpenAI
Für OpenAI-Modelle über die Azure-Plattform müssen Sie Ihren Azure-Endpunkt und API-Schlüssel angeben. Je nachdem, wie Sie die Azure-Entwicklung einrichten, müssen Sie möglicherweise auch den Namen Ihrer Entwicklungen für das Chat-Modell und das Einbettungsmodell angeben.
AZURE_OPENAI_ENDPOINT= AZURE_OPENAI_API_KEY= OPENAI_API_VERSION=2024-02-15-Vorschau AZURE_OPENAI_CHAT_DEPLOYMENT=gpt-35-turbo AZURE_OPENAI_EMBEDDINGS_DEPLOYMENT=text-embedding-ada-002
Lokale Modelle
Sehen Sie sich hier die Standard-Pipeline-Implementierung an. Sie können schnell Anpassungen an der Funktionsweise der Standard-QA-Pipeline vornehmen.
Fügen Sie eine neue .py
Implementierung in libs/ktem/ktem/reasoning/
hinzu und fügen Sie sie später in flowssettings
ein, um sie auf der Benutzeroberfläche zu aktivieren.
Überprüfen Sie die Beispielimplementierung in libs/ktem/ktem/index/file/graph
(weitere Anleitung in Bearbeitung).
Da sich unser Projekt aktiv in der Weiterentwicklung befindet, schätzen wir Ihr Feedback und Ihre Beiträge sehr. Weitere Informationen finden Sie in unserem Beitragsleitfaden. Vielen Dank an alle unsere Mitwirkenden!