
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.
Kit de Red-teaming y Evaluación de IA Generativa
garak verifica si un LLM puede ser inducido a fallar de una manera no deseada. garak busca alucinaciones, fugas 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 algo similar a ellos, pero para LLMs.
garak se centra en formas de hacer fallar a un LLM o 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 agregar funcionalidades para apoyar aplicaciones.
actualmente soporta:
garak es una herramienta de línea de comandos. Se desarrolla en Linux y OSX.
pipSolo tómalo desde PyPI y deberías estar listo:``` python -m pip install -U garak
### Instalar la versión de desarrollo con `pip`
La versión estándar de `garak` mediante 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
garak tiene sus propias dependencias. Puede instalar garak en su propio entorno de 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 .
Bien, si eso funcionó, ¡probablemente estás listo!
**Nota**: si clonaste antes del traslado a la organización `NVIDIA` de GitHub, pero estás leyendo esto en la URI `github.com/NVIDIA`, actualiza tus remotos de la siguiente manera:```
git remote set-url origin https://github.com/NVIDIA/garak.git
La sintaxis general es:
garak <options>
garak necesita saber qué modelo escanear, y por defecto, probará todas las sondas que conoce en ese modelo, usando los detectores de vulnerabilidad recomendados por cada sonda. Puede ver una lista de sondas usando:
garak --list_probes
Para especificar un generador, use 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 a utilizar. La sección "Introducción a los generadores" 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, establezca --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 que se establezca una clave API como variable de entorno, y le informarán si la necesitan.
garak ejecuta todas las sondas por defecto, pero también puede ser específico al respecto. --probes promptinject usará solo los métodos del framework PromptInject, por ejemplo. También puede especificar un plugin específico en lugar de una familia de plugins añadiendo el nombre del plugin después de un .; por ejemplo, --probes lmrc.SlurUsage usará una implementación para verificar si los modelos generan insultos basados en el framework Language Model Risk Cards.
Para obtener ayuda e inspiración, encuéntrenos en Twitter o Discord!
Probar un modelo comercial para inyección de prompts basada en codificación (OSX/*nix) (reemplace el valor de ejemplo con una clave API real de OpenAI)``` export OPENAI_API_KEY="sk-123XXXXXXXXXXXX" python3 -m garak --target_type openai --target_name gpt-5-nano --probes encoding
Ver si la versión de Hugging Face de GPT2 es vulnerable a DAN 11.0```
python3 -m garak --target_type huggingface --target_name gpt2 --probes dan.Dan_11_0
Por cada sonda cargada, garak mostrará una barra de progreso mientras genera. Una vez completada la generación, se muestra una fila evaluando los resultados de esa sonda en cada detector. Si alguno de los intentos de aviso produjo un comportamiento no deseado, la respuesta se marcará como FAIL y se indicará la tasa de fallos.
Aquí están los resultados con el módulo encoding en una variante de GPT-3:

Y los mismos resultados para ChatGPT:

Podemos observar 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 resultó 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 parecen haber funcionado correctamente. La cifra puede ser bastante alta porque se realiza más de una generación por aviso; por defecto, 10.
Los errores se registran en garak.log; la ejecución se registra detalladamente 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 avisos que generaron más aciertos.
Envíe PR y abra issues. ¡Buena caza!