Prototyp eines AI-basierten QA-Bots

Dev Diary

Wie ihr aus Teil 1 dieses Artikels wisst, haben wir uns im Vorfeld mit den verschiedenen Möglichkeiten für die Umsetzung von QA-Bots beschäftigt. Um unseren AI-Bot schnell umzusetzen, haben wir uns für Embeddings entschieden.

Autor
Mathias Draxler
Datum
18. Dezember 2023
Lesedauer
2 Minuten

Die Umsetzung des QA-Bots mit AI

Nach der Recherche war klar, dass ein Prototyp für die Kommandozeile einfach sein sollte. Dies führt dazu, dass unser AI-Bot aus zwei Teilen bestand:

  1. Daten sammeln, verarbeiten und Embeddings generieren.
  2. Auf Anfragen warten und diese beantworten.
     

Für die Generierung der Embeddings und Antworten entschieden wir uns beim Prototypen für die API von OpenAI, da eine sehr umfangreiche Dokumentation vorliegt und die Verwendung der API für einen Prototypen äußerst einfach ist. Als Programmiersprache verwendeten wir Python, da die meisten Tutorials damit arbeiten und die Datenverarbeitung durch die Libraries leicht zu handhaben ist.


Teil 1: Datenverarbeitung

Um unseren AI-Bot in die Lage zu versetzen, Fragen aus unserem Intranet zu beantworten, benötigte er natürlich Wissen. Wie in den meisten Unternehmen findet sich dieses Wissen auch bei uns in Wiki-Einträgen oder Blog-Artikeln. Für den AI-Bot-Prototypen kopierten wir kurzerhand zehn Texte in '.txt'-Dateien und die Verarbeitung konnte beginnen.
 

Tokenisierung & generieren von Embeddings:

Je nach API oder Large Language Model (LLM) kann nur eine bestimmte Anzahl von Tokens verwendet werden. Daher müssen große Texte aufgeteilt werden, um die maximale Tokenanzahl nicht zu überschreiten. Nachdem die Texte in die richtige Größe aufgeteilt sind, können mithilfe von OpenAI oder einem anderen Anbieter Embeddings generiert werden. Embeddings repräsentieren die Informationen eines Textes als Vektor. Diese Vektoren können verwendet werden, um relevante Texte für eine bestimmte Frage zu finden. Im Prinzip handelt es sich um eine Suche, die relevante Texte für einfache Fragen identifiziert (dies ermöglicht die kontextuelle Suche in Texten).
Jedes Embedding und der zugehörige Text mussten für Teil 2 der Anwendung gespeichert werden. Die Embeddings können in einer Vektordatenbank gespeichert werden. Für den Prototypen speicherten wir sie jedoch in einer einfachen '.csv'-Datei, die nachfolgend zur Generierung von Fragen verwendet wurde.

Teil 2: Anfragen beantworten

Wenn wir dem QA-Bot eine Frage stellen, muss ein Embedding für diese Frage generiert werden, das an OpenAI gesendet wird. Mit dem Embedding der Frage, kann in der Vektordatenbank (oder unserer '.csv'-Datei) nach den passenden Texten für die Antwort gesucht werden (Suche im Vektorraum). Die relevantesten Texte werden herangezogen und mittels eines vordefinierten Prompts an OpenAI gesendet. Die Prompt könnte wie folgt aussehen: 

Du bist ein QA-Bot für eine interne Wissensdatenbank. Beantworte die Frage ausschließlich anhand der angegebenen Texte. Wenn du keine passende Antwort findest, gib bitte an, dass keine Antwort verfügbar ist. Texte: 'relevante Texte'

Hinweis:

Auch hier wird deutlich, dass die Prompt in Kombination mit den relevanten Texten die maximale Tokenlänge nicht überschreiten darf. Daher wird die Beantwortung von Fragen, die sehr lange Texte enthalten, nicht gut funktionieren. Die Nutzer:innen können durch gezielte Fragen die Prompt umgehen und das volle Potenzial des KI-Bots nutzen. Daher sollte die Prompt gründlich getestet werden, um sicherzustellen, dass sie ordnungsgemäß funktioniert.

Sind die Frage und die Prompt bereit, fehlt nur noch das Ganze, um die Anfrage zur Generierung der Antwort an OpenAI zu senden und auf die Rückmeldung zu warten. Wenn die Frage gut formuliert ist und die Antwort in einem Text der Wissensdatenbank vorhanden ist, sollten die Benutzer:innen mit der Antwort zufrieden sein.

Learnings

  • Um einen Prototypen zu entwickeln, benötigt man nicht viel Zeit. Um ihn jedoch serienreif zu machen, wird es sicherlich noch eine Weile dauern.
  • Das Generieren von Embeddings ist ein aufwändiger Prozess und die Nutzung der APIs von Large Language Models (LLMs) ist nicht kostenfrei. Daher sollten neue Embeddings nur dann generiert werden, wenn sich die Texte tatsächlich ändern.
  • Einfache Fragen werden sehr gut beantwortet. Bei umfangreichen Texten wäre es wahrscheinlich sinnvoll, den Weg des Fine-Tuning zu wählen.
  • Es ist jedes Mal erstaunlich, wie gut textbasierte KI-Modelle funktionieren und wie präzise sie Fragen zu einem vorhandenen Text beantworten können.

Nächsten Schritte?

Da das Thema KI an Relevanz gewinnen wird, werden wir uns weiterhin damit auseinandersetzen. Folgende Schritte sind geplant:

  • Bereitstellung der passenden Infrastruktur für einen QA-Bot:
    • Generieren von Embeddings, wenn sich Inhalte im Wiki ändern.
    • Suche nach einer geeigneten Vektordatenbank und deren Inbetriebnahme.
  • Neuschreiben des Prototyps in .NET, da dies unsere bevorzugte Programmiersprache ist.
  • Alternativen für OpenAI testen:
    • Da es ausreichend Open-Source-Modelle gibt, wäre es interessant zu prüfen, ob und wie diese für den Anwendungsfall des QA-Bots funktionieren.
      Selfhosting eines Open-Source LLM.

Mehr davon?

Kontaktformular

*Pflichtfeld
*Pflichtfeld
*Pflichtfeld
*Pflichtfeld

Wir schützen deine Daten

Wir bewahren deine persönlichen Daten sicher auf und geben sie nicht an Dritte weiter. Mehr dazu erfährst du in unseren Datenschutzbestimmungen.