Modularer LLM-Schwachstellenscanner, der mit statischen, dynamischen und adaptiven Sonden nach Halluzinationen, Datenlecks, Prompt-Injection, Jailbreaks und Toxizität über mehrere Modellanbieter hinweg sucht.
Generative AI Red-teaming & Assessment Kit
garak prüft, ob eine LLM-gestützte Anwendung auf eine Weise zum Scheitern gebracht werden kann, die wir nicht wollen. garak testet auf Halluzination, Datenlecks, Prompt-Injection, Fehlinformationen, Toxizitätserzeugung, Jailbreaks und viele andere Schwächen. Wenn Sie nmap oder msf / Metasploit Framework kennen, macht garak in etwa Ähnliches mit ihnen, aber für LLMs.
garak konzentriert sich auf Wege, ein LLM oder Dialogsystem zum Scheitern zu bringen. Es kombiniert statische, dynamische und adaptive Probes, um dies zu untersuchen.
garak ist ein kostenloses Tool. Wir entwickeln es gerne und sind immer daran interessiert, Funktionalität zur Unterstützung von Anwendungen hinzuzufügen.
unterstützt derzeit:
garak ist ein Kommandozeilen-Tool. Es wird unter Linux und OSX entwickelt.
pipHolen Sie es einfach von PyPI, und Sie sollten startklar sein:
python -m pip install -U garak
pip installierenDie Standard-Pip-Version von garak wird regelmäßig aktualisiert. Um eine aktuellere Version von GitHub zu erhalten, versuche:
python -m pip install -U git+https://github.com/NVIDIA/garak.git@main
garak hat seine eigenen Abhängigkeiten. Sie können garak in einer eigenen Conda-Umgebung installieren:
conda create --name garak "python>=3.11,<=3.14"
conda activate garak
gh repo clone NVIDIA/garak
cd garak
python -m pip install -e .
OK, wenn das gut geklappt hat, bist du wahrscheinlich startklar!
Hinweis: Wenn du geklont hast, bevor der Umzug zur GitHub-Organisation NVIDIA erfolgte, aber dies unter der URI github.com/NVIDIA liest, aktualisiere bitte deine Remotes wie folgt:
git remote set-url origin https://github.com/NVIDIA/garak.git
Die allgemeine Syntax lautet:
garak <options>
garak muss wissen, welches Modell gescannt werden soll, und standardmäßig versucht es alle Probes, die es kennt, auf diesem Modell, wobei die von jeder Probe empfohlenen Schwachstellen-Detektoren verwendet werden. Eine Liste der Probes können Sie sich mit folgendem Befehl anzeigen lassen:
garak --list_probes
Um einen Generator anzugeben, verwenden Sie die Optionen --target_type und optional --target_name. Der Modelltyp gibt eine Modellfamilie/ein Interface an; der Modellname gibt das exakt zu verwendende Modell an. Der Abschnitt „Intro to generators“ weiter unten beschreibt einige der unterstützten Generatoren. Eine unkomplizierte Generatorfamilie sind Hugging-Face-Modelle; um eines davon zu laden, setzen Sie --target_type auf huggingface und --target_name auf den Namen des Modells auf dem Hub (z. B. "RWKV/rwkv-4-169m-pile"). Einige Generatoren benötigen möglicherweise einen API-Schlüssel, der als Umgebungsvariable gesetzt werden muss, und sie werden Ihnen mitteilen, wenn dies erforderlich ist.
garak führt standardmäßig alle Probes aus, aber Sie können auch hier gezielt vorgehen. --spec probes.promptinject verwendet beispielsweise nur die Methoden des PromptInject-Frameworks. Sie können auch ein bestimmtes Plugin anstelle einer Plugin-Familie angeben, indem Sie den Plugin-Namen nach einem . hinzufügen; zum Beispiel verwendet --spec probes.lmrc.SlurUsage eine Implementierung zur Prüfung, ob Modelle auf Grundlage des Language Model Risk Cards-Frameworks beleidigende Äußerungen generieren.
Für Hilfe und Inspiration finden Sie uns auf Twitter oder Discord!
Ein kommerzielles Modell auf kodierungsbasierte Prompt-Injection prüfen (OSX/*nix) (ersetzen Sie den Beispielwert durch einen echten OpenAI-API-Schlüssel)
export OPENAI_API_KEY="sk-123XXXXXXXXXXXX"
python3 -m garak --target_type openai --target_name gpt-5-nano --spec probes.encoding
Prüfen Sie, ob die Hugging-Face-Version von GPT2 für DAN 11.0 anfällig ist
python3 -m garak --target_type huggingface --target_name gpt2 --spec probes.dan.Dan_11_0
Für jede geladene Probe gibt garak während der Generierung einen Fortschrittsbalken aus. Sobald die Generierung abgeschlossen ist, wird eine Zeile angezeigt, die die Ergebnisse dieser Probe für jeden Detektor bewertet. Wenn einer der Prompt-Versuche ein unerwünschtes Verhalten hervorgerufen hat, wird die Antwort als FAIL markiert und die Fehlerrate angegeben.
Hier sind die Ergebnisse mit dem Modul encoding bei einer GPT-3-Variante:

Und dieselben Ergebnisse für ChatGPT:

Wir können sehen, dass das neuere Modell deutlich anfälliger für kodierungsbasierte Injection-Angriffe ist, während text-babbage-001 nur für quoted-printable- und MIME-Kodierungs-Injections als verwundbar eingestuft wurde. Die Zahlen am Ende jeder Zeile, z. B. 840/840, geben die Gesamtzahl der Textgenerierungen und dann an, wie viele davon sich OK zu verhalten schienen. Die Zahl kann recht hoch sein, weil pro Prompt mehr als eine Generierung erfolgt – standardmäßig 10.