Hinter den Kulissen: Testing und Validierung

Hinter den Kulissen: Testing und Validierung
30/4/2024

Die Entwicklung von Assistenten für große Sprachmodelle (Large Language Model, LLM) stellt eine Reihe einzigartiger Herausforderungen dar, insbesondere wenn es um dynamische Konversationskontexte geht. Daher ist gründliches Testen entscheidend, um eine nahtlose User Experience zu gewährleisten. Tests sind auch besonders wichtig in der Entwicklung von Intelligenten Virtuellen Assistenten (IVA), um die Erwartungen der Benutzer zu erfüllen und mit Mehrdeutigkeiten und Variabilität umzugehen und Fehlinterpretationen zu vermeiden.

In diesem Artikel werden wir zwei Ebenen des Testings für LLM-Assistenten untersuchen.


  1. Deterministisch:

    Bevor wir in die Komplexitäten dynamischer Gespräche eintauchen, ist es unerlässlich sicherzustellen, dass die grundlegenden Funktionen des LLM-Assistenten wie vorgesehen funktionieren. Dies beinhaltet das Testen jeder Funktion oder Fähigkeit, um zu überprüfen, ob sie das richtige Ergebnis für eine gegebene Eingabe liefert.
  1. Nicht-deterministisch:

    Aufgrund der Natur natürlichen Sprache ist nicht-deterministisches Testen unerlässlich. Dies bezieht sich auf das Untersuchen von Szenarien, bei denen die Ergebnisse unvorhersehbar oder variabel sind. Speziell im Kontext der Verarbeitung natürlicher Sprache bezieht sich dies auf Fälle, in denen die Antwort des Modells aufgrund der inhärenten Unsicherheit in der Struktur und Interpretation der Sprache variieren kann. Die Bewertung zielt darauf ab, zu messen, wie effektiv sich das LLM in Situationen anpasst und funktioniert, in denen nicht-deterministische Ergebnisse schwer zu bewerten sind.

Beispiel eines Getränkeautomaten-Assistenten:

Ein Getränkeautomaten-Assistent ist darauf ausgelegt, Benutzerinteraktionen zu erleichtern. Benutzer können Bestellungen für verschiedene Getränke aufgeben, ihre Getränke anpassen und ihre Bestellungen über eine Gesprächsschnittstelle verwalten.

Der Getränkeautomat hat einige grundlegende Funktionen, die wir im Code definiert haben:

  • add_item,
  • remove_item,
  • cancel_order,
  • submit_order.

Zuerst möchten wir sicherstellen, dass der Assistent versteht, wann diese Funktionen aufgerufen werden sollen. Das ist der Punkt, an dem Unittests nützlich sind. Indem wir Unittests schreiben, verfeinern wir unseren Assistenten, um genau zu erkennen, wann spezifische Funktionen ausgelöst werden sollen. Indem wir sorgfältig mit diesen Tests umgehen, verbessern und verfeinern wir unseren Assistenten grundlegend, um sicherzustellen, dass er Anfragen reibungslos und ohne Probleme handhaben kann.

Beispielcode unten soll sicherstellen, dass der Assistent das "cancel_order" unter verschiedenen Eingabeszenarien genau erkennt und auslöst. Dieser sorgfältige Testprozess hilft, die Reaktionsfähigkeit und Handhabung von Benutzeranfragen durch den Assistenten zu verfeinern und zu verbessern.


@pytest.mark.repeat(5) 
	@pytest.mark.parametrize("order_input", [ 
	    "Ich glaube, ich will nichts mehr! ciao!",
	    "Storniere meine Bestellung. Auf Wiedersehen!",
	    "Ich habe es mir anders überlegt. Keine Getränke mehr für mich. Tschüß!",
	    "Ich bin nicht mehr in der Stimmung für Kaffee. Stornieren Sie meine Bestellung.",
	    "Tut mir leid, storniere die Bestellung. Ich habe es mir anders überlegt." 
	], indirect=True) 

def test_cancel_order_function_call(self, order_input): 
	assistant = BeverageAssistant() 
	reply = bmb;assistant.run_order(order_input) 
	assistant = None 
	print("Antwort vom Assistenten: ", reply)  
	assert reply[1].function_call.name == "cancel_order" 

Nachdem wir sichergestellt haben, dass der Assistent seine grundlegenden Funktionen versteht, besteht der nächste Schritt darin, ihn dynamischeren Szenarien auszusetzen. Diese Phase ist entscheidend für die Validierung, denn die Antworten des Assistenten sollen den Erwartungen entsprechen. Zu diesem Zweck führten wir Tests an unserem Getränkeassistenten durch, indem wir ihn mit einem anderen Sprachmodell (LLM) kombinierten.

Im Unterschied zum Modell des Getränkeassistenten haben wir ein separates Validierungsmodell eingeführt, das speziell für die Bewertung und Validierung der vom Assistenten generierten Antworten entwickelt wurde. Das Ziel ist es, verschiedene Testszenarien zu definieren, die eine Reihe von Interaktionsfällen mit dem Agenten umfassen. Zu diesem Zweck haben wir das Gherkin-Modell verwendet.  

Die Eingabe für unser Validierungs-LLM umfasst die Eingabeaufforderung des Benutzers, die Antwort des Assistenten und das zu bewertende Testszenario. Nachfolgend finden Sie ein illustratives Beispiel für ein Testszenario:

SCENARIO-3
: Der Benutzer bestellt ein nicht verfügbares Getränk

GIVEN: Der Benutzer gibt eine beliebige Größe oder Extras an.
WANN: Der Benutzer fordert ein bestimmtes Getränk an.
DANN: Der Assistent sieht davon ab, das Getränk in die endgültige Bestellliste aufzunehmen.
AND: Der Assistent informiert den Benutzer über die Nichtverfügbarkeit des Artikels.

Hier ist ein aktuelles Beispiel für ein Szenario:  

User Prompt: Kann ich einen Milchshake bekommen?
Assistent: Es tut mir leid, aber wir haben derzeit keine Milchshakes verfügbar. Gibt es ein anderes Getränk, das Sie bestellen möchten?
Validierungsergebnis: Gültig. Der Benutzer hat einen Milchshake angefordert, was dem vorgegebenen Szenario entspricht, ein nicht verfügbares Getränk zu bestellen. Der Assistent stellt die Nichtverfügbarkeit von Milchshakes korrekt fest und teilt dies dem Benutzer mit. Das Endergebnis der Bestellung bleibt leer, was bedeutet, dass der Milchshake nicht zur Bestellung hinzugefügt wurde. Daher ist die Antwort des Assistenten im Rahmen des vorgegebenen Szenarios korrekt.

Fazit:

Abschließend ist zu sagen, dass gründliches Testen, einschließlich der Prüfung grundlegender Funktionen und dynamischer Szenarien, für die Entwicklung von großen Sprachmodell-Assistenten unerlässlich ist, um ihre grundlegenden Fähigkeiten und ihre Reaktionsfähigkeit sicherzustellen. Das vorgestellte Beispiel eines Getränkeautomaten-Assistenten veranschaulicht die Bedeutung sorgfältiger Tests, die das Verständnis des Assistenten für Benutzereingaben verfeinern und seine dynamischen Antworten validieren. Die Einführung eines separaten LLM zur Validierung verbessert weiterhin die Bewertung der Leistung des Assistenten in verschiedenen Szenarien. Dies trägt dazu bei, dass die Konversation eine verlässliche und angenehme User Experience ist.

Teilen:
Mittelmäßiger Programmierer - Besessener Open-Source Enthusiast und ewiger Amateur in allem. Hat sich kürzlich in Rust verliebt.

Weitere Artikel dieses Autors

Article collaborators

SABO Newsletter icon

SABO NEWSLETTER

Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.

SABO Mobile IT

Für unsere Kunden aus der Industrie entwickeln wir spezialisierte Software zur Umsetzung von Industry 4.0. IoT, Machine Learning und Künstliche Intelligenz ermöglichen uns, signifikante Effizienzsteigerungen bei unseren Kunden zu erzielen.
Über uns