Wie baue ich einen Chatbot, um mit meinem internen Wissensmanagement zu sprechen?

Mit den eigenen Dokumenten sprechen? Mit J.A.R.V.I.S. die richtigen Antworten bekommen wie im Film Ironman? Alles Science Fiction? Nicht mehr! Mit Large Language Models (LLMs) ist es jetzt möglich, menschenähnliche Gespräche zu führen. Und das am besten direkt über die eigenen Daten. In diesem Blogpost schauen wir uns das mal genauer an. Und heute gibt es auch ein paar Emoticons. Das ist eine beispiellose Innovation, die Chatbots noch vor 2024 überflüssig machen wird. Tatsächlich haben Systeme wie ChatGPT erhebliche Verbesserungen mit sich gebracht, wie z.B. verbesserte sprachliche Fähigkeiten (einschließlich Grammatik, Syntax und Schreibstil), ein Gesprächsgedächtnis und ein umfassendes Wissen über viele Themen. 

Trotz dieser großartigen Funktionen haben diese Systeme jedoch ihre Grenzen, wenn es darum geht, Fragen zu sehr technischen Themen zu beantworten (z. B. zum eigenen Unternehmen oder zu eigenen Dokumenten), mit aktuellen Daten umzugehen, die sie in der Trainingsphase nicht kennen gelernt haben, oder auf private Dokumente zuzugreifen, zu denen sie normalerweise keinen Zugang haben. Um das letztgenannte Problem zu lösen, zeige ich Ihnen in diesem Beitrag, wie Sie einen personalisierten Chatbot entwickeln können, der sich mit Ihren Datenquellen verbindet und Fragen zu Ihrer internen Wissensdatenbank beantwortet. Wir werden uns die Gesamtarchitektur und die Bausteine ansehen und alles anhand eines Beispiels durchgehen.

Warum ist es wichtig, einen eigenen Chatbot zu entwickeln?

Es geht immer um Präzision und die damit verbundene Produktivität! Die Einrichtung eines Frage-Antwort-Systems (QA) für interne Daten ist heute für die meisten Unternehmen von großem Interesse, da es unbestreitbare Vorteile bietet:

Genauigkeit: Wenn Sie den Bot so einstellen, dass er nur auf der Grundlage der bereitgestellten Daten antwortet, können Sie sicher sein, dass er keine falschen Informationen verbreitet oder Dinge erfindet. Dies ist besonders wichtig, wenn Ihre Daten domänenspezifisch sind. Stellen Sie sich eine Dartscheibe vor, bei der jeder geworfene Pfeil genau in der Mitte landet. Genauso präzise und zielgerichtet sollte Ihr QA-System mit Ihren internen Daten umgehen.

Produktivität: Die Interaktion mit einem QA-Chatbot macht die Informationsbeschaffung fast augenblicklich und erspart den Benutzern viel Zeit und Mühe. Es ist, als hätte man einen digitalen Assistenten, der blitzschnell die richtigen Informationen aus einem riesigen Datenpool herausfiltert, ähnlich dem perfekten Wurf auf eine Dartscheibe.

Wartbarkeit: Wenn sich Ihre Wissensbasis im Laufe der Zeit erweitert oder aktualisiert, können Sie dies bei der Datenerfassung berücksichtigen (mehr dazu weiter unten) und den Bot entsprechend aktualisieren. Dies ist vergleichbar mit der Erweiterung eines Dartspiels, bei dem neue Elemente oder Herausforderungen hinzugefügt werden, um es interessant und relevant zu halten.

Erweiterbarkeit: Wenn Sie eine neue Datenquelle hinzufügen möchten (z.B. eine Datenbank mit PDF-Dateien oder einen Dump von E-Mails), ist das so einfach wie das Konfigurieren eines neuen Dokumentenladers (mehr dazu im Abschnitt Code weiter unten). Es ist wie das Hinzufügen neuer Ziele auf Ihrer metaphorischen Dartscheibe – es erweitert das Spektrum der Fragen, die Ihr System beantworten 

Vollständige Kontrolle und Datenschutz: Wenn Sie Ihren personalisierten Chatbot mit Open-Source-LLMs (Large Language Models) und Vektor-Datenbanken erstellen und einsetzen, können Sie ihn vollständig in Ihrer eigenen Infrastruktur verwalten und Systemausfälle oder schlechte Service Level Agreements vermeiden. Es ist, als hätten Sie Ihre eigene Dartscheibe zu Hause, anstatt sich auf die Verfügbarkeit und Qualität einer öffentlichen Einrichtung verlassen zu müssen.

Die Architektur

Es gibt viele Möglichkeiten, ein benutzerdefiniertes Frage-Antwort-System (QA) für einen Satz von Dokumenten zu erstellen und zu gestalten. In diesem Artikel betrachten wir eine Architektur, die mehrere Komponenten kombiniert. Um Ihnen zu helfen zu verstehen, wie die einzelnen Teile zusammengefügt werden, werden wir diesen Arbeitsablauf Schritt für Schritt durchgehen:

0 — Datensammlung

Beginnen Sie mit der Sammlung von Daten, die Ihre Wissensbasis darstellen. Diese Daten können natürlich aus unterschiedlichen Quellen stammen: PDF-Dateien, E-Mails, Exporte aus Confluence oder Notion, Webdaten etc.

1 — Vorverarbeitung der Dokumente

Wenn Sie Ihre Dokumente gesammelt haben, unterteilen Sie sie in Abschnitte (mit oder ohne Überlappungen). Dies ist besonders nützlich, um später Token-Limits zu vermeiden, die von vielen großen Sprachmodellen (LLMs) beim Einbetten auferlegt werden.

2 — Einbettung der Dokumente

Verwenden Sie ein Einbettungsmodell aus einer Open-Source-Quelle (z. B. LLama2, Falcon) oder einen Dienst eines Drittanbieters (OpenAI, Cohere, Anthropic), um die zuvor erstellten Abschnitte in Vektoren (auch Einbettungen genannt) umzuwandeln.

Schritte zur Einbettung:

1. Auswahl eines geeigneten Einbettungsmodells: Wählen Sie ein Einbettungsmodell, das Ihren spezifischen Anforderungen entspricht. Jedes Modell hat seine eigenen Stärken und Anwendungsbereiche, sei es in Bezug auf die Sprachverarbeitungsfähigkeiten oder die Art der Daten, die es am besten verarbeiten kann.

2. Transformation der Textabschnitte: Die Textabschnitte werden in hochdimensionale Vektoren transformiert. Diese Vektoren repräsentieren die semantischen und syntaktischen Merkmale der Texte, ähnlich wie eine Dartscheibe verschiedene Punkte darstellt, die zusammen ein Gesamtbild ergeben.

3. Modellgrenzen berücksichtigen: Beachten Sie die Einschränkungen des gewählten Modells, wie z.B. Token-Limits. Stellen Sie sicher, dass Ihre Textabschnitte diese Grenzen nicht überschreiten, um eine effektive Verarbeitung zu gewährleisten.

4. Qualitätssicherung: Überprüfen Sie die Qualität der Einbettungen. Gute Einbettungen sollten den Inhalt und Kontext der Originaltexte genau wiedergeben. Nehmen Sie gegebenenfalls Anpassungen vor, um die Genauigkeit zu verbessern.

5. Speicherung der Vektoren: Speichern Sie die generierten Vektoren in einer Datenbank oder einem ähnlichen Speichersystem. Diese Vektoren werden später vom QA-System verwendet, um Benutzeranfragen zu beantworten.

6. Skalierbarkeit berücksichtigen: Stellen Sie sicher, dass Ihr Einbettungsprozess skalierbar ist, um mit der wachsenden Menge und Vielfalt Ihrer Daten umgehen zu können. Wie ein Set Dartscheiben, das an verschiedene Spielstärken angepasst werden kann, sollte auch Ihr System flexibel genug sein, um sich ändernden Anforderungen anzupassen.

3 — Indexierung der Einbettungen in einer Vektordatenbank

Sobald die Einbettungen berechnet sind, speichern Sie sie in einer Vektordatenbank wie Chroma, Deeplake oder Pinecone. Vektordatenbanken sind nützlich, um hochdimensionale Daten zu speichern und Vektorähnlichkeiten zu berechnen.

Schritte zur Indexierung in einer Vektordatenbank:

1. Auswahl der geeigneten Vektordatenbank: Wählen Sie eine Vektordatenbank, die Ihren spezifischen Anforderungen entspricht. Berücksichtigen Sie Faktoren wie Skalierbarkeit, Geschwindigkeit der Abfrageausführung und Integration in Ihre bestehende Infrastruktur.

2. Übertragung der Einbettungen in die Datenbank: Importieren Sie die erstellten Einbettungen in die ausgewählte Vektordatenbank. Stellen Sie sicher, dass die Datenstruktur und das Format mit den Anforderungen der Datenbank kompatibel sind.

3. Organisation und Strukturierung der Daten: Strukturieren Sie die Daten in der Vektordatenbank sinnvoll. Dies kann das Hinzufügen von Indizes, Tags oder anderen Metadaten umfassen, um die Suche und Abfrage zu vereinfachen.

4. Abfrageoptimierung: Optimieren Sie die Datenbank, um effiziente und schnelle Abfragen zu ermöglichen. Dies ist entscheidend, um die Leistung Ihres QA-Systems zu maximieren. Denken Sie an die Vektordatenbank wie an ein organisiertes Dartboard, auf dem Sie schnell und präzise auf den gewünschten Bereich zielen können.

5. Sicherstellung der Datenintegrität: Überwachen und warten Sie die Integrität Ihrer Daten regelmäßig. Stellen Sie sicher, dass die Einbettungen aktuell bleiben und die Datenbank korrekt funktioniert.

6. Implementierung von Ähnlichkeitssuchen: Nutzen Sie die Fähigkeiten Ihrer Vektordatenbank, um Ähnlichkeitssuchen durchzuführen. Diese Suchen ermöglichen es Ihrem QA-System, die relevantesten Einbettungen (und damit die relevantesten Dokumentenabschnitte) für eine gegebene Anfrage zu finden.

4 — Eine Frage stellen

Sobald die Dokumente in eine Vektordatenbank eingebettet und indiziert sind, können Sie Ihre Anfrage über eine Chat-Schnittstelle senden.

Schritte zum Stellen einer Frage:

1. Integration einer Chat-Schnittstelle: Richten Sie eine Benutzeroberfläche ein, die es den Benutzern ermöglicht, Fragen in natürlicher Sprache zu stellen. Diese Schnittstelle kann in bestehende Systeme wie Websites, interne Tools oder mobile Anwendungen integriert werden.

2. Formulierung der Anfrage: Benutzer stellen ihre Fragen in der Chat-Schnittstelle. Diese Fragen sollten klar und präzise formuliert sein, um die Genauigkeit der Antworten zu erhöhen.

3. Übertragung der Anfrage an das Backend: Die gestellte Frage wird vom Frontend an das Backend übertragen, wo sie verarbeitet wird. Dieser Schritt ist vergleichbar mit dem Werfen eines Darts auf eine Dartscheibe – der Pfeil repräsentiert die Anfrage und die Dartscheibe das QA-System.

4. Umwandlung der Anfrage in eine Einbettung: Im Backend wird die Anfrage in eine Einbettung umgewandelt, ähnlich wie die Dokumente zuvor. Dies ermöglicht es dem System, die Frage mit den eingebetteten Dokumenten in der Vektordatenbank zu vergleichen.

5. Suche nach der besten Antwort: Das System verwendet die Vektordatenbank, um die Einbettung der Anfrage mit den vorhandenen Dokumenteneinbettungen zu vergleichen. Es identifiziert die am besten passenden Dokumente oder Abschnitte, die potenzielle Antworten enthalten könnten.

6. Bereitstellung der Antwort: Die relevanteste Information wird extrahiert und dem Benutzer als Antwort über die Chat-Schnittstelle präsentiert. Dieser Schritt ist der „Treffer“ auf der Dartscheibe, wo das Ziel erreicht wird – in diesem Fall die Bereitstellung einer genauen und nützlichen Antwort.

5 — Fragestellung des Users einbetten

Verwendung desselben Einbettungsmodells, um die Abfrage in einen Vektor umzuwandeln.

6 / 7 — Relevante Dokumente zur Anfrage finden

Verwenden Sie die Vektordatenbank, um die Dokumentabschnitte zu finden, die Ihrer Anfrage am ähnlichsten sind. (Wie Sie vielleicht erwarten, wird das Ähnlichkeitsmaß anhand der Einbettungen berechnet.) Diese Abschnitte sind nicht die endgültige Antwort, nach der Sie suchen, aber sie stehen in Beziehung dazu: Sie enthalten im Wesentlichen Elemente der Antwort und liefern den Kontext.

Schritte zur Identifizierung relevanter Dokumente:

1. Durchführung einer Ähnlichkeitssuche: Starten Sie in Ihrer Vektordatenbank eine Suche, um die Einbettungen zu finden, die der Einbettung Ihrer Anfrage am nächsten kommen. Dieser Schritt ist vergleichbar mit dem Verwenden eines Detektors, um die relevantesten Bereiche auf einer Dartscheibe zu identifizieren.

2. Auswahl der relevantesten Abschnitte: Basierend auf den Ähnlichkeitswerten wählen Sie die Dokumentenabschnitte aus, die am wahrscheinlichsten nützliche Informationen für die Beantwortung der Anfrage enthalten. Diese Abschnitte sind wie die am dichtesten beieinander liegenden Punkte auf der Dartscheibe, die auf eine hohe Treffergenauigkeit hinweisen.

3. Bewertung der Kontextrelevanz: Bewerten Sie, wie relevant jeder ausgewählte Abschnitt im Kontext der gestellten Frage ist. Dies erfordert möglicherweise ein tieferes Verständnis der Inhalte und wie sie sich auf die Anfrage beziehen.

4. Extraktion von Schlüsselinformationen: Extrahieren Sie wichtige Informationen aus den relevanten Abschnitten. Diese Informationen stellen die Bausteine der endgültigen Antwort dar, ähnlich wie die einzelnen Pfeile, die auf der Dartscheibe landen und zum Gesamtergebnis beitragen.

5. Zusammenstellung einer zusammenhängenden Antwort: Kombinieren Sie die extrahierten Informationen zu einer kohärenten und umfassenden Antwort. Dies kann eine Synthese verschiedener Informationsquellen erfordern, um eine vollständige und genaue Antwort zu bieten.

6. Überprüfung auf Vollständigkeit und Genauigkeit: Stellen Sie sicher, dass die zusammengestellte Antwort vollständig und genau ist und den Kern der gestellten Frage trifft. Dies ist wie das Überprüfen, ob alle geworfenen Pfeile die richtigen Bereiche der Dartscheibe getroffen haben, um ein zufriedenstellendes Ergebnis zu erzielen.

8 — Erstellen eines Prompts

Verwenden Sie die zuvor extrahierten ähnlichen Dokumente als Kontext in einem Prompt. Dieser Prompt hat die folgende Struktur, kann aber angepasst werden, um Ihren spezifischen Anforderungen gerecht zu werden:

Beantworte die folgende Frage {Frage}

Verwende nur diesen Kontext, um die Antwort zu konstruieren: %KONTEXT% {Kontext}

Schritte zur Erstellung des Prompts:

1. Formulierung der Frage: Beginnen Sie den Prompt mit einer klaren Formulierung der Benutzeranfrage. Diese sollte so präzise wie möglich sein, um dem Modell die richtige Richtung zu geben. Zum Beispiel: „Beantworte die folgende Frage: Wie verbessert man die Effizienz in automatisierten Produktionsprozessen?“

2. Einbindung des Kontexts: Fügen Sie den zuvor extrahierten Kontext direkt in den Prompt ein. Dieser Kontext sollte die relevanten Informationen aus den ähnlichsten Dokumentenabschnitten enthalten, die zur Beantwortung der Frage beitragen können.

3. Kennzeichnung des Kontextbereichs: Verwenden Sie eine klare Kennzeichnung, um den Bereich des Kontexts im Prompt zu definieren. Sie könnten beispielsweise %KONTEXT% vor und nach dem tatsächlichen Kontext setzen, um dem Modell deutlich zu machen, wo der Kontext beginnt und endet.

4. Anpassung des Prompts: Passen Sie das Format des Prompts an Ihre spezifischen Bedürfnisse an. Berücksichtigen Sie dabei die Art der Frage, die Länge des Kontexts und die erwartete Antwortform.

5. Überprüfung der Klarheit und Relevanz: Stellen Sie sicher, dass der Prompt klar und relevant ist. Der Kontext sollte eng mit der Frage verknüpft sein und Informationen enthalten, die zur Erstellung einer präzisen Antwort beitragen.

6. Einsatz in Ihrem QA-System: Verwenden Sie den erstellten Prompt in Ihrem QA-System, um Antworten auf Benutzeranfragen zu generieren. Das System wird den Prompt verwenden, um die relevanten Informationen im Kontext zu analysieren und eine zusammenhängende Antwort zu formulieren.

9 — Generieren der Antwort

Wenn der Prompt (die Frage) vom Benutzer gestellt wurde, wird er an das LLM weitergeleitet, damit eine passende Antwort gesucht werden kann.

Die gesamte Wissensmanagement KI-Architektur

Beitrag teilen
Kontakt aufnehmen