
garak v0.17.0
Scanner de vulnerabilidades LLM modular que sonda por alucinação, vazamento de dados, injeção de prompt, jailbreaks e toxicidade usando sondas estáticas, dinâmicas e adaptativas em múltiplos provedores de modelo.
garak, scanner de vulnerabilidades para LLMs
Generative AI Red-teaming & Assessment Kit
garak verifica se uma aplicação baseada em LLM pode ser levada a falhar de uma forma indesejada. garak sonda alucinações, vazamento de dados, injeção de prompt, desinformação, geração de toxicidade, jailbreaks e muitas outras fragilidades. Se você conhece o nmap ou o msf / Metasploit Framework, o garak faz algo semelhante a eles, mas para LLMs.
garak concentra-se nas formas de fazer um LLM ou sistema de diálogo falhar. Ele combina sondas estáticas, dinâmicas e adaptativas para explorar isso.
garak é uma ferramenta gratuita. Adoramos desenvolvê-la e estamos sempre interessados em adicionar funcionalidades para apoiar aplicações.
Comece aqui
> Consulte nosso guia do usuário! docs.garak.ai
> Junte-se ao nosso Discord!
> Links do projeto e página inicial: garak.ai
> Twitter: @garak_llm
> Slides da DEF CON slides!
Suporte a LLMs
atualmente suporta:
- modelos generativos do hugging face hub
- modelos de texto do replicate
- modelos de chat e continuação da openai api
- modelos de fundação do aws bedrock
- litellm
- praticamente qualquer coisa acessível via REST
- modelos gguf como llama.cpp versão >= 1046
- .. e muitos outros LLMs!
Instalação:
garak é uma ferramenta de linha de comando. É desenvolvida em Linux e OSX.
Instalação padrão com pip
Basta obtê-la do PyPI e você estará pronto para começar:
python -m pip install -U garak
Instalar a versão de desenvolvimento com pip
A versão padrão do garak no pip é atualizada periodicamente. Para obter uma versão mais recente do GitHub, tente:
python -m pip install -U git+https://github.com/NVIDIA/garak.git@main
Clonar a partir do código-fonte
O garak tem suas próprias dependências. Você pode instalar o garak em seu próprio ambiente 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, se isso correu bem, provavelmente está tudo pronto!
Nota: se clonou antes da mudança para a organização NVIDIA no GitHub, mas está a ler isto no URI github.com/NVIDIA, atualize os seus remotes da seguinte forma:
git remote set-url origin https://github.com/NVIDIA/garak.git
Primeiros passos
A sintaxe geral é:
garak <options>
O garak precisa saber qual modelo escanear e, por padrão, tentará todas as sondas que conhece nesse modelo, usando os detectores de vulnerabilidade recomendados por cada sonda. Você pode ver uma lista de sondas usando:
garak --list_probes
Para especificar um gerador, use as opções --target_type e, opcionalmente, --target_name. O tipo de modelo especifica uma família/interface de modelo; o nome do modelo especifica o modelo exato a ser usado. A seção "Intro to generators" abaixo descreve alguns dos geradores suportados. Uma família de geradores direta são os modelos Hugging Face; para carregar um deles, defina --target_type como huggingface e --target_name como o nome do modelo no Hub (por exemplo, "RWKV/rwkv-4-169m-pile"). Alguns geradores podem precisar de uma chave de API definida como variável de ambiente, e eles avisarão se precisarem disso.
O garak executa todas as sondas por padrão, mas você também pode ser específico quanto a isso. --spec probes.promptinject usará apenas os métodos do framework PromptInject, por exemplo. Você também pode especificar um plugin específico em vez de uma família de plugins adicionando o nome do plugin após um .; por exemplo, --spec probes.lmrc.SlurUsage usará uma implementação de verificação de modelos que geram insultos com base no framework Language Model Risk Cards.
Para ajuda e inspiração, encontre-nos no Twitter ou no discord!
Exemplos
Sondar um modelo comercial para injeção de prompt baseada em codificação (OSX/*nix) (substitua o valor de exemplo por uma chave de API real da OpenAI)
export OPENAI_API_KEY="sk-123XXXXXXXXXXXX"
python3 -m garak --target_type openai --target_name gpt-5-nano --spec probes.encoding
Veja se a versão do GPT2 no Hugging Face é vulnerável ao DAN 11.0
python3 -m garak --target_type huggingface --target_name gpt2 --spec probes.dan.Dan_11_0
Lendo os resultados
Para cada probe carregado, o garak imprimirá uma barra de progresso enquanto gera. Uma vez concluída a geração, é exibida uma linha avaliando os resultados desse probe em cada detector. Se alguma das tentativas de prompt produziu um comportamento indesejável, a resposta será marcada como FAIL, e a taxa de falha será informada.
Aqui estão os resultados com o módulo encoding em uma variante do GPT-3:

E os mesmos resultados para o ChatGPT:

Podemos ver que o modelo mais recente é muito mais suscetível a ataques de injeção baseados em codificação, enquanto o text-babbage-001 mostrou-se vulnerável apenas a injeções de codificação quoted-printable e MIME. Os números ao final de cada linha, por exemplo 840/840, indicam o número total de gerações de texto e, em seguida, quantas delas pareceram se comportar de forma adequada. O número pode ser bastante alto porque mais de uma geração é feita por prompt — por padrão, 10.
Os erros vão para garak.log; a execução é registrada em detalhes em um arquivo .jsonl especificado no início e no fim da análise. Há um script básico de análise em analyse/analyse_log.py que exibirá os probes e prompts que resultaram no maior número de acertos.
Envie PRs e abra issues. Boa caçada!