Blog

Chatbots mit Chatbots testen

Als Tester muss ich zugeben, dass es mir Ende 2022, als ChatGPT-3 veröffentlicht wurde, ein Vergnügen war, Screenshots von ChatGPT zu finden, die fehlerhaft waren. Als die Leute merkten, dass sie mit diesem neuen Spielzeug Wunder vollbringen konnten - Aufsätze schreiben, einfache Probleme lösen, Code generieren, bestehende Anwendungen um neue Funktionen erweitern - sahen wir viele Beispiele für fehlerhafte Argumentation und logische Irrtümer, sachliche Fehler oder sogar Sicherheitsrisiken.

Mein persönlicher Favorit war, als ein Nutzer ChatGPT nach dem Namen der ersten weiblichen Präsidentin der Französischen Republik fragte. Der Bot konnte keinen Namen finden, also erfand er selbstbewusst einen.

Dafür gibt es inzwischen einen Fachbegriff: Halluzinationen.

Die Möglichkeit, dass der Bot Halluzinationen hat, stellt ein großes Problem dar. Einerseits ist die generative KI ein leistungsfähiges Werkzeug, das sich seinen Platz in der Branche und in unserem Lebensunterhalt erobern wird. Andererseits dürfen wir nicht vergessen, dass man der KI nicht blind vertrauen kann.

Denn wenn KI halluziniert, tut sie dies mit Selbstbewusstsein, und zwar auf eine Weise, die für die Nutzer oft nicht offensichtlich ist.

Da stellt sich die Frage: Wie testet man überhaupt einen Chatbot?

Chatbots testen: Ein erster Blick

Wie kann man einen Chatbot testen? Die kurze Antwort lautet: Man testet ihn, indem man einfach mit ihm spricht, wie es ein normaler Benutzer tun würde. Als manueller Tester werden Sie schnell feststellen, dass diese Tests sehr zeitaufwändig sind und dass es keine manuelle Möglichkeit gibt, die “Wahrhaftigkeit” Ihres KI-basierten Chatbots gründlich zu testen, da es unendlich viele potenzielle Fragen gibt.

Daher die Notwendigkeit der Automatisierung. Die Testautomatisierung bietet viele Vorteile: Sie ermöglicht es uns, schneller und systematischer zu testen. Wir werden immer noch nicht gründlich testen können, aber wir werden mehr testen können.

Um zu verstehen, warum das so ist, sollten wir kurz auf die Grundlagen des automatisierten Testens zurückkommen.

Schematisch gesehen ist die Automatisierung von Tests sehr einfach: Sie wollen ein System testen, das eine Eingabe A entgegennimmt und, wenn es diese erhält, B ausgibt. Ihr automatisierter Test liefert die Eingabe A, sorgt dafür, dass das System ausgelöst wird, und überprüft dann die Ausgabe. Given-When-Then, Arrange-Act-Assert, nennen Sie es, wie Sie wollen. Der deterministische Aspekt macht es einfach - und daher auch leicht zu automatisieren -.

Das Problem ist, dass Chatbots nicht-deterministische Systeme sind:

  • Sie erhalten Eingaben in natürlicher Sprache, was bedeutet, dass es sehr unwahrscheinlich ist, dass zwei Nutzer die gleiche Frage auf die gleiche Weise formulieren.
  • Sie spucken Antworten aus, die ebenfalls in natürlicher Sprache abgefasst sind. Und da generative KI darauf trainiert ist, menschenähnliches Verhalten zu erzeugen, bedeutet das, dass es unwahrscheinlich ist, dass Sie fünfmal das gleiche Ergebnis erhalten, wenn Sie dieselbe Frage stellen.

Mit diesem Wissen scheint die Automatisierung von Tests für Chatbots auf dem Papier unmöglich.

Oder doch nicht?

Testautomatisierung für Chatbots

Zusammenfassend lässt sich sagen, dass das Problem, das wir mit der Testautomatisierung und Chatbots haben, darin besteht, dass der Testautomatisierungscode von Natur aus sehr deterministisch ist und sich daher nicht zum Testen eines Chatbots eignet.

Lassen Sie uns kurz zusammenfassen, was uns daran hindert, Chatbot-Testfälle zu automatisieren:

  • Um realistische Benutzereingaben zu simulieren, müssen die Eingabeaufforderungen nicht-deterministisch sein. Im Klartext heißt das, dass wir unsere Eingabeaufforderungen bei jedem Testlauf neu formulieren müssen.
  • Wir müssen einen Weg finden, um zu überprüfen, was der Chatbot antwortet. Das bedeutet in gewissem Maße, dass wir verstehen müssen, was der Chatbot schreibt.

Wir haben Glück! Wir haben eine Technologie, um dieses Problem zu umgehen: Chatbots.

  • Chatbots können verwendet werden, um eine Aufforderung neu zu formulieren.
  • Am wichtigsten ist, dass Chatbots zum “Lesen” von Aufforderungen eingesetzt werden können
  • Chatbots können bewerten, ob sie unseren Erwartungen entsprechen und wahrheitsgemäß sind

Wir können leicht eine Lösung skizzieren, die einen “QA-Chatbot” vorsieht, bei dem der Automatisierungscode lediglich als Relais zwischen den beiden Chatbots dient:

Umsetzung der Lösung

Wir haben die Idee, jetzt wollen wir sehen, wie wir sie umsetzen können. Wir werden uns darauf konzentrieren, wie unser QA-Chatbot uns hilft.

Um das Verhalten eines menschlichen Nutzers zu emulieren, müssen wir unsere Eingaben etwas unschärfer machen. Das bedeutet, dass unser Automatisierungscode eine Basisfrage enthält, die dann vom QA-Chatbot umformuliert wird. Anschließend senden wir die umformulierte Frage an den getesteten Chatbot.

Unverzügliche Neuformulierungen

Die Herausforderung besteht darin, dass der QA-Chatbot uns etwas Deterministisches zurückgeben muss, damit wir die Antwort mit unserem Automatisierungscode analysieren können. Es ist möglich, die meisten Chatbots so zu beeinflussen, dass sie uns ein bestimmtes Format zurückgeben. Die von mir gewählte Lösung besteht darin, nach einem Python-Code zu fragen, der die Umformulierungen enthält. So sieht er aus:

Dadurch zeigt uns der QA-Chatbot, wie man ein Array in Python deklariert, das die drei Umformulierungen enthält. Dieses Format ist leicht zu analysieren, auch mit deterministischem Code. Unser Automatisierungscode wählt dann eine der drei Umformulierungen nach dem Zufallsprinzip aus und sendet sie an den Chatbot, den wir testen wollen.

Antwort-Interpretation

Das Problem ist nun, dass die Antwort, die der Automatisierungscode erhält, eine Antwort im Klartext ist, also in natürlicher Sprache. Je nach Chatbot, den wir testen, können wir das Format, das wir erhalten, möglicherweise nicht beeinflussen.

Aus diesem Grund müssen wir unseren QA-Chatbot fragen, ob die Antwort gültig ist oder nicht. Hier ein Beispiel:

Was Sie oben sehen, ist eine QA-Aufforderung. Wir fügen die Antwort des Chatbots ein und fragen dann den QA-Chatbot, ob die Antwort mit einer Reihe von Behauptungen übereinstimmt. Dann sagen wir dem QA-Chatbot, dass er mit Ja oder Nein antworten soll, wenn die Behauptungen übereinstimmen; dieser Teil ist wichtig, weil unser Automatisierungscode den Test je nach dem ersten Wort der Antwort nicht besteht oder besteht.

Die obige Aufforderung ist eine sehr einfache, aber es ist auch möglich, den Wahrheitsgehalt einer Antwort zu überprüfen, indem man deterministische Elemente in die Aufforderung einbaut. So würde es funktionieren:

  1. Unser Automatisierungscode stellt eine Frage an den Chatbot, den wir testen wollen. Die Frage kann vorher umformuliert worden sein, muss es aber nicht.
  2. Unser Automatisierungscode empfängt die Antwort und prüft dann seinerseits mit deterministischem Code, was die Wahrheit ist.
  3. Unser Automatisierungscode generiert eine dreiteilige Eingabeaufforderung für den Test-Chatbot, die dieser Struktur folgen würde:
    1. Hier ist der Kontext, und hier ist, was ich weiß, dass es wahr ist
    2. Hier ist die Antwort auf meine Anfrage
    3. Würden Sie sagen, dass die Antwort, die ich erhalten habe, der Wahrheit entspricht?
  4. Unser Automatisierungscode schlägt den Test fehl oder besteht ihn, je nachdem, welche Antwort der Test-Chatbot gibt.

Was die Umsetzung erschwert, ist die Suche nach guten QA-Prompts. Das führt uns zum nächsten Schritt.

Prompt-Engineering unserer QA-Prompts

Zu diesem Zeitpunkt fragen sich die Leute, woher sie wissen, dass der QA-Chatbot funktioniert.

Die Antwort ist, dass wir dem QA-Chatbot nicht blind vertrauen. Aus diesem Grund ist die Entwicklung von QS-Eingabeaufforderungen ein langsamer und sorgfältiger Prozess.

Was macht einen guten QA-Prompt aus:

  • Der Chatbot wird dadurch nicht verwirrt.
  • Sie erkennt Anomalien.
  • Es gibt keine falsch positiven Ergebnisse.

Der Prozess der Entwicklung guter Prompts lässt sich nur schwer mit technischen Begriffen beschreiben, denn er hat nichts Technisches an sich. Es ist ein iterativer und explorativer Ansatz, und man lernt mit der Erfahrung, was funktioniert und was nicht.

Aber woher wissen wir dann, was funktioniert? Kurze Antwort: Wir haben einen Rahmen, der die Leistung jedes unserer QA-Prompts testet, indem wir sie mit verschiedenen (guten und schlechten) Antworten vergleichen. Wenn wir eine Halluzinationsrate erreichen, die unter einem bestimmten Wert liegt, betrachten wir die QA-Aufforderung als fertig.

Wir verwenden dazu ein selbst entwickeltes Framework, aber dies kann auch mit Open-Source-Tools wie OpenAI-Eval erreicht werden.

Überwachung, Bewertung der Wahrhaftigkeit

Insgesamt lieferte die Teststrategie zufriedenstellende Ergebnisse und ermöglichte es uns, unerwünschte Verhaltensweisen zu erkennen, bevor wir unseren Bot in die Produktion überführten. Aber Chatbots sind komplexe Systeme, die nicht gründlich getestet werden können, auch nicht mit automatisierten Tests. Deshalb müssen wir unseren “Ante-Mortem”-Ansatz durch einen “Post-Mortem”-Ansatz ergänzen.

Mit anderen Worten: Wir müssen den Chatbot nicht nur testen, sondern auch überwachen, sobald er in Produktion geht und mit echten Nutzern interagiert.

Um den Chatbot zu überwachen, verwenden wir eine Strategie, die der zuvor beschriebenen sehr ähnlich ist. Wir verwenden einen Evaluator-Chatbot, um zu bewerten, ob die Interaktionen mit den tatsächlichen Nutzern den Erwartungen an die Wahrhaftigkeit entsprechen.

Das ist der Kern der Sache:

  1. Wir scannen alle Interaktionen für eine bestimmte Zeitspanne.
  2. Wir leiten diese Interaktionen an einen Chatbot weiter, der darauf spezialisiert ist, zu beurteilen, ob die Antworten wahrheitsgemäß sind oder nicht.
  3. Wir verwenden diese Daten, um unseren Bot zu verbessern.

Schlussfolgerung

Bislang hat dieser Ansatz vielversprechende Ergebnisse gezeigt. Wir können Anomalien sowohl in der Vorproduktion durch Tests als auch in der Nachproduktion durch Überwachung aufspüren. Man könnte gegen diese Methode einwenden, dass nichts beweist, dass unser QA-Chatbot nicht halluziniert, aber ich würde antworten, dass dieses Risiko dadurch gemindert wird, dass wir unsere Prompts sorgfältig fälschen. Außerdem habe ich, bevor ich Chatbots mit Chatbots getestet habe, Software mit Software getestet.

Wir sollten uns auch darüber im Klaren sein, dass das, was wir mit Chatbots machen, bisher nur der Anfang der Reise ist. Wir sprechen immer noch über eine neue Technologie und sind uns des damit verbundenen Risikos sehr bewusst. Aus diesem Grund trifft ION IQ niemals eigenständig Entscheidungen - es sind immer Menschen beteiligt - und wird nur dazu verwendet, unsere Kunden besser zu informieren.

Aus diesem Grund führen wir immer noch einige manuelle Tests durch, um die automatisierten Testläufe zu vervollständigen. Das menschliche Auge muss immer noch in der Nähe bleiben.

Teilen

Artikel von

Jérémy Gosselin

Ingenieur für Testautomatisierung

Jérémy Gosselin ist ein Testautomatisierungsingenieur bei Ontinue. Ursprünglich als Entwickler ausgebildet, entwickelte er ein starkes Interesse am Testen und hat seither ein Jahrzehnt an Erfahrung in diesem Bereich gesammelt, wobei er in verschiedenen Branchen tätig war. Neben der Testautomatisierung war er mit der Ausarbeitung von Teststrategien betraut und diente als Mentor für die besten QA-Praktiken. Jérémy erwarb seinen Bachelor-Abschluss in Softwareentwicklung an der Universität Metz in Frankreich.

Schlüsselwörter