Was ist RAG?
RAG steht für „Retrieve Augmented Generation“ und ist ein Verfahren, um die Ausgabe von großen Sprachmodellen (LLMs) zu optimieren, indem autoritative Wissensrepositorien jenseits ihrer Trainingsdatenquellen referenziert werden, bevor Antworten generiert werden. LLMs werden auf riesigen Datenmengen trainiert und verwenden Milliarden von Parametern, um Rohdaten für Aufgaben wie das Beantworten von Fragen, die Übersetzung von Sprachen und das Vervollständigen von Sätzen zu generieren. RAG erweitert die bereits leistungsstarken Fähigkeiten von LLMs auf spezifische Bereiche oder interne Wissensbasen von Organisationen, ohne dass das Modell neu trainiert werden muss. Dies ist ein kosteneffektiver Ansatz, der die Ausgabe von LLMs verbessern und sie in verschiedenen Kontexten relevant, genau und nützlich halten kann.
Warum ist RAG wichtig?
LLMs sind entscheidende KI-Technologien, die hinter intelligenten Chatbots und anderen Anwendungen der natürlichen Sprachverarbeitung (NLP) stehen. Ihr Ziel ist es, Bots zu schaffen, die in der Lage sind, die Fragen der Nutzer in verschiedenen Kontexten zu beantworten, indem sie autoritative Wissensquellen kreuzreferenzieren. Allerdings führen die Eigenschaften der LLMs-Technologie zu Antworten, die unvorhersehbar sein können. Darüber hinaus ist das Trainingsdatum von LLMs statisch und hat ein Verfallsdatum in Bezug auf sein Wissen.
Bekannte Herausforderungen von LLMs sind:
- Bereitstellung von fehlerhaften Informationen, wenn keine Antwort verfügbar ist.
- Anbieten von veralteten oder allgemeinen Informationen, wenn die Nutzer spezifische, aktuelle Antworten erwarten.
- Erstellen von Antworten aus nicht-autoritativen Quellen.
- Generierung von ungenauen Antworten aufgrund von Terminverwirrung, bei der unterschiedliche Trainingsquellen dieselben Begriffe verwenden, um auf verschiedene Dinge zu verweisen.
RAG ist eine Möglichkeit, einige dieser Herausforderungen anzugehen. Es leitet LLMs an, relevante Informationen aus autoritativen, vorherbestimmten Wissensquellen abzurufen.
Warum ist eine 100%ige lokale RAG erforderlich?
In den Anwendungsfällen von RAG wird Wissen, das spezifisch für einen Bereich ist, an LLMs weitergegeben. Wenn externe Modelle oder Dienste verwendet werden, besteht das Risiko, dass private Daten an Dritte weitergegeben werden. Beispielsweise werden, wenn Unternehmen die Dienste von OpenAI nutzen, private Kenntnisse innerhalb von RAG-Anwendungen an OpenAI gesendet, was möglicherweise nicht für alle Nutzer wünschenswert ist. Eigentümer von hochgradig privaten Daten bevorzugen, dass alle Dateninteraktionen innerhalb der Organisation stattfinden. Hier liegt die Bedeutung von 100% lokaler RAG.
Was ist Ollama?
Ollama ist ein beliebtes Tool zum Ausführen von Open-Source-LLMs lokal, einschließlich Modellen wie Mistral und Llama 2. Ollama bündelt Modellgewichte, Konfigurationen und Datasets in ein einheitliches Paket, das von Modelfile verwaltet wird.
Ollama unterstützt verschiedene LLMs, darunter, aber nicht beschränkt auf, die folgenden Modelle:
- LLaMA-2
- CodeLLaMA
- Falcon
- Mistral
- Vicuna
- WizardCoder
Ollama enthält sowohl Chat-Modelle als auch Text-Embedding-Modelle, die genau das sind, was RAG-Anwendungen benötigen. Mit Ollama können wir 100% lokalisierte RAG-Anwendungen erreichen.
ChatOllama
ChatOllama ist eine einfache Webanwendung, die von mir auf der Grundlage von Ollama und Nuxt 3 entwickelt wurde und die die Umsetzung von 100% lokalen RAG-Anwendungen demonstriert. Der Code ist auf GitHub open source:
https://github.com/sugarforever/chat-ollama
Von ChatOllama unterstützte Funktionen:
- Lokales Management großer Modelle
- Chat mit lokalen Modellen
- Konfiguration des Ollama-Servers
- Management von Wissensbasen
- Chat mit Wissensbasen
Der Chat mit Wissensbasen ist eine typische RAG-Anwendung. Sie umfasst die folgenden Komponenten:
- Lokale Chat-Modelle
- Lokale Embedding-Modelle
- Vektordatenbank
Lokale Chat-Modelle
Es gibt zahlreiche Chat-Modelle, die von Ollama unterstützt werden, wie z.B. gemma, llama2, mistral usw.
Abbildung: Ollama Models
Lokale Embedding-Modelle
Ollama unterstützt das hochgradig beliebte Text-Embedding-Modell mit einem extrem langen Kontextfenster, genannt nomic-embed-text. Dies ist auch das Modell, das ich in ChatOllama verwenden werde.
Abbildung: nomic-embed-text
Vektordatenbank
In lokalisierten RAG-Anwendungen gibt es mehrere Möglichkeiten, Vektordaten lokal zu speichern, wie z.B. Chromadb, Milvus usw. In ChatOllama wurde Chromadb ausgewählt, wobei die Nutzer auch einen Chroma-Server lokal ausführen müssen, zusammen mit ChatOllama.
Relationale Datenbank
Neben den oben genannten Komponenten wird die relationale Datenbank SQLite verwendet, um relationale Daten innerhalb von ChatOllama zu speichern. Derzeit werden die Daten im Zusammenhang mit Wissensbasen gespeichert.
Mit diesen Komponenten haben wir eine 100% lokale RAG-Anwendung erreicht.
ChatOllama Funktionen
Lassen Sie uns nun die Hauptfunktionen von ChatOllama anhand einiger Screenshots demonstrieren.
Modell herunterladen
Lassen Sie uns als Beispiel zeigen, wie Sie das nomic-embed-text-Modell herunterladen können.
Abbildung: Ein Modell herunterladen
Wissensbasis erstellen
Folgen Sie den unten stehenden Schritten, um eine Wissensbasis zu erstellen:
- Wählen Sie eine Wissensdatei aus.
- Legen Sie den Namen und die Beschreibung der Wissensbasis fest.
- Legen Sie das Embedding-Modell fest.
Abbildung: Eine neue Wissensbasis erstellen
Chat mit Wissensbasis
Klicken Sie auf die erstellte Wissensbasis, um die Chat-Konsole zu öffnen.
Abbildung: Chat mit Wissensbasis
Bitte beziehen Sie sich auf das Code-Repository für weitere Einzelheiten:
https://github.com/sugarforever/chat-ollama
Hoffentlich kann ChatOllama jedem eine Inspiration für lokale, von LLM gesteuerte Anwendungen bieten.