
garak v0.16.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
Kit de red-teaming et d'évaluation pour l'IA générative
garak vérifie si un LLM peut être amené à échouer d'une manière que nous ne souhaitons pas. garak sonde les hallucinations, les fuites de données, l'injection de prompt, 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 des choses similaires, mais pour les LLMs.
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 cela.
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 et accueil du projet : garak.ai
> Twitter : @garak_llm
> DEF CON diapositives !
Support LLM
prend actuellement en charge :
- hugging face hub modèles génératifs
- replicate modèles de texte
- openai api modèles de chat et de continuation
- aws bedrock modèles fondamentaux
- litellm
- pratiquement tout accessible via REST
- les modèles gguf comme llama.cpp version >= 1046
- .. et bien d'autres LLMs !
Installation :
garak est un outil en ligne de commande. Il est développé sous Linux et OSX.
Installation standard avec pip
Il suffit de le récupérer depuis PyPI et vous devriez être prêt :``` python -m pip install -U garak
### Install development version with `pip`
La version standard pip de `garak` 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 la source
garak a ses propres dépendances. Vous pouvez installer garak dans son propre environnement Conda :```
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, si tout s'est bien passé, vous êtes probablement prêt !
**Remarque**: si vous avez cloné avant le déplacement vers l'organisation GitHub `NVIDIA`, mais que vous lisez ceci à l'URI `github.com/NVIDIA`, veuillez mettre à jour vos dépôts distants comme suit :```
git remote set-url origin https://github.com/NVIDIA/garak.git
Pour commencer
La syntaxe générale est :
garak <options>
garak a besoin de 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é recommandés par chaque sonde.
Vous pouvez voir une liste des sondes en utilisant :
garak --list_probes
Pour spécifier un générateur, utilisez les options --target_type et, optionnellement, --target_name. Le type de modèle spécifie une famille/interface de modèle ; le nom du 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 Hub (par exemple "RWKV/rwkv-4-169m-pile"). Certains générateurs peuvent nécessiter qu'une clé API soit définie comme variable d'environnement, et ils vous informeront si c'est le cas.
garak exécute toutes les sondes par défaut, mais vous pouvez aussi être plus spécifique. --probes promptinject utilisera uniquement les méthodes du framework PromptInject, par exemple. Vous pouvez également spécifier un plugin spécifique au lieu d'une famille de plugins en ajoutant le nom du plugin après un . ; par exemple, --probes lmrc.SlurUsage utilisera une implémentation qui vérifie si les modèles génèrent 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 --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 --probes dan.Dan_11_0
Lecture des résultats
Pour chaque sonde chargée, garak affichera une barre de progression lors 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 sera 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 beaucoup plus sensible aux attaques par injection basées sur l'encodage, alors que text-babbage-001 n'était vulnérable qu'aux injections 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 semblaient correctes. Ce nombre peut être élevé car plusieurs générations sont réalisées par prompt – par défaut, 10.
Les erreurs vont dans garak.log ; le déroulement est enregistré en détail dans un fichier .jsonl spécifié au début et à la fin de l'analyse. Un script d'analyse de base se trouve dans analyse/analyse_log.py qui affichera les sondes et les prompts ayant généré le plus de résultats.