
garak v0.17.0
Scanneur de vulnérabilités LLM modulaire qui détecte les hallucinations, les fuites de données, les injections de prompts, les jailbreaks et la toxicité à l'aide de sondes statiques, dynamiques et adaptatives sur plusieurs fournisseurs de modèles.
garak, scanner de vulnérabilités pour LLM
Generative AI Red-teaming & Assessment Kit
garak vérifie si une application basée sur un LLM peut être amenée à échouer d'une manière non souhaitée. garak sonde les hallucinations, les fuites de données, l'injection de prompts, la désinformation, la génération de toxicité, les jailbreaks et bien d'autres faiblesses. Si vous connaissez nmap ou msf / Metasploit Framework, garak fait en quelque sorte la même chose qu'eux, mais pour les LLM.
garak se concentre sur les moyens de faire échouer un LLM ou un système de dialogue. Il combine des sondes statiques, dynamiques et adaptatives pour explorer ce domaine.
garak est un outil gratuit. Nous adorons le développer et sommes toujours intéressés par l'ajout de fonctionnalités pour soutenir les applications.
Pour commencer
> Consultez notre guide utilisateur ! docs.garak.ai
> Rejoignez notre Discord !
> Liens du projet et accueil : garak.ai
> Twitter : @garak_llm
> slides de la DEF CON !
Prise en charge des LLM
prend actuellement en charge :
- les modèles génératifs du hugging face hub
- les modèles de texte replicate
- les modèles de chat et de continuation de l'openai api
- les modèles de fondation aws bedrock
- litellm
- à peu près tout ce qui est accessible via REST
- les modèles gguf comme llama.cpp version >= 1046
- .. et bien d'autres LLM !
Installation :
garak est un outil en ligne de commande. Il est développé sous Linux et OSX.
Installation standard avec pip
Récupérez-le simplement depuis PyPI et vous devriez être prêt à démarrer :
python -m pip install -U garak
Installer la version de développement avec pip
La version standard de garak sur pip est mise à jour périodiquement. Pour obtenir une version plus récente depuis GitHub, essayez :
python -m pip install -U git+https://github.com/NVIDIA/garak.git@main
Cloner depuis les sources
garak a ses propres dépendances. Vous pouvez installer garak dans son propre environnement Conda :
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, si tout s'est bien passé, vous êtes probablement prêt à continuer !
Remarque : si vous avez cloné le dépôt avant le déplacement vers l'organisation GitHub NVIDIA, mais que vous lisez ceci à l'URI github.com/NVIDIA, veuillez mettre à jour vos remotes comme suit :
git remote set-url origin https://github.com/NVIDIA/garak.git
Premiers pas
La syntaxe générale est :
garak <options>
garak doit savoir quel modèle analyser et, par défaut, il essaiera toutes les sondes qu'il connaît sur ce modèle, en utilisant les détecteurs de vulnérabilités recommandés par chaque sonde. Vous pouvez afficher la liste des sondes avec :
garak --list_probes
Pour spécifier un générateur, utilisez les options --target_type et, éventuellement, --target_name. Le type de modèle spécifie une famille/interface de modèle ; le nom de modèle spécifie le modèle exact à utiliser. La section « Intro to generators » ci-dessous décrit certains des générateurs pris en charge. Une famille de générateurs simple est celle des modèles Hugging Face ; pour en charger un, définissez --target_type sur huggingface et --target_name sur le nom du modèle sur le Hub (par ex. "RWKV/rwkv-4-169m-pile"). Certains générateurs peuvent nécessiter une clé API définie comme variable d'environnement, et ils vous indiqueront si c'est le cas.
garak exécute toutes les sondes par défaut, mais vous pouvez aussi être plus précis. --spec probes.promptinject utilisera uniquement les méthodes du framework PromptInject, par exemple. Vous pouvez également spécifier un plugin précis plutôt qu'une famille de plugins en ajoutant le nom du plugin après un . ; par exemple, --spec probes.lmrc.SlurUsage utilisera une implémentation de vérification des modèles générant des insultes basée sur le framework Language Model Risk Cards.
Pour de l'aide et de l'inspiration, retrouvez-nous sur Twitter ou discord !
Exemples
Sonder un modèle commercial pour l'injection de prompt basée sur l'encodage (OSX/*nix) (remplacez la valeur d'exemple par une vraie clé API OpenAI)
export OPENAI_API_KEY="sk-123XXXXXXXXXXXX"
python3 -m garak --target_type openai --target_name gpt-5-nano --spec probes.encoding
Vérifiez si la version Hugging Face de GPT2 est vulnérable à DAN 11.0
python3 -m garak --target_type huggingface --target_name gpt2 --spec probes.dan.Dan_11_0
Lecture des résultats
Pour chaque sonde chargée, garak affiche une barre de progression au fur et à mesure de la génération. Une fois la génération terminée, une ligne évaluant les résultats de cette sonde sur chaque détecteur est affichée. Si l'une des tentatives de prompt a produit un comportement indésirable, la réponse sera marquée comme FAIL, et le taux d'échec indiqué.
Voici les résultats avec le module encoding sur une variante de GPT-3 :

Et les mêmes résultats pour ChatGPT :

On constate que le modèle le plus récent est bien plus sensible aux attaques par injection basées sur l'encodage, alors que text-babbage-001 n'a été jugé vulnérable qu'aux injections par encodage quoted-printable et MIME. Les chiffres à la fin de chaque ligne, par exemple 840/840, indiquent le nombre total de générations de texte puis combien d'entre elles ont semblé se comporter correctement. Ce chiffre peut être assez élevé car plusieurs générations sont produites par prompt - par défaut, 10.