
garak v0.17.0
Escáner modular de vulnerabilidades de LLM que analiza alucinaciones, fuga de datos, inyección de prompts, jailbreaks y toxicidad utilizando sondas estáticas, dinámicas y adaptativas a través de múltiples proveedores de modelos.
garak, escáner de vulnerabilidades de LLM
Generative AI Red-teaming & Assessment Kit
garak comprueba si se puede hacer que una aplicación basada en LLM falle de una forma que no deseamos. garak sondea en busca de alucinaciones, fuga de datos, inyección de prompts, desinformación, generación de toxicidad, jailbreaks y muchas otras debilidades. Si conoces nmap o msf / Metasploit Framework, garak hace cosas en cierto modo similares a ellos, pero para LLMs.
garak se centra en las formas de hacer fallar un LLM o un sistema de diálogo. Combina sondas estáticas, dinámicas y adaptativas para explorar esto.
garak es una herramienta gratuita. Nos encanta desarrollarla y siempre estamos interesados en añadir funcionalidad para apoyar aplicaciones.
Primeros pasos
> ¡Consulta nuestra guía de usuario! docs.garak.ai
> ¡Únete a nuestro Discord!
> Enlaces del proyecto y página principal: garak.ai
> Twitter: @garak_llm
> ¡Diapositivas de DEF CON!
Soporte de LLM
actualmente compatible con:
- modelos generativos de hugging face hub
- modelos de texto de replicate
- modelos de chat y continuación de openai api
- modelos fundacionales de aws bedrock
- litellm
- prácticamente cualquier cosa accesible vía REST
- modelos gguf como llama.cpp versión >= 1046
- ¡.. y muchos más LLMs!
Instalación:
garak es una herramienta de línea de comandos. Se desarrolla en Linux y OSX.
Instalación estándar con pip
Simplemente descárgala de PyPI y deberías estar listo para empezar:
python -m pip install -U garak
Instalar la versión de desarrollo con pip
La versión estándar de garak en pip se actualiza periódicamente. Para obtener una versión más reciente desde GitHub, prueba:
python -m pip install -U git+https://github.com/NVIDIA/garak.git@main
Clonar desde el código fuente
garak tiene sus propias dependencias. Puedes instalar garak en su propio entorno 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 .
Bien, si eso salió bien, ¡probablemente estés listo para continuar!
Nota: si clonaste antes del traslado a la organización de GitHub NVIDIA, pero estás leyendo esto en el URI github.com/NVIDIA, actualiza tus remotos de la siguiente manera:
git remote set-url origin https://github.com/NVIDIA/garak.git
Primeros pasos
La sintaxis general es:
garak <options>
garak necesita saber qué modelo escanear y, por defecto, intentará todas las sondas que conoce sobre ese modelo, utilizando los detectores de vulnerabilidades recomendados por cada sonda. Puedes ver una lista de sondas usando:
garak --list_probes
Para especificar un generador, usa las opciones --target_type y, opcionalmente, --target_name. El tipo de modelo especifica una familia/interfaz de modelo; el nombre del modelo especifica el modelo exacto que se va a utilizar. La sección "Intro to generators" a continuación describe algunos de los generadores compatibles. Una familia de generadores sencilla son los modelos de Hugging Face; para cargar uno de estos, establece --target_type en huggingface y --target_name en el nombre del modelo en Hub (p. ej., "RWKV/rwkv-4-169m-pile"). Algunos generadores pueden necesitar una clave de API configurada como variable de entorno, y te avisarán si la necesitan.
garak ejecuta todas las sondas por defecto, pero también puedes ser específico al respecto. --spec probes.promptinject usará solo los métodos del framework PromptInject, por ejemplo. También puedes especificar un plugin concreto en lugar de una familia de plugins añadiendo el nombre del plugin después de un .; por ejemplo, --spec probes.lmrc.SlurUsage usará una implementación de comprobación de modelos que generan insultos basada en el framework Language Model Risk Cards.
Para obtener ayuda e inspiración, encuéntranos en Twitter o discord.
Ejemplos
Sondear un modelo comercial para inyección de prompts basada en codificación (OSX/*nix) (reemplaza el valor de ejemplo con una clave de API de OpenAI real)
export OPENAI_API_KEY="sk-123XXXXXXXXXXXX"
python3 -m garak --target_type openai --target_name gpt-5-nano --spec probes.encoding
Comprueba si la versión de GPT2 de Hugging Face es vulnerable a DAN 11.0
python3 -m garak --target_type huggingface --target_name gpt2 --spec probes.dan.Dan_11_0
Lectura de los resultados
Para cada sonda cargada, garak imprimirá una barra de progreso mientras genera. Una vez completada la generación, se muestra una fila que evalúa los resultados de esa sonda en cada detector. Si alguno de los intentos de prompt produjo un comportamiento indeseable, la respuesta se marcará como FAIL y se indicará la tasa de fallos.
Estos son los resultados con el módulo encoding en una variante de GPT-3:

Y los mismos resultados para ChatGPT:

Podemos ver que el modelo más reciente es mucho más susceptible a los ataques de inyección basados en codificación, mientras que text-babbage-001 solo se encontró vulnerable a inyecciones de codificación quoted-printable y MIME. Las cifras al final de cada fila, por ejemplo 840/840, indican el número total de generaciones de texto y luego cuántas de ellas parecieron comportarse correctamente. La cifra puede ser bastante alta porque se realiza más de una generación por prompt; por defecto, 10.
Los errores se registran en garak.log; la ejecución se registra en detalle en un archivo .jsonl especificado al inicio y al final del análisis. Hay un script de análisis básico en analyse/analyse_log.py que mostrará las sondas y los prompts que provocaron más aciertos.
Envía PRs y abre issues. ¡Feliz caza!