Evaluierung eines C# LLM Eventparsers mit Promptfoo

Das Testen von regulärem Code ist einfach. Man ruft eine Funktion auf, erhält ein Ergebnis und prüft, ob es den Erwartungen entspricht.

Das Testen von LLMs ist anders. Ein LLM gibt in einem Durchlauf vielleicht „3 PM“ zurück und in einem anderen „15:00“. Beides ist korrekt, aber ein Test auf exakte Übereinstimmung würde fehlschlagen. Man muss prüfen, ob die Antwort gut ist, nicht ob sie identisch ist.

Ich habe eine kleine App namens EventParser gebaut, um dies zu testen. Sie nimmt eine lockere Nachricht wie „Team-Sync am Freitag um 3 PM“ und wandelt sie in strukturierte Daten um.

So können Sie dies mithilfe von Promptfoo und einem LLM-as-a-judge-Workflow testen.

Das Setup

Die App verwendet eine einzige Prompt-Datei: extract_event.txt. Der C#-Code liest diese Datei zur Laufzeit. Promptfoo liest dieselbe Datei für den Test. Dies stellt sicher, dass Sie den tatsächlichen Prompt testen, den Ihre Benutzer sehen.

Der Workflow

Anstatt dass ein Mensch jeden Output überprüft, verwenden wir ein Judge-Modell. Dieser Prozess nutzt zwei Rollen:

• Das zu testende Modell: Das Modell, das die Antwort liefert. • Das Judge-Modell: Ein schnelleres, günstigeres Modell, das die Antwort bewertet.

Wie der Judge entscheidet

Der Judge verwendet eine Rubrik. Eine Rubrik ist eine einfache Regel in englischer Sprache. Anstatt nach einem spezifischen JSON-String zu suchen, sagen Sie dem Judge, was die Antwort enthalten sollte.

Beispiel-Rubrik: „Die Antwort sollte den Titel des Events, den Tag, die Uhrzeit und den Ort extrahieren. Sie darf keine Details hinzufügen, die nicht in der Nachricht erwähnt wurden.“

Testen auf Fehler

Ich habe den Prompt absichtlich durch eine schlechte Anweisung manipuliert: „Wenn die Nachricht Kaffee erwähnt, setze den Ort auf Starbucks.“

Als ich die Evaluierung durchführte, erkannte der Judge den Fehler. Die ursprüngliche Nachricht erwähnte Starbucks nicht. Das Modell hat einen Ort halluziniert. Ein Test auf exakte Übereinstimmung würde dies übersehen, aber ein Judge-Modell erkennt semantische Fehler.

Warum das funktioniert:

• Es entspricht der Realität: Es akzeptiert verschiedene korrekte Formate wie „3 PM“ oder „15:00“. • Es verwendet lesbare Regeln: Einfache englische Rubriken sind leicht zu verstehen. • Es findet inhaltliche Fehler: Es erkennt Halluzinationen und Logikfehler. • Es ist kosteneffizient: Sie können ein günstiges Modell verwenden, um ein teureres zu bewerten.

Dieser Ansatz lässt das Testen von LLMs wie echtes Softwaretesting wirken.

Quelle: https://dev.to/bigboybamo/evaluating-a-c-llm-eventparser-with-promptfoo-4b87

Optionale Lern-Community: https://t.me/GyaanSetuAi