Giskard - ML & LLM Testing Framework Cheatsheet
Giskard - ML & LLM Testing Framework Cheatsheet
Giskard ist ein Open-Source-Testing-Framework für ML- und LLM-Anwendungen. Sein Signaturen-Feature ist ein automatisierter Scan, der ein Modell auf Anfälligkeiten prüft — Halluzination, Prompt Injection, schädliche Inhalte, Robustness-Fehler, Bias und Datenlecks — und erzeugt einen Bericht, den du direkt in eine wiederverwendbare Test Suite umwandeln kannst. Dieser Scan-Then-Testify-Workflow ist das, was es unterscheidet: du musst nicht im Voraus wissen, was zu testen ist.
Installation
| Methode | Befehl |
|---|---|
| pip | pip install giskard |
| LLM Extras | pip install "giskard[llm]" |
| Model-Schlüssel | export OPENAI_API_KEY=... (verwendet für LLM-basierte Detektoren) |
| Verifikation | python -c "import giskard; print(giskard.__version__)" |
Ein LLM-App verpacken
import giskard
import pandas as pd
def predict(df: pd.DataFrame):
return [my_llm_app(q) for q in df["question"]]
model = giskard.Model(
model=predict,
model_type="text_generation",
name="Support Assistant",
description="Answers customer questions using our docs",
feature_names=["question"],
)
dataset = giskard.Dataset(
pd.DataFrame({"question": ["How do I reset my password?"]}),
target=None,
)
| Feld | Warum es wichtig ist |
|---|---|
description | Giskard nutzt das, um relevante Probes zu generieren |
model_type | text_generation, classification, regression |
feature_names | Input Spalten |
Die description ist nicht kosmetisch — der Scanner generiert domain-spezifische adversariale Eingaben davon.
Scanning
report = giskard.scan(model, dataset)
report.to_html("scan_report.html")
| Detektor | Findet |
|---|---|
| Hallucination | Unbegründete oder inkohärente Behauptungen |
| Prompt Injection | Anweisungsüberschreibung |
| Harmfulness | Unsichere Content-Generierung |
| Robustness | Empfindlichkeit gegenüber trivialen Input-Änderungen |
| Sensitive Disclosure | Secrets/PII-Leaks |
| Stereotypes | Bias in Outputs |
| Performance Bias | Ungleiche Accuracy über Slices (Tabular/NLP) |
# Scanne nur bestimmte Detektor-Gruppen
report = giskard.scan(model, dataset, only=["hallucination", "jailbreak"])
Scan → Test Suite
suite = report.generate_test_suite("Support Assistant tests")
suite.run()
Das ist der Schlüssel-Workflow: Befunde werden zu Regression Tests, daher bleibt ein behobenes Problem behoben und kann in CI gegattet werden.
Custom Tests
from giskard import test, TestResult
@test(name="No refund promises")
def no_refund_promise(model, dataset):
outputs = model.predict(dataset).prediction
bad = [o for o in outputs if "guaranteed refund" in o.lower()]
return TestResult(passed=len(bad) == 0, metric=len(bad))
suite.add_test(no_refund_promise).run()
RAG Evaluation (RAGET)
Giskard includes a RAG evaluation toolkit that generates a question set from your knowledge base and scores each pipeline component.
| Komponente gepunktet | Sagt dir |
|---|---|
| Generator | Ist die Antwort des LLM gut gegeben den Kontext? |
| Retriever | Hat Retrieval die richtigen Chunks geopfert? |
| Rewriter | Hilft Query Rewriting? |
| Router | Wurde die Query richtig geroutet? |
| Knowledge Base | Ist das Quellmaterial ausreichend? |
Komponenten-Level-Scoring ist actionabler als eine einzelne End-to-End-Zahl — es sagt dir, welche Stage zu fixieren ist.
Giskard vs verwandte Tools
| Aspekt | Giskard | DeepEval | garak |
|---|---|---|---|
| Core-Idee | Auto-Scan → Test Suite | Unit-Test-Style-Metriken | Modell-Probe-Scanner |
| Scope | ML + LLM + RAG | LLM App Evals | LLM Modell-Anfälligkeiten |
| Report | Rich HTML Scan Report | CI Output/Dashboard | CLI Report |
| Am besten für | Entdeckung unbekannter Probleme | Gating bekannter Metriken | Breite Modell-Probes |
Paare mit DeepEval für Metric-Gating und Ragas für RAG-Scoring; Giskards Vorteil ist das Finden von Problemen, die du nicht dachtest zu testen.