Dokument-Chatbot
White-Label-SaaS (2023)
Seitdem die Firma OpenAI mit ChatGPT die Möglichkeiten von künstlicher Intelligenz in einem alltagstauglichen Format der Welt präsentierte, erlebt KI-unterstütze Datenverarbeitung einen starken Aufschwung. Ein Entwickler wie ich kann ohne ein Rechenzentrum besitzen zu müssen, mit wenig monetärem Einsatz die Schnittstelle zu GPT-Modellen nutzen, um eine mit Informationen gerahmte Frage beantworten zu lassen. GPT versteht natürliche Sprache wie kaum ein anderes Modell und ermuntert die Interaktion mit Daten auf die elementarste Art – des Sprechens.
Mir wurde schnell bewusst, dass meine Fähigkeiten nicht ausreichten, das Potenzial von GPT für mich nutzbar zu machen. Mir fehlte schlichtweg das Wissen. Also begann ich, Dokumentation und Beispielcode zu lesen. Mein Ziel war, einen Ordner von Dokumenten mit Fragen durchsuchen zu können. Oder anders gesagt: Einen Chatbots auf die in den Dokumenten enthaltenen Informationen einzuschränken.
Ein Chatbot für Dokumente wie PDFs
In den letzten Monaten baute ich eine White-Label-Web-App, die mit Dokumenten deiner Wahl gefüttert werden kann, um Fragen bezogen auf die bereitgestellten Inhalte zu beantworten. Als Dokumente sind standardmäßig Datentypen wie Textdateien, PDFs oder auch CSVs unterstützt. Mit etwas Mehraufwand sind auch andere Datenquellen verarbeitbar.
In Zusammenarbeit mit dem KATAPULT-Magazin habe ich zum Beispiel alle Online-Artikel bis Anfang des Jahres 2023 indexiert und als Chatbot KATAPULT.chat bereitgestellt (Stand 2024: Projekt eingestellt). Das ehrenamtliche Projekt diente auch als Demonstration der stilistischen Individualisierungsmöglichkeiten. Beim Logo weichte ich jedoch ab, da ich derzeit Freude an pixeligen Logos verspüre und die Präsentationsprojekte ein wenig Wiedererkennung geben wollte.
Wie viel Anpassung steckt in dem White-Label-Produkt?
Ganz nach deinen Wünschen sind Logo, Farbschema und weitere Features wie eckige vs. abgerundete Kanten anpassbar.
Jede Instanz des Chatbots agiert in einem geschlossenen System. Heißt, dass deine Dokumente auch nur von dir durchsuchbar sind.
Wo ist oder Unterschied zu ChatGPT?
ChatGPT wurde zwar mit einer breiten Wissensgrundlage trainiert; Detailinformationen, wie die Inhalte deiner Dokumente, kennt die KI jedoch nicht. Du könntest einzelne Passagen in das Chatfenster von ChatGPT hineinkopieren, das würde jedoch den Mehraufwand maximieren und auch keinem Chat mit einem gesamten Dokument entsprechen. Eher einer Verarbeitung einzelner manuell herausgesuchter Abschnitte wäre. In meinem Dokumenten-Chatbot werden auf Basis einer Frage alle indexierten Dokumente berücksichtigt.
Wenn du eine spezifische Frage an GPT richtest, ist die Chance hoch, dass sie nicht beantwortet werden kann. GPT basiert auf einem Belohnungssystem. Es wird eher Falschaussagen treffen, als Unwissenheit zu bekunden, da auch falsche Rückmeldungen mehr positive Bewertungen von Usern bekommen, als ein „Ich weiß es nicht.“ Es ist daher wahrscheinlicher, dass GPT halluzinieren wird, anstatt auf deine Frage bezogen korrekte Antworten zu liefern. Diese Halluzination ist mit meinem Produkt minimiert.
Das Rezept: erst Datenbank, dann GPT
Nun weißt du, was mein Produkt kann und bist bestimmt neugierig, wie es funktioniert, oder? Ich präsentiere dir hier transparent und offen mein Rezept! Warum? Ich gehe davon aus, dass, selbst wenn das Rezept für den sagenumwobenen Burger der Krossen Krabbe gelüftet wäre, immer noch Zutaten, Werkzeuge wie Grill und andere Handlungsschritte das Endprodukt bestimmen.
Unter der Haube verwendet der Dokumenten-Chatbot eine Vektor-Suchmaschine. Das ist eine besondere Art von Datenbank, die nicht nur Text-Abschnitte speichert, sondern auch eine GPT-spezifische mathematische Repräsentation des Absatzes. Vereinfacht gesagt, kann auf Basis der gestellten Frage die Vektor-Datenbank relevante Informationen aus den bereitgestellten Dokumenten zusammentragen.
Insgesamt werden basal die folgenden Schritte durchlaufen:
- Frage in mathematischen Vektor transformieren
- Vektor an Vektor-Datenbank senden und relevante Text-Abschnitte empfangen
- Frage und Ergebnisse in einem Prompt bündeln
- Prompt an GPT schicken
Damit GPT „gezwungen“ wird, sich nur auf die bereitgestellten Informationen zu beziehen, so wenig wie möglich zu halluzinieren und auf den eigenen Wissensschatz zuzugreifen, nutzen wir folgenden Prompt:
You are an intelligent AI assistant designed to interpret and answer questions and instructions based on specific provided documents. The context from these documents has been processed and made accessible to you.
Your mission is to generate answers that are accurate, succinct, and comprehensive, drawing upon the information contained in the context of the documents. If the answer isn't readily found in the documents, you should make use of your training data and understood context to infer and provide the most plausible response.
You are also capable of evaluating, comparing and providing opinions based on the content of these documents. Hence, if asked to compare or analyze the documents, use your AI understanding to deliver an insightful response.
If the query isn't related to the document context, kindly inform the user that your primary task is to answer questions specifically related to the document context.
Here is the context from the documents:
Context: {context}
Here is the user's question:
Question: {question}
… Wobei context
eine Liste an Text-Abschnitten (mit Meta-Informationen wie Datum, Titel etc.) sowie question
die ursprünglich gestellte Frage darstellt.
Essay-Skripte von Patrick H Willems
Auf YouTube analysiert Patrick H Willems verschiedene Filmthemen, während er tonnenweise gestreifte Kleidung trägt (Insiderwitz und Logo-Inspiration zugleich). Als Patreon-Supporter habe ich auf die Skripte seiner Essays Zugriff, was gefundenes Fressen für mich war. Die PDFs indexierte in einer Vektordatenbank, adaptierte Farbschema und erstellte ein Logo. Der Chatbot, welcher auf Basis der Skripte Fragen beantwortet, war unter willems.chat verfügbar, aber das Demoprojekt wurde ebenfalls eingestellt.
Tech-Stack
- Nuxt als Meta-Framework für Frontend und Backend.
- Typesense für die Vektor-Datenbank.
- OpenAI:
- GPT als Sprachmodell
- Text-ADA für Worteinbettung