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.
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:
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.
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:
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.
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.
Wir klicken auf das Download-Symbol neben dem Feld „Embedding Model“, um es herunterzuladen und zu installieren.
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.
Hier sind einige wichtige Tipps, die Sie beachten sollten:
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.