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 ein LLM dazu gebracht werden kann, auf eine unerwünschte Weise zu versagen. garak testet auf Halluzination, Datenlecks, Prompt Injection, Fehlinformation, Toxizitätserzeugung, Jailbreaks und viele andere Schwachstellen. Wenn Sie nmap oder msf / Metasploit Framework kennen, macht garak etwas Ähnliches, aber für LLMs.
garak konzentriert sich auf Wege, ein LLM oder Dialogsystem zum Scheitern zu bringen. Es kombiniert statische, dynamische und adaptive Tests, um dies zu untersuchen.
garak ist ein kostenloses Tool. Wir entwickeln es gerne weiter und sind stets daran interessiert, Funktionen zur Unterstützung von Anwendungen hinzuzufügen.
unterstützt derzeit:
garak ist ein Kommandozeilen-Tool. Es wird unter Linux und OSX entwickelt.
pipEinfach von PyPI holen und loslegen:``` python -m pip install -U garak
### Entwicklungsversion mit `pip` installieren
Die Standard-pip-Version von `garak` wird regelmäßig aktualisiert. Um eine aktuellere Version von GitHub zu erhalten, versuchen Sie es mit:```
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.10,<=3.12"
conda activate garak
gh repo clone NVIDIA/garak
cd garak
python -m pip install -e .
OK, wenn das geklappt hat, kannst du wahrscheinlich loslegen!
**Hinweis**: wenn du vor dem Wechsel zur `NVIDIA` GitHub-Organisation geklont hast, aber du dies unter der `github.com/NVIDIA`-URI liest, aktualisiere bitte deine remotes wie folgt:```
git remote set-url origin https://github.com/NVIDIA/garak.git
Die allgemeine Syntax lautet:
garak <optionen>
garak muss wissen, welches Modell gescannt werden soll, und standardmäßig wird es alle ihm bekannten Probes auf diesem Modell ausführen, wobei die von jeder Probe empfohlenen Schwachstellenerkennungen verwendet werden. Sie können eine Liste der Probes mit folgendem Befehl anzeigen:
garak --list_probes
Um einen Generator anzugeben, verwenden Sie die Optionen --target_type und optional --target_name. Der Modelltyp gibt eine Modellfamilie/Schnittstelle an; der Modellname gibt das genaue zu verwendende Modell an. Der Abschnitt „Einführung in die Generatoren“ unten beschreibt einige der unterstützten Generatoren. Eine einfache Generatorfamilie sind Hugging Face Modelle; um eines 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"). Manche Generatoren benötigen möglicherweise einen API-Schlüssel, der als Umgebungsvariable gesetzt werden muss; sie werden Sie informieren, falls dies erforderlich ist.
garak führt standardmäßig alle Probes aus, aber Sie können auch genauer festlegen, welche verwendet werden sollen. --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; z.B. verwendet --probes lmrc.SlurUsage eine Implementierung zur Überprüfung, ob Modelle Beleidigungen generieren, basierend auf dem Language Model Risk Cards-Framework.
Für Hilfe und Inspiration finden Sie uns auf Twitter oder Discord!
Testen Sie ein kommerzielles Modell auf codierungsbasierte Prompt-Injection (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 --probes encoding
Überprüfen Sie, ob die Hugging Face-Version von GPT2 anfällig für DAN 11.0 ist.```
python3 -m garak --target_type huggingface --target_name gpt2 --probes dan.Dan_11_0
Für jede geladene Sonde zeigt garak beim Generieren einen Fortschrittsbalken an. Sobald die Generierung abgeschlossen ist, wird eine Zeile ausgegeben, die die Ergebnisse dieser Sonde für jeden Detektor bewertet. Wenn einer der Eingabeaufforderungsversuche ein unerwünschtes Verhalten hervorgerufen hat, wird die Antwort als FAIL markiert und die Fehlerrate angegeben.
Hier sind die Ergebnisse mit dem encoding-Modul für eine GPT-3-Variante:

Und die gleichen Ergebnisse für ChatGPT:

Wir können sehen, dass das neuere Modell viel anfälliger für codierungsbasierte Injection-Angriffe ist, während text-babbage-001 nur für quoted-printable und MIME-Codierungsinjektionen anfällig war. Die Zahlen am Ende jeder Zeile, z. B. 840/840, geben die Gesamtanzahl der Textgenerierungen und dann an, wie viele davon in Ordnung zu sein schienen. Die Zahl kann ziemlich hoch sein, da pro Eingabeaufforderung mehr als eine Generierung erfolgt – standardmäßig 10.