paint-brush
Lassen Sie uns einen Kundensupport-Chatbot mit RAG und der Dokumentation Ihres Unternehmens in OpenWebUI erstellenvon@hostkey
1,363 Lesungen
1,363 Lesungen

Lassen Sie uns einen Kundensupport-Chatbot mit RAG und der Dokumentation Ihres Unternehmens in OpenWebUI erstellen

von Hostkey.com8m2024/07/09
Read on Terminal Reader

Zu lang; Lesen

OpenWebUI bietet eine einzigartige Möglichkeit, faszinierende und nützliche Chatbots zu erstellen, auch ohne umfassende Programmiererfahrung. In diesem Artikel erzählen wir von unserem Weg zur Erstellung eines Chatbots für den technischen Support, der unser Frontline-Team durch die Beantwortung von Benutzerfragen unterstützen soll. Hier ist eine schrittweise Zusammenfassung seiner Aktionen.
featured image - Lassen Sie uns einen Kundensupport-Chatbot mit RAG und der Dokumentation Ihres Unternehmens in OpenWebUI erstellen
Hostkey.com HackerNoon profile picture
0-item

OpenWebUI ist eine umfassende Medienplattform mit einer Reihe von KI-Tools: OpenAI, Ollama, Automatic1111, ComfyUI, Whisper API, benutzerdefiniertes Modelltraining, Langchain-basiertes RAG mit ChromaDB, hybride BM25/Websuche und mehr.


Obwohl all dies bereits seit einiger Zeit verfügbar, dokumentiert und mit Python-Programmierkenntnissen implementierbar ist, bietet OpenWebUI eine einzigartige Möglichkeit, auch ohne umfassende Programmiererfahrung faszinierende und nützliche Chatbots zu erstellen.


In diesem Artikel berichten wir von unserem Weg zur Entwicklung eines Chatbots für den technischen Support, der unser Front-Line-Team durch die Beantwortung von Benutzerfragen unterstützen soll (und schließlich selbst ein Teil unseres Teams wird).


Mieten Sie GPU-Server mit sofortiger Bereitstellung oder einen Server mit einer benutzerdefinierten Konfiguration mit professionellen NVIDIA Tesla A100 / H100 80 Gb- oder A5000 / A4000-Karten. GPU-Server mit Gaming-RTX4090-Karten sind ebenfalls verfügbar.


Startpunkt

Wir haben Benutzerdokumentation mit Material für MkDocs erstellt. Dies führt zu einer Verzeichnisstruktur mit MD-Dateien mit Markdown-Formatierung. Wir haben auch ein bereitgestelltes OpenWebUI- und Ollama-Setup mit geladenem llama3-8b-instruct-Modell.


Projektziele:


  1. Entwickeln Sie einen benutzerdefinierten Chatbot: Dieser Chatbot interagiert mit Benutzern und stellt Informationen basierend auf unserer Dokumentation bereit.
  2. Dokumentation in ein für LLMs geeignetes Format konvertieren: Wir müssen unsere Markdown-Dokumentation in ein Format umwandeln, das von LLMs für Retrieval Augmented Generation (RAG) effizient verarbeitet werden kann.
  3. Datenaktualisierungen und -ergänzungen ermöglichen: Das System sollte laufende Aktualisierungen und Ergänzungen der Vektordatenbank mit unserer Dokumentation ermöglichen.
  4. Konzentrieren Sie sich auf die Beantwortung von Fragen: Der Chatbot sollte in erster Linie als Frage-Antwort-System fungieren und Gespräche vermeiden, die nichts mit IT zu tun haben.
  5. Quellenlinks bereitstellen: Wenn möglich, sollte der Chatbot für die bereitgestellten Informationen auf die ursprünglichen Dokumentationsquellen zurückverlinken.
  6. Implementieren Sie eine Fragenfilterung: Wir müssen die Möglichkeit haben, Fragenbeschränkungen für den Chatbot zu konfigurieren. Beispielsweise möchten wir möglicherweise verhindern, dass er Fragen basierend auf dem geografischen Standort beantwortet.

Naive Implementierung

Unser erster Versuch bestand darin, unsere vorhandene Dokumentation einfach in ihrem ursprünglichen Markdown-Format zu laden und das llama3-Modell ohne Änderungen zu verwenden. Die Ergebnisse waren, gelinde gesagt, enttäuschend:


Erstens: Unsere Markdown-Dateien enthalten verschiedene Elemente wie Bild-Tags, Fußnoten, Codeblöcke, Fett- und Kursivformatierungen, interne und externe Links, Symbole und sogar " ** "-Konstruktionen für Schaltflächen. All dieser zusätzliche "Lärm" verursacht Probleme, wenn die Dokumentation zur Verarbeitung in Blöcke aufgeteilt wird.


Zweitens: Das Modell sentence-transformers/all-MiniLM-L6-v2, das OpenWebUI standardmäßig zur Darstellung von Sätzen und Absätzen in einem 384-dimensionalen Vektorraum verwendet (wichtig für RAG-Aufgaben wie Clustering und semantische Suche), ist hauptsächlich auf Englisch trainiert. Wir möchten, dass unser Bot irgendwann auch andere Sprachen unterstützt.


Drittens: Obwohl llama3 ein Instructor-Modell ist, kann es dennoch zu themenfremden Diskussionen führen, anstatt sich auf die Beantwortung von Benutzeranfragen zu konzentrieren. Ein 70b-Modell wäre möglicherweise besser geeignet, erfordert jedoch eine GPU mit 40 GB Videospeicher, während llama3-8b auf einer GPU mit nur 8 GB ausgeführt werden kann.

Während das dritte Problem möglicherweise durch die Erstellung eines benutzerdefinierten Modells (Agent in der OpenAI-Terminologie) behoben werden könnte, sind für die ersten beiden umfangreichere Workarounds erforderlich. Hier ist, was wir uns bisher ausgedacht haben.

Schritt für Schritt: Einrichten eines technischen Support-Chatbots in OpenWebUI

Zunächst konvertieren wir die Dokumentation in ein Format, das sich zum Laden in unser RAG-System (Retrieval Augmented Generation) eignet. Um diesen Vorgang zu automatisieren, haben wir ein leistungsstarkes Bash-Skript namens ai_text_generator erstellt.


Das Skript durchsucht alle Dokumentationsverzeichnisse und verwendet reguläre Ausdrücke in sed, awk und perl, um Markdown-Markup zu entfernen und zu ersetzen, das von RAG nicht benötigt wird. Schließlich fügt es am Ende jedes Dokuments einen Link zur Originaldokumentation hinzu, die unter https://hostkey.com/documentation gehostet wird.



Dieses Skript bereitet Ihre Dokumentation sorgfältig für die Verwendung mit einem RAG-System in OpenWebUI vor. Hier ist eine schrittweise Zusammenfassung seiner Aktionen:


  • URL-Generierung: Es wird für jede Dokumentationsdatei eine vollständige URL generiert.
  • Entfernen von Bildmarkierungen: Entfernt alle Markdown-Markierungen, die sich auf Bilder beziehen.
  • Löschen von Anmerkungen: Entfernt alle Anmerkungen aus dem Text. Formatieren von Schaltflächen: Wandelt die **- und **- Syntax von Markdown in [ ] um und formatiert sie effektiv als Schaltflächen.
  • Überschriften entfernen: Löscht Zeilen, die mit "> " beginnen und wahrscheinlich zum Erstellen einer Gliederung oder eines Inhaltsverzeichnisses verwendet werden.
  • Symbolentfernung: Entfernt sämtliche Markdown-Markups oder Codes, die Symbole darstellen.
  • Fette Textformatierung: Entfernt die fette Textformatierung von Markdown.
  • Linkänderung: Löscht interne Links, während externe Links erhalten bleiben.
  • Formatierung von E-Mail-Links: Formatiert Links zu E-Mail-Adressen neu.
  • Leerzeichennormalisierung: Entfernt zusätzliche Leerzeichen am Anfang jeder Zeile bis zum ersten Zeichen.
  • Zeilenende-Konvertierung: Konvertiert CRLF (Windows-Zeilenenden) in das UNIX-Format (LF).
  • Reduzierung leerer Zeilen: Eliminiert mehr als eine aufeinanderfolgende leere Zeile.
  • URL-Anhängen: Fügt die generierte URL an das Ende jeder verarbeiteten Datei an.


Nach dem Ausführen des Skripts enthält das Verzeichnis ai_data eine Reihe von Dateien, die zum Laden in das RAG-System von OpenWebUI bereit sind.



Als Nächstes müssen wir OpenWebUI ein neues Modell hinzufügen, um mit unserer Dokumentvektordatenbank und dem Ollama LLM zu arbeiten. Dieses Modell sollte einen eher umgangssprachlichen „Du“-Ton (ты) unterstützen, nicht nur im Englischen. Wir planen, in Zukunft auch Unterstützung für andere Sprachen wie Türkisch hinzuzufügen.


  1. Um zu beginnen, gehen wir zum Admin-Bereich - Einstellungen - Dokumente . Im Feld Embedding Model wählen wir sentence-transformers/all-MiniLM-L12-v2 . Wir haben alle empfohlenen Modelle aus dieser Liste (https://www.sbert.net/docs/sentence_transformer/pretrained_models.html) getestet und fanden, dass dieses am besten passt.

  2. Wir klicken auf das Download-Symbol neben dem Feld „Embedding Model“, um es herunterzuladen und zu installieren.

  3. Lassen Sie uns gleich die RAG-Parameter einrichten:

    • Top K = 10: Dies bedeutet, dass das System beim Generieren einer Antwort die 10 relevantesten Dokumente berücksichtigt.

    • Blockgröße = 1024: Dokumente werden zur Verarbeitung in Blöcke von 1024 Token aufgeteilt.

    • Chunk-Überlappung = 100: Zwischen aufeinanderfolgenden Chunks besteht eine Überlappung von 100 Token.



Danach können Sie zum Abschnitt „Arbeitsbereich – Dokumente“ gehen und unsere Dokumentation hochladen. Es ist eine gute Idee, ihr ein spezifisches Sammlungs-Tag zuzuweisen (in unserem Fall hostkey_en), um später die Verbindung zum Modell oder zu API-Anfragen zu erleichtern.



Als Nächstes erstellen wir ein benutzerdefiniertes Modell für unseren Chatbot. Dazu gehen wir zurück zu Arbeitsbereich – Modelle und klicken auf das Plus-Symbol.


Wir geben unserem Chatbot einen Namen und wählen das Basismodell aus (in unserem Fall llama3-latest).


Dann definieren wir die Systemeingabeaufforderung. Diese sagt dem Chatbot, wie er sich selbst sehen und verhalten soll. Sie umreißt seine Rolle, seine Einschränkungen und unsere gewünschten Ergebnisse.


Dies ist die Systemeingabeaufforderung, die wir für unseren Chatbot für den technischen Support entwickelt haben:


You are HOSTKEY an IT Support Assistant Bot, focused on providing users with IT support based on the content from knowledge base. Stay in character and maintain your focus on IT support, avoiding unrelated activities such as creative writing or engaging in non-IT discussions.


If you cannot find relevant information in the knowledge base or if the user asks non-related questions that are not part of the knowledge base, do not attempt to answer and inform the user that you are unable to assist and print text "Visit https://hostkey.com/documentation for more information" at the end.


Provide short step-by-step instructions and external links


Provide a link to relevant doc page about user question started with 'See more information here:'Add text "Visit https://hostkey.com/documentation for more information" at the end.


Example of answer: " User: How can I cancel my server?


Bot:


You can cancel your server at any time. To do this, you need to access the Invapi control panel and follow these steps:

- Go to the "Billing" tab in the specific server management menu.

- Click the [Cancel service] button.

- Describe the reason for the cancellation and select its type.

- Click the [Confirm termination] button.


Please note that for immediate cancellation, we will not refund the hours of actual server usage, including the time to provision the server itself, order software, and process the cancellation request (up to 12 hours). The unused balance will be returned to your credit balance. Withdrawal of funds from the credit balance will be made in accordance with our refund policy.


You can cancel the service cancellation request in the Billing tab using the [Revoke] button.

Additionally, if you need to cancel a service that includes an OS/software license or has a customized/non-standard configuration, please contact us via a ticketing system for manual refund processing.


See more information here: https://hostkey.com/documentation/billing/services_cancellation/ "


Als Nächstes verknüpfen wir die erforderliche Dokumentensammlung. Klicken Sie im Abschnitt „Wissen“ auf die Schaltfläche „Dokumente auswählen“ und wählen Sie die gewünschte Sammlung anhand ihres Tags aus.


Mieten Sie GPU-Server mit sofortiger Bereitstellung oder einen Server mit einer benutzerdefinierten Konfiguration mit professionellen NVIDIA Tesla A100 / H100 80 Gb- oder A5000 / A4000-Karten. GPU-Server mit Gaming-RTX4090-Karten sind ebenfalls verfügbar.



Wir müssen auch einige zusätzliche Parameter konfigurieren, die unter der Registerkarte „Erweiterte Parameter“ versteckt sind. Wenn Sie auf „Anzeigen“ klicken, werden diese Einstellungen angezeigt. Wir setzen die Temperatur auf 0,3 und die Kontextlänge auf 4089.



Abschließend klicken wir auf „Speichern und aktualisieren“ , um unser benutzerdefiniertes Chatbot-Modell für den technischen Support zu erstellen.


Und da haben Sie es! Unser Chatbot ist einsatzbereit und bearbeitet Benutzeranfragen. Er ist höflich, geduldig und rund um die Uhr verfügbar.

Tipps zum Arbeiten mit RAG in OpenWebUI

Hier sind einige wichtige Tipps, die Sie beachten sollten:

  1. Wenn Sie mit einer großen Anzahl von Dokumenten in RAG arbeiten, wird dringend empfohlen, OpenWebUI mit GPU-Unterstützung zu installieren (Zweig open-webui:cuda).
  2. Bei allen Änderungen am Embedding-Modell (Umschalten, Laden usw.) müssen Sie Ihre Dokumente erneut in der Vektordatenbank indizieren. Bei Änderungen der RAG-Parameter ist dies nicht erforderlich.
  3. Wenn Sie Dokumente hinzufügen oder entfernen, gehen Sie immer in Ihr benutzerdefiniertes Modell, löschen Sie die Sammlung dieser Dokumente und fügen Sie sie erneut hinzu. Andernfalls funktioniert Ihre Suche möglicherweise nicht richtig oder ist deutlich weniger effektiv. Wenn Ihr Bot falsche Antworten liefert, die Dokumentation mit den erforderlichen Informationen jedoch in der Liste unten angezeigt wird, liegt das wahrscheinlich daran.
  4. Obwohl OpenWebUI verschiedene Formate zum Erstellen von RAG erkennt (pdf, csv, rst, xml, md, epub, doc, docx, xls, xlsx, ppt, ppt, txt), empfiehlt es sich, Dokumente für eine optimale Leistung als Nur-Text hochzuladen.
  5. Die Hybridsuche kann zwar die Ergebnisse verbessern, ist jedoch ressourcenintensiv und kann die Antwortzeiten selbst auf einem leistungsstarken GPU erheblich verlängern (20-30-40 Sekunden oder mehr). Dies ist ein bekanntes Problem, für das die Entwickler an einer Lösung arbeiten.



Nachdem wir den Chatbot getestet haben, besteht der nächste Schritt darin, ihn in das bestehende Chatsystem unseres Unternehmens zu integrieren. OpenWebUI bietet eine API und kann als Proxy für Ollama fungieren und seine eigenen einzigartigen Funktionen hinzufügen. Die Dokumentation ist jedoch noch unzureichend, was die Integration zu einer kleinen Herausforderung macht.


Durch die Untersuchung des Codes und des Commit-Verlaufs haben wir einige Erkenntnisse zur Strukturierung von API-Anfragen gewonnen, aber es funktioniert noch nicht ganz wie erwartet. Wir haben es geschafft, das benutzerdefinierte Modell aufzurufen, aber ohne RAG-Funktionalität.

Wir warten gespannt auf die von den Entwicklern versprochenen Funktionen in kommenden Versionen, darunter RAG, Websuche sowie ausführliche Beispiele und Beschreibungen.


Der Testprozess hat auch einige Inkonsistenzen und Redundanzen in unserer Dokumentation aufgedeckt. Dies bietet die Möglichkeit, sowohl die Leistung des Chatbots zu verbessern als auch die allgemeine Klarheit und Genauigkeit unserer Dokumentation zu verbessern.


Mieten Sie GPU-Server mit sofortiger Bereitstellung oder einen Server mit einer benutzerdefinierten Konfiguration mit professionellen NVIDIA Tesla A100 / H100 80 Gb- oder A5000 / A4000-Karten. GPU-Server mit Gaming-RTX4090-Karten sind ebenfalls verfügbar.