Um erste Erfahrungen mit verschiedenen AI-Technologien und Anwendungen zu sammeln, haben wir einen Chatbot für die eigene Webseite umgesetzt. Dieser Chatbot beantwortet Fragen zur Firma. Der Chatbot verwendet ausschliesslich unsere Webseite als Quelle und beantwortet keine Fragen, auf welche er keine Antwort hat.
Entstanden ist der Chatbot in folgenden 2 Iterationen:
Umsetzung mit OpenAI API
Die erste Version des Chatbots haben wir mit der OpenAI API umgesetzt.
OpenAI ist eine Non-Profit-Organisation, die sich mit der Erforschung künstlicher Intelligenz beschäftigt. Sie wird durch Spenden und Investitionen von über 1 Milliarde US-Dollar finanziert, unter anderem durch Microsoft. OpenAI's Mission ist es, die menschliche Spezies vor möglichen Gefahren durch künstliche Intelligenz zu schützen.
Über die OpenAI API können verschiedene AI-Anwendungsfälle umgesetzt werden:
- Bildgenerierung mit DALL-E
- Generieren von Vektoren aus Texten mithilfe eines Embedding Models
- Umwandlung von Audio in Text mit Whisper
- Generieren von Antworten zu Fragen (Chat-Funktion)
Für unseren Chatbot haben wir die API für 2 Anwendungen verwendet:
- Generieren von Vektoren mittels Embedding Model: Zuerst haben wir pro Inhaltsseite auf unserer Webseite die relevanten Texte extrahiert. Mithilfe eines Embedding Models von OpenAI haben wir aus diesen Texten dann die Vektoren generiert.
- Frage-Antwort-Funktion: Aus der Frage generieren wir ebenfalls einen Vektor. Damit werden die ähnlichsten Vektoren aus unserer Webseiten-Inhalten gesucht. Diese Informationen werden an die OpenAI-API weitergegeben, welche die Antwort auf die Frage generiert.
Umsetzung mit LangChain
Die aktuelle Version des Chatbots basiert auf LangChain. LangChain ist ein Python-Framework, welches die Entwicklung von AI-Applikationen vereinfacht. Es bietet diverse Integrationen mit Drittanbietern und Hilfsfunktionen, unter anderem folgende:
- Laden von Dokumenten aus verschiedenen Quellen:
- CSV-, HTML-, JSON-, Markdown-, Word- und PDF-Dateien, sowie diverse weitere Dateiformatten
- Webseiten-Inhalte via Sitemap
- Dokumente in Microsoft OneDrive
- Generieren von Vektoren aus Dokumenten via Embedding Model
- Abspeichern der Vektoren in verschiedenen Vektordatenbanken, z.B. FAISS oder Pinecone
- Anbindung von SQL-Datenbanken
- Hilfefunktionen für das Speichern der Chat-History
- Anbindung von diversen LLM wie OpenAI
Für unseren Chatbot haben wir zwei Varianten zum Generieren der Vektoren evaluiert:
- Generieren von Dokumenten aus der Sitemap unserer Webseite
- Laden der relevanten Inhalte der Webseite via REST API und Generierung der Dokumente aus der JSON-Antwort
Bei beiden Varianten werden die Dokumente jeweils in kleinere Textblöcke aufgetrennt und mit einem Embedding Model ein Vektor pro Textblock generiert.
Wir haben die zwei Varianten mit diversen Fragen evaluiert und uns schlussendlich für die zweite Variante entschieden. Beide Varianten haben jedoch sehr gute Ergebnisse geliefert und je nach Umfang der Webseite könnte die erste Variante auch besser geeignet sein.
Die generierten Vektoren haben wir in einer lokalen FAISS-Vektor-DB abgespeichert. Mit dem OpenAI-Chat-Model werden schlussendlich die Antworten auf die Fragen generiert. Im Gegensatz zur ersten Variante wird auch der Nachrichten-Verlauf gespeichert, d.h. statt einer reinen Frage-Antwort-Funktion bietet der Chatbot nun tatsächlich eine Chat-Funktion.
Fazit
In wenigen Iterationen und mit schlussendlich weniger als 100 Zeilen Code konnten wir einen gut funktionierenden Chatbot entwickeln. Dieser kann einfache Fragen über die Firma problemlos beantworten. Aufgrund vom relativ kleinen Umfang unserer Webseite, kann der Chatbot gewisse Fragen nicht beantworten. Im Vergleich zur klassischen Suche auf der Webseite liefert der Chatbot aber deutlich bessere Ergebnisse. Durch die Angabe von Quellen hat der Benutzer auch einen Anhaltspunkt für weitere Recherchen, wenn seine Frage noch nicht abschliessend beantwortet wurde.
Eine wichtige Voraussetzung für einen guten Chatbot ist der Inhalt der Webseite selbst. Wenn die Antwort auf eine Frage auf der Webseite nicht klar ersichtlich ist, kann auch der Chatbot die Frage nicht beantworten. In diesem Fall würde der Benutzer aber die gewünschte Antwort vermutlich auch mit eigener Recherche auf der Webseite nicht finden.
Eine Bewertungsfunktion kann ausserdem helfen, problematische Themenbereiche zu identifizieren und entweder den Inhalt der Webseite strukturierter aufzubereiten oder den Chatbot weiter zu optimieren. Wenn genügend Daten gesammelt wurden, kann das Modell ggf. auch damit weitertrainiert werden.
Und nun: Viel Spass beim Ausprobieren!
Kurz-Überblick Fachbegriffe
Im Artikel haben wir einige Fachbegriffe aus dem AI-Bereich erwähnt. Im folgenden wollen wir diese kurz etwas genauer erläutern.
LLM (Large Language Model)
Ein LLM ist ein generatives Sprachmodell mit künstlicher Intelligenz. Es basiert auf neuronalen Netzwerken und ist in der Lage, natürliche Sprache zu verstehen, zu verarbeiten und zu generieren. Für das Training werden riesige Datenmengen verwendet.
Embedding Model
Ein Embedding Model dient dazu, Wörter in einem Text als Vektoren zu repräsentieren. Embedding Models werden so trainiert, dass sie Worte im Vektorraum so abbilden, dass ähnliche Worte ähnliche Vektor-Darstellungen bekommen. D.h. Texte mit einer ähnlichen Bedeutung werden im Vektorraum auch nahe beieinander abgebildet. Durch das Generieren eines Vektors aus einer Frage können so die Texte identifiziert werden, die für die Beantwortung der Frage relevant sind.
Vektor-Datenbank
Die von den Embedding Models generierten Vektoren müssen in einer Vektor-Datenbank abgelegt werden. Vektor-Datenbanken sind darauf ausgelegt, auch hochdimensionale Daten effizient zu verarbeiten. Es gibt verschiedene Anbieter von Vektor-Datenbanken, wobei manche die Daten in der Cloud speichern und andere auch lokal verwendbar sind.