Automatisierte Tests (IT)Senior Automation QA Engineer

Erstellen Sie eine Validierungsarchitektur, die automatisch Halluzinationen von großen Sprachmodellen erkennt, indem sie strukturierte Ansprüche aus generativen Ausgaben extrahiert und diese gegen die Ground-Truth-Wissen Graphen in deterministischen CI/CD-Pipelines überprüft.

Bestehen Sie Vorstellungsgespräche mit dem Hintsage-KI-Assistenten

Antwort auf die Frage

Geschichte der Frage

Die Verbreitung von großen Sprachmodellen in Produktionssystemen während 2023-2024 hat kritische Lücken in traditionellen Testautomatisierungsparadigmen aufgezeigt. Frühe Anwender versuchten, exakte String-Matches oder Selenium-basierte Assertions auf LLM-Ausgaben anzuwenden, was aufgrund der inhärenten Variabilität und Paraphrasierungsfähigkeiten der Modelle katastrophal scheiterte. Dies führte zu einem Paradigmenwechsel, in dem Qualitätssicherung-Teams erkannten, dass semantische Korrektheit wichtiger ist als syntaktische Äquivalenz. Die Frage entstand aus der Notwendigkeit, nicht-deterministische generative Systeme innerhalb deterministischer CI/CD-Pipelines zu validieren, insbesondere in regulierten Branchen wie dem Gesundheitswesen und dem Finanzwesen, in denen faktische Genauigkeit gesetzlich vorgeschrieben ist.

Das Problem

Große Sprachmodelle erzeugen probabilistische Ausgaben, was bedeutet, dass identische Eingabeaufforderungen semantisch äquivalente, aber textuell unterschiedliche Antworten liefern können. Diese Nicht-Determinismus bricht traditionelle auf Assertions basierende Testframeworks, die auf vorhersagbaren Ausgaben basieren. Darüber hinaus stellen Halluzinationen—faktisch falsche Aussagen, die als Wahrheit präsentiert werden—ein einzigartiges Erkennungsproblem dar, da sie oft syntaktisch kohärent und kontextuell plausibel erscheinen. Standard pixel-perfect oder exact-match Validierungsstrategien können zwischen akzeptabler Paraphrasierung und gefährlichen Fälschungen nicht unterscheiden. Die Automatisierung muss daher die semantische Bedeutung verstehen, strukturierte Ansprüche aus unstrukturiertem Text extrahieren und diese gegen Ground-Truth-Wissen basen überprüfen, während die idempotente, wiederholbare Ausführung für Bereitstellungstore beibehalten wird.

Die Lösung

Architektur eines hybriden Validierungsframeworks, das symbolische Extraktion mit neuronaler Bewertung kombiniert. Zuerst implementieren Sie die Durchsetzung von temperature=0 und semantischem Caching über Redis, um deterministische Ausführungen über Testläufe hinweg sicherzustellen. Zweitens verwenden Sie Named Entity Recognition unter Verwendung von spaCy oder BERT-Modellen, um faktische Tripel aus LLM-Ausgaben zu extrahieren. Drittens validieren Sie diese extrahierten Ansprüche gegen einen strukturierten Wissen Graph (z. B. Neo4j), der die Wahrheit enthält, und verwenden Sie toleranzbasierte Vergleiche für numerische Werte und genaue Übereinstimmungen für kategoriale Daten. Viertens implementieren Sie einen LLM-as-a-Judge Fallback mit JSON-Schemata, um subjektive Qualitätsbewertungen zu erhalten. Schließlich wickeln Sie diese Pipeline in pytest-Fixtures mit Wiederholungslogik und detaillierter Telemetrie ein, um Modell-Drift von Code-Regressionen zu isolieren.

import pytest import spacy from knowledge_graph import verify_claim # hypothetischer KG-Client nlp = spacy.load("de_core_news_sm") def extract_claims(text): doc = nlp(text) claims = [] for ent in doc.ents: if ent.label_ in ["GELD", "PROZENT"]: claims.append({"type": ent.label_, "value": ent.text, "context": ent.sent.text}) return claims def test_llm_halluzination(): prompt = "Was ist der effektive Jahreszins für Premium-Sparen?" response = llm_client.generate(prompt, temperature=0.0) claims = extract_claims(response) for claim in claims: if claim["type"] == "PROZENT": is_valid = verify_claim( product="Premium-Sparen", attribute="effektiver Jahreszins", value=claim["value"], tolerance=0.1 ) assert is_valid, f"Halluzination erkannt: {claim['value']}"

Lebenssituation

Ein mittelständisches Fintech-Unternehmen setzte einen RAG-basierten Chatbot für den Kundenservice ein, um Fragen zu Kreditprodukten und Zinssätzen zu beantworten. Während des Betatests beantwortete das LLM korrekt die Frage "Was ist der APR für Goldkredite?" mit „5,5 %“ in einem Fall, halluzinierte jedoch „4,9 % ohne Bonitätsprüfung“ in einem anderen, obwohl die Wissensbasis eindeutig einen Anforderung von über 700 Kreditpunkten angibt. Traditionelle API-Tests haben die Verfügbarkeit der Endpunkte überprüft, hatten jedoch keinen Mechanismus zur Validierung der semantischen Genauigkeit der generierten finanziellen Beratung. Das Team benötigte ein automatisiertes Tor, das die Bereitstellung verhinderte, wenn das Modell Zinssätze oder Bedingungen generierte, die nicht in der offiziellen Produktdatenbank vorhanden waren.

Lösung 1: Schlüsselwortbasierte Validierung mit Regex

Das Team implementierte zunächst Python Regex-Muster, um Dollarbeträge und Prozentwerte zu extrahieren, und überprüfte dann, ob diese Werte irgendwo im Produktkatalog vorhanden waren.

Vorteile: Einfach zu implementieren mit dem re-Modul, schnelle Ausführung unter 100 ms und deterministisches Verhalten.

Nachteile: Der Ansatz litt unter hohen falsch-positiven Raten - er kennzeichnete gültige Antworten, die „0 % einführender APR“ erwähnten, weil dieser spezifische String nicht in der standardmäßigen Zinstabelle vorhanden war. Es gelang ihm auch nicht, Halluzinationen zu erfassen, die genehmigte Zahlen in falschen Kontexten verwendeten (z. B. Angabe eines Hypothekenzinses für ein Kreditkartenprodukt).

Lösung 2: Einbettungsähnlichkeit gegen genehmigte Dokumente

Sie berechneten die Kosinusähnlichkeit zwischen der LLM-Antwort und vektorisierten Versionen der offiziellen Produktdokumente unter Verwendung von OpenAI-Einbettungen. Die Tests bestanden, wenn die Ähnlichkeit über 0,85 lag.

Vorteile: Robust gegen Paraphrasierung und Synonymverwendung, niedrige Wartungskosten und erfasste semantische Nuancen besser als String-Vergleiche.

Nachteile: Numerische Halluzinationen blieben unentdeckt, da „5,5 % APR“ und „4,9 % APR“ nahezu identische Einbettungen haben, obwohl sie materiell unterschiedliche Finanzbedingungen repräsentieren. Die nicht-deterministische Natur der Einbettungsberechnungen führte auch zu instabilen Tests in CI/CD.

Lösung 3: Strukturierte Anspruchsextraktion mit Wissen Graph-Überprüfung (Ausgewählt)

Das Team implementierte eine spaCy-Pipeline zur Extraktion von Entitäten und Relationen und hat dann einen Neo4j-Wissen Graph abgerufen, um jeden Anspruch gegen die Wahrheit zu überprüfen. Numerische Behauptungen verwendeten Toleranzbereiche (±0,01 %), während kategoriale Daten genaue Übereinstimmungen erforderten.

Vorteile: Präzise Erkennung faktischer Fehler auf Feldebene, Immunität gegenüber sprachlichen Variationen und deterministische Ausführung, die für Bereitstellungstore geeignet ist. Das System konnte zwischen „2,5 % APY“ (korrekt) und „2,4 % APY“ (Halluzination) unterscheiden, was die Einbettungsähnlichkeit nicht konnte.

Nachteile: Hohe anfängliche Einrichtungskosten, die die Wartung des NER-Modells und des Wissen Graph-Schemas erforderten, sowie fortlaufende Pflege der Ground-Truth-Daten.

Das Team wählte Lösung 3, da die finanziellen Vorschriften absolute Präzision bei beworbenen Raten erforderten. Die gewählte Architektur verwendete temperature=0 mit Redis-Caching, um Flakiness zu eliminieren, und LLM-as-a-Judge nur für mehrdeutige qualitative Bewertungen.

Das Ergebnis war eine 94%ige Reduzierung der Halluzinationen, die in die Produktion gelangten, und eine CI/CD-Pipeline, die automatisch Bereitstellungen blockieren konnte, die faktische Fehler einführten. Die falsch-positive Rate fiel von 35 % (mit Schlüsselwortübereinstimmung) auf 2 %, während die Testausführungszeit bei unter 3 Sekunden pro Gesprächsdreh blieb, dank aggressivem Caching der Wissen Graph-Abfragen.

Was Kandidaten oft übersehen

Wie gehen Sie mit Nicht-Determinismus in LLM-Ausgaben um, wenn die Temperatur auf Null gesetzt ist, aber hardwarebedingt Unterschiede in der Gleitpunktverarbeitung über verschiedene GPU-Architekturen hinweg trotzdem zu abweichenden Token-Wahrscheinlichkeitsverteilungen führen?

Selbst mit temperature=0 können CUDA-Optimierungen und Unterschied im GPU-Treiber winzige Variationen in den Softmax-Berechnungen einführen, die gelegentlich zu unterschiedlichen Token-Auswahlen an niedrigen Wahrscheinlichkeitsgrenzen führen. Um eine deterministische CI/CD-Ausführung sicherzustellen, implementieren Sie semantisches Caching unter Verwendung von Redis, das durch SHA-256-Hashes der Eingabeaufforderung und des Kontexts gekennzeichnet ist. Der erste Durchlauf ruft das Modell auf und cached die Antwort; anschließende identische Eingaben geben den cachewert zurück. Alternativ verwenden Sie Antwortkanonalisierung durch Lemmatisierung der Ausgaben und Ersetzen von Entitäten durch kanonische IDs vor dem Vergleich. Für Tests mit hohen Einsätzen verwenden Sie Selbstkonsistenzabstimmung: Führen Sie die Eingabeaufforderung fünfmal aus, gruppieren Sie die Antworten nach semantischer Ähnlichkeit und behandeln Sie die Mehrheitsgruppe als die kanonische Wahrheit für diese Testsitzung.

Warum ist die Verwendung eines sekundären LLM zur Bewertung der Ausgaben des primären LLM (LLM-as-a-Judge) problematisch für automatisierte Tests, und wie mindern Sie die Risiken von Inkonsistenzen des Bewertungsanalyzers?

Die Verwendung eines LLM als Bewertung führt zu Meta-Flakiness, bei der Tests aufgrund von Halluzinationen des Bewertungsanalyzers fehlschlagen, anstatt aufgrund von Produktfehlern. Der Bewerter könnte die Kriterien inkonsistent über die Durchläufe anwenden oder Evaluierungsrubriken halluzinieren, wodurch eine zirkuläre Abhängigkeit entsteht, bei der beide Systeme zusammen halluzinieren könnten. Um dies zu mildern, beschränken Sie den Bewerter auf strukturierte Ausgaben unter Verwendung von JSON-Schemas oder Funktionsaufrufen, die boolean oder kategoriale Antworten und keine offenen Überlegungen erzwingen. Verankern Sie Bewertungen in expliziten, versionskontrollierten Rubriken. Versionieren Sie das Bewertungsmodell, um Drift zu verhindern, wenn Anbieter die Gewichte aktualisieren, und pflegen Sie einen „Golden Dataset“ mit menschlich verifizierten Bewertungen, um die Genauigkeit des Bewerters kontinuierlich zu überwachen.

Wie unterscheiden Sie zwischen einer Halluzination (dem LLM, das Fakten erfindet) und einem veralteten Kontext (dem RAG-System, das veraltete Dokumente abruft), und warum ist diese Unterscheidung für die Testautomatisierung wichtig?

Kandidaten verwechseln oft Generationsvalidierung mit Abrufvalidierung. Wenn die RAG-Pipeline ein Dokument aus dem Jahr 2022 abruft, in dem steht: „APR beträgt 5 %“, während die Ground-Truth von 2024 „6 %“ ist, halluziniert das LLM nicht, wenn es „5 %“ genau zitiert—es verwendet akkurat schlechte Daten. Die Automatisierung muss die Pipeline-Grenze testen, indem sie zuerst die abgerufenen Dokumente gegen die Quelle der Wahrheit validiert und dann die Konformität des LLM mit dem bereitgestellten Kontext überprüft. Implementieren Sie Attributtestung, indem Sie das LLM auffordern, Dokumenten-IDs für jeden Anspruch zu zitieren, und dann überprüfen, ob diese IDs im Abrufsatz existieren und die behauptete Tatsache enthalten. Dies isoliert, ob Fehler von Abrufverfall oder generativer Halluzination stammen, und ermöglicht präzise Abhilfe.