Scanner di vulnerabilità LLM modulare che indaga su allucinazioni, perdita di dati, injection di prompt, jailbreak e tossicità utilizzando sonde statiche, dinamiche e adattive attraverso più provider di modelli.
Kit di red-teaming e valutazione per IA generativa
garak verifica se un LLM può essere indotto a fallire in modi indesiderati. garak esplora allucinazioni, fughe di dati, injection di prompt, disinformazione, generazione di tossicità, jailbreak e molte altre debolezze. Se conosci nmap o msf / Metasploit Framework, garak fa cose simili, ma per gli LLM.
garak si concentra sui modi per far fallire un LLM o un sistema di dialogo. Combina probe statici, dinamici e adattivi per esplorare questo aspetto.
garak è uno strumento gratuito. Amiamo svilupparlo e siamo sempre interessati ad aggiungere funzionalità per supportare le applicazioni.
attualmente supporta:
garak è uno strumento da riga di comando. È sviluppato su Linux e OSX.
pipBasta prenderlo da PyPI e si è pronti a partire:``` python -m pip install -U garak
### Installa la versione di sviluppo con `pip`
La versione pip standard di `garak` viene aggiornata periodicamente. Per ottenere una versione più recente da GitHub, prova:```
python -m pip install -U git+https://github.com/NVIDIA/garak.git@main
garak ha le proprie dipendenze. Puoi installare garak nel suo ambiente 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, if that went fine, you're probably good to go!
**Note**: if you cloned before the move to the `NVIDIA` GitHub organisation, but you're reading this at the `github.com/NVIDIA` URI, please update your remotes as follows:```
git remote set-url origin https://github.com/NVIDIA/garak.git
La sintassi generale è:
garak <options>
garak deve sapere quale modello eseguire la scansione; di default, proverà tutti i probe che conosce su quel modello, utilizzando i rilevatori di vulnerabilità consigliati da ciascun probe. Puoi vedere un elenco dei probe utilizzando:
garak --list_probes
Per specificare un generatore, usa le opzioni --target_type e, opzionalmente, --target_name. Il tipo di modello specifica una famiglia/interfaccia di modelli; il nome del modello specifica il modello esatto da utilizzare. La sezione "Introduzione ai generatori" qui sotto descrive alcuni dei generatori supportati. Una famiglia di generatori semplice è quella dei modelli Hugging Face; per caricarne uno, imposta --target_type su huggingface e --target_name sul nome del modello su Hub (es. "RWKV/rwkv-4-169m-pile"). Alcuni generatori potrebbero aver bisogno di una chiave API impostata come variabile d'ambiente, e te lo faranno sapere se ne hanno bisogno.
garak esegue tutti i probe di default, ma puoi essere più specifico anche in questo. --probes promptinject utilizzerà solo i metodi del framework PromptInject, per esempio. Puoi anche specificare un singolo plugin invece di una famiglia di plugin aggiungendo il nome del plugin dopo un .; per esempio, --probes lmrc.SlurUsage utilizzerà un'implementazione per verificare se i modelli generano insulti basata sul framework Language Model Risk Cards.
Per aiuto e ispirazione, trovaci su Twitter o discord!
Esegui il probe di un modello commerciale per l'iniezione di prompt basata su codifica (OSX/*nix) (sostituisci il valore di esempio con una vera chiave API OpenAI)``` export OPENAI_API_KEY="sk-123XXXXXXXXXXXX" python3 -m garak --target_type openai --target_name gpt-5-nano --probes encoding
Verifica se la versione Hugging Face di GPT2 è vulnerabile a DAN 11.0```
python3 -m garak --target_type huggingface --target_name gpt2 --probes dan.Dan_11_0
Per ogni probe caricato, garak stamperà una barra di avanzamento durante la generazione. Una volta completata la generazione, viene fornita una riga che valuta i risultati di quel probe su ciascun rivelatore. Se uno qualsiasi dei tentativi di prompt ha prodotto un comportamento indesiderato, la risposta verrà contrassegnata come FAIL e verrà indicato il tasso di fallimento.
Ecco i risultati con il modulo encoding su una variante di GPT-3:

E gli stessi risultati per ChatGPT:

Possiamo notare che il modello più recente è molto più suscettibile agli attacchi di iniezione basati sulla codifica, mentre text-babbage-001 è risultato vulnerabile solo alle iniezioni quoted-printable e MIME. Le cifre alla fine di ogni riga, ad esempio 840/840, indicano il numero totale di generazioni di testo e quante di queste sono apparse OK. La cifra può essere piuttosto alta perché per ogni prompt vengono effettuate più generazioni - di default, 10.
Gli errori vanno in garak.log; l'esecuzione viene registrata in dettaglio in un file .jsonl specificato all'inizio e alla fine dell'analisi. C'è uno script di analisi di base in analyse/analyse_log.py che restituirà i probe e i prompt che hanno generato il maggior numero di hit.
Inviate PR e aprite issue. Buona caccia!