Sobre o projeto
garak (Generative AI Red-teaming & Assessment Kit) é uma ferramenta de linha de comando para sondar grandes modelos de linguagem e sistemas de diálogo em busca de modos de falha. É desenvolvida pela NVIDIA e lançada sob a licença Apache 2.0.
O que faz
- Verifica se um LLM pode ser levado a falhar de maneiras indesejáveis, incluindo alucinação, vazamento de dados, injeção de prompt, desinformação, geração de toxicidade, jailbreaks e outras fraquezas.
- Combina sondagens estáticas, dinâmicas e adaptativas para explorar esses modos de falha.
- O README compara seu papel ao nmap ou ao Metasploit Framework, mas aplicado a LLMs.
Alvos suportados
- Modelos generativos do Hugging Face Hub, incluindo pipelines locais do transformers, a Inference API e Inference Endpoints privados.
- Modelos de chat e de completion da OpenAI.
- Modelos de texto do Replicate e endpoints privados do Replicate.
- Modelos de base do AWS Bedrock via API Converse, abrangendo famílias como Anthropic Claude, Meta Llama, Amazon Titan, AI21 Labs, Cohere e Mistral AI.
- Cohere, Groq, litellm, endpoints NVIDIA NIM, modelos ggml/llama.cpp e essencialmente qualquer coisa acessível por meio de um endpoint REST.
- Geradores de teste integrados (test.Blank, test.Repeat) para desenvolvimento de plugins.
Instalação e uso
- Instalado a partir do PyPI com pip, do branch principal do GitHub, ou clonado do código-fonte em um ambiente Conda (Python 3.11 a 3.13).
- A sintaxe geral é `garak <options>`; a ferramenta precisa de um modelo alvo e, por padrão, executa todas as sondagens conhecidas com os detectores recomendados de cada sondagem.
- `--list_probes` lista as sondagens disponíveis; `--target_type` e `--target_name` selecionam o modelo; `--spec` restringe a execução a uma família de sondagens ou a um único plugin.
- Chaves de API para provedores hospedados são fornecidas por meio de variáveis de ambiente como OPENAI_API_KEY, HF_INFERENCE_TOKEN, REPLICATE_API_TOKEN, COHERE_API_KEY, GROQ_API_KEY, NIM_API_KEY e BEDROCK_API_KEY.
Exemplos de sondagens descritas no README
- blank, atkgen (geração automatizada de ataques), badchars (perturbações Unicode imperceptíveis), av_spam_scanning, continuation, dan (ataques DAN e similares a DAN), donotanswer, encoding (injeção de prompt via codificação de texto), gcg (sufixo adversarial), glitch (tokens glitch), grandma, goodside, leakreplay (reprodução de dados de treinamento), lmrc (Language Model Risk Cards), malwaregen, misleading, packagehallucination, promptinject, realtoxicityprompts, snowball (alucinação em efeito bola de neve) e xss.
Resultados e registro
- Para cada sondagem, o garak imprime uma barra de progresso e, em seguida, uma linha avaliando os resultados por detector, marcando as respostas como FAIL com uma taxa de falha quando ocorre comportamento indesejável.
- Os logs incluem garak.log para depuração, um relatório JSONL por execução com uma entrada por tentativa de sondagem e um log de acertos detalhando as tentativas que resultaram em uma vulnerabilidade.
- Um script básico de análise em analyse/analyse_log.py exibe as sondagens e os prompts que produziram mais acertos.
Arquitetura e extensibilidade
- O código é organizado em probes, detectors, evaluators, generators e harnesses, cada um com um base.py definindo as classes base de plugins.
- O modo de operação padrão usa o harness probewise, que instancia cada sondagem e lê seus atributos primary_detector e extended_detectors para decidir quais detectores executar.
- Desenvolvedores podem escrever novos plugins herdando de classes base como garak.probes.base.TextProbe, testá-los interativamente ou com geradores e detectores de teste, e listá-los via --list_probes, --list_detectors ou --list_generators.
Recursos do projeto
- Documentação em docs.garak.ai e reference.garak.io/readthedocs, uma comunidade no Discord, a página do projeto garak.ai, um preprint no arXiv (2406.11036) e uma entrada de citação para uso acadêmico.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.