
garak v0.17.0
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.
garak, scanner di vulnerabilità per LLM
Generative AI Red-teaming & Assessment Kit
garak verifica se un'applicazione basata su LLM può essere indotta a fallire in modi indesiderati. garak sonda allucinazioni, fuga di dati, prompt injection, disinformazione, generazione di tossicità, jailbreak e molte altre debolezze. Se conosci nmap o msf / Metasploit Framework, garak fa più o meno cose simili, ma per gli LLM.
garak si concentra sui modi per far fallire un LLM o un sistema dialogico. Combina sonde statiche, dinamiche e adattive per esplorare questo aspetto.
garak è uno strumento gratuito. Amiamo svilupparlo e siamo sempre interessati ad aggiungere funzionalità per supportare le applicazioni.
Per iniziare
> Consulta la nostra guida utente! docs.garak.ai
> Unisciti al nostro Discord!
> Link del progetto e home: garak.ai
> Twitter: @garak_llm
> Slide del DEF CON slides!
Supporto LLM
attualmente supporta:
- modelli generativi di hugging face hub
- modelli testuali di replicate
- modelli chat e continuation di openai api
- modelli foundation di aws bedrock
- litellm
- praticamente qualsiasi cosa accessibile via REST
- modelli gguf come llama.cpp versione >= 1046
- .. e molti altri LLM!
Installazione:
garak è uno strumento da riga di comando. È sviluppato su Linux e OSX.
Installazione standard con pip
Basta prenderlo da PyPI e dovresti essere pronto a partire:
python -m pip install -U garak
Installare la versione di sviluppo con pip
La versione standard di garak su pip 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
Clona dal sorgente
garak ha le proprie dipendenze. Puoi installare garak nel suo ambiente Conda dedicato:
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, se è andato tutto bene, dovresti essere pronto!
Nota: se hai clonato prima del passaggio all'organizzazione GitHub NVIDIA, ma stai leggendo questo contenuto all'URI github.com/NVIDIA, aggiorna i tuoi remote come segue:
git remote set-url origin https://github.com/NVIDIA/garak.git
Per iniziare
La sintassi generale è:
garak <options>
garak deve sapere quale modello scansionare e, per impostazione predefinita, proverà tutte le probe che conosce su quel modello, utilizzando i rilevatori di vulnerabilità raccomandati da ciascuna probe. Puoi visualizzare un elenco delle probe usando:
garak --list_probes
Per specificare un generatore, usa le opzioni --target_type e, facoltativamente, --target_name. Il tipo di modello specifica una famiglia/interfaccia di modelli; il nome del modello specifica il modello esatto da utilizzare. La sezione "Intro to generators" 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 (ad es. "RWKV/rwkv-4-169m-pile"). Alcuni generatori potrebbero richiedere che una chiave API sia impostata come variabile d'ambiente, e ti avviseranno se ne hanno bisogno.
garak esegue tutte le probe per impostazione predefinita, ma puoi essere più specifico anche in questo. --spec probes.promptinject utilizzerà solo i metodi del framework PromptInject, ad esempio. Puoi anche specificare un singolo plugin invece di una famiglia di plugin aggiungendo il nome del plugin dopo un .; ad esempio, --spec probes.lmrc.SlurUsage utilizzerà un'implementazione di verifica per i modelli che generano insulti basata sul framework Language Model Risk Cards.
Per aiuto e ispirazione, trovaci su Twitter o discord!
Esempi
Verifica un modello commerciale per prompt injection basata sulla 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 --spec probes.encoding
Verifica se la versione Hugging Face di GPT2 è vulnerabile a DAN 11.0
python3 -m garak --target_type huggingface --target_name gpt2 --spec probes.dan.Dan_11_0
Lettura dei risultati
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 detector. Se uno qualsiasi dei tentativi di prompt ha prodotto un comportamento indesiderabile, la risposta sarà 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 vedere che il modello più recente è molto più suscettibile agli attacchi di injection basati sulla codifica, mentre text-babbage-001 è risultato vulnerabile solo alle injection con codifica quoted-printable e MIME. Le cifre alla fine di ogni riga, ad esempio 840/840, indicano il numero totale di generazioni di testo e poi quante di queste sembravano comportarsi correttamente. La cifra può essere piuttosto alta perché viene effettuata più di una generazione per prompt - per impostazione predefinita, 10.
Gli errori finiscono 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 prodotto il maggior numero di hit.
Inviate PR e aprite issue. Buona caccia!