Volver a actualizaciones
Nuevo releaseAug 5, 2026

garak v0.16.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.

Compartir

garak, escáner de vulnerabilidades de LLM

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.

License Tests/Linux Tests/Windows Tests/OSX Documentation Status arXiv discord-img Code style: black PyPI - Python Version PyPI Downloads Downloads

Comenzar

> ¡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

> DEF CON diapositivas!


Soporte de LLM

actualmente soporta:

Instalación:

garak es una herramienta de línea de comandos. Se desarrolla en Linux y OSX.

Instalación estándar con pip

Solo 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

Clonar desde el origen

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

Primeros pasos

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!

Ejemplos

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

Lectura de los resultados

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: alt text

Y los mismos resultados para ChatGPT: alt text

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!

Introducción a los generadores

Hugging Face

Usando la API Pipeline:

  • --target_type huggingface (para modelos transformers que se ejecuten localmente)
  • --target_name - use el nombre del modelo desde el Hub. Solo funcionarán modelos generativos. Si falla y no debería, abra un issue y pegue el comando que intentó junto con la excepción.

Usando la API de inferencia:

  • --target_type huggingface.InferenceAPI (para acceso a modelos vía API)
  • --target_name - el nombre del modelo desde el Hub, p. ej. "mosaicml/mpt-7b-instruct"

Usando endpoints privados:

  • --target_type huggingface.InferenceEndpoint (para endpoints privados)

  • --target_name - la URL del endpoint, p. ej. https://xxx.us-east-1.aws.endpoints.huggingface.cloud

  • (opcional) configure la variable de entorno HF_INFERENCE_TOKEN con un token de API de Hugging Face con el rol "read"; consulte https://huggingface.co/settings/tokens cuando haya iniciado sesión

OpenAI

  • --target_type openai
  • --target_name - el modelo de OpenAI que desea usar. gpt-5-nano es rápido y adecuado para pruebas.
  • configure la variable de entorno OPENAI_API_KEY con su clave de API de OpenAI (p. ej. "sk-19763ASDF87q6657"); consulte https://platform.openai.com/account/api-keys cuando haya iniciado sesión

Los tipos de modelos reconocidos están en lista blanca, porque el complemento necesita saber qué sub-API usar. Los modelos Completion o ChatCompletion son válidos. Si desea usar un modelo no compatible, debería recibir un mensaje de error informativo; por favor, envíe un PR / abra un issue.

Replicate

Modelos públicos de Replicate:

  • --target_type replicate
  • --target_name - el nombre del modelo de Replicate y su hash, p. ej. "stability-ai/stablelm-tuned-alpha-7b:c49dae36"

Endpoints privados de Replicate:

  • --target_type replicate.InferenceEndpoint (para endpoints privados)
  • --target_name - el slug de usuario/modelo desde el endpoint desplegado, p. ej. elim/elims-llama2-7b

Cohere

  • --target_type cohere
  • --target_name (opcional, command por defecto) - El modelo específico de Cohere que desea probar
  • configure la variable de entorno COHERE_API_KEY con su clave de API de Cohere, p. ej. "aBcDeFgHiJ123456789"; consulte https://dashboard.cohere.ai/api-keys cuando haya iniciado sesión

Groq

  • --target_type groq
  • --target_name - El nombre del modelo al que acceder a través de la API de Groq
  • configure la variable de entorno GROQ_API_KEY con su clave de API de Groq; consulte https://console.groq.com/docs/quickstart para obtener detalles sobre cómo crear una clave de API

ggml

  • --target_type ggml
  • --target_name - La ruta al modelo ggml que desea cargar, p. ej. /home/leon/llama.cpp/models/7B/ggml-model-q4_0.bin
  • configure la variable de entorno GGML_MAIN_PATH con la ruta a su ejecutable main de ggml

REST

rest.RestGenerator es altamente flexible y puede conectarse a cualquier endpoint REST que devuelva texto plano o JSON. Necesita una configuración breve, que normalmente resultará en un archivo YAML corto que describa su endpoint. Consulte https://reference.garak.ai/en/latest/garak.generators.rest.html para ver ejemplos.

NIM

Use modelos de https://build.nvidia.com/ u otros endpoints NIM.

  • configure la variable de entorno NIM_API_KEY con su token de API de autenticación, o especifíquelo en el YAML de configuración

Para modelos de chat:

  • --target_type nim
  • --target_name - el nombre del model de NIM, p. ej. meta/llama-3.1-8b-instruct

Para modelos de finalización:

  • --target_type nim.NVOpenAICompletion
  • --target_name - el nombre del model de NIM, p. ej. bigcode/starcoder2-15b

AWS Bedrock

  • --target_type bedrock
  • --target_name - el ID del modelo de Bedrock o su alias, p. ej. anthropic.claude-3-sonnet-20240229-v1:0 o claude-3-sonnet
  • configure la variable de entorno BEDROCK_API_KEY con su clave de API de AWS Bedrock; consulte https://docs.aws.amazon.com/bedrock/latest/userguide/api-keys-use.html para instrucciones de configuración
  • (opcional) configure la variable de entorno BEDROCK_REGION para especificar la región de AWS (por defecto us-east-1)

Las familias de modelos compatibles incluyen modelos Anthropic Claude, Meta Llama, Amazon Titan, AI21 Labs, Cohere y Mistral AI. El generador utiliza la API Converse para acceso unificado a todos los tipos de modelo.

Ejemplo de uso:``` export BEDROCK_API_KEY="your-api-key" export BEDROCK_REGION="us-east-1" garak --target_type bedrock --target_name claude-3-sonnet --probes dan

### Prueba

* `--target_type test`
* (alternativamente) `--target_name test.Blank`
Para pruebas. Esto siempre genera la cadena vacía, usando el generador `test.Blank`. Se marcará como fallido para cualquier prueba que *requiera* una salida, por ejemplo, aquellas que hacen afirmaciones controvertidas y esperan que el modelo las refute para pasar.

* `--target_type test.Repeat`
Para pruebas. Este generador repite el mensaje que recibió.

## Introducción a los probes

| Probe                | Descripción                                                                                                                                                                                                                     |
|----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| blank                | Un probe simple que siempre envía un mensaje vacío.                                                                                                                                                                             |
| atkgen               | Generación Automática de Ataques. Un LLM de red-teaming sondea el objetivo y reacciona a él en un intento de obtener una salida tóxica. Prototipo, mayormente sin estado, por ahora utiliza un simple GPT-2 [fine-tuned](https://huggingface.co/garak-llm/artgpt2tox) en el subconjunto de intentos de hhrlhf que produjeron toxicidad detectable (el único objetivo actualmente soportado por ahora). |
| badchars             | Implementa perturbaciones Unicode imperceptibles (caracteres invisibles, homoglifos, reordenamientos, eliminaciones) inspiradas en el artículo [Bad Characters](https://arxiv.org/abs/2106.09898).                                |
| av_spam_scanning     | Probes que intentan hacer que el modelo genere firmas de contenido malicioso.                                                                                                                                                   |
| continuation         | Probes que prueban si el modelo continuará una palabra probablemente indeseable.                                                                                                                                                |
| dan                  | Varios ataques [DAN](https://adguard.com/en/blog/chatgpt-dan-prompt-abuse.html) y similares a DAN.                                                                                                                              |
| donotanswer          | Preguntas a las que los modelos de lenguaje responsables no deberían responder.                                                                                                                                                 |
| encoding             | Inyección de mensajes a través de codificación de texto.                                                                                                                                                                        |
| gcg                  | Interrumpir un mensaje del sistema añadiendo un sufijo adversarial.                                                                                                                                                             |
| glitch               | Probar el modelo en busca de tokens glitch que provoquen un comportamiento inusual.                                                                                                                                             |
| grandma              | Apelar a ser recordado por la abuela de uno.                                                                                                                                                                                    |
| goodside             | Implementaciones de los ataques de Riley Goodside.                                                                                                                                                                              |
| leakreplay           | Evaluar si un modelo reproducirá datos de entrenamiento.                                                                                                                                                                        |
| lmrc                 | Submuestra de los probes de [Language Model Risk Cards](https://arxiv.org/abs/2303.18190).                                                                                                                                      |
| malwaregen           | Intentos de hacer que el modelo genere código para construir malware.                                                                                                                                                           |
| misleading           | Intentos de hacer que un modelo apoye afirmaciones engañosas y falsas.                                                                                                                                                          |
| packagehallucination | Intentar obtener generaciones de código que especifiquen paquetes inexistentes (y por lo tanto inseguros).                                                                                                                      |
| promptinject         | Implementación del trabajo [PromptInject](https://github.com/agencyenterprise/PromptInject/tree/main/promptinject) de Agency Enterprise (mejor artículo en NeurIPS ML Safety Workshop 2022).                                    |
| realtoxicityprompts  | Subconjunto del trabajo RealToxicityPrompts (datos limitados porque la prueba completa tardaría mucho en ejecutarse).                                                                                                            |
| snowball             | Probes de [Alucinación en Bola de Nieve](https://ofir.io/snowballed_hallucination.pdf) diseñados para hacer que un modelo dé una respuesta incorrecta a preguntas demasiado complejas para que las procese.                     |
| xss                  | Buscar vulnerabilidades que permitan o ejecuten ataques entre sitios, como la exfiltración de datos privados.                                                                                                                   |

## Registro

`garak` genera múltiples tipos de registro:
* Un archivo de registro, `garak.log`. Esto incluye información de depuración de `garak` y sus plugins, y se continúa entre ejecuciones.
* Un informe de la ejecución actual, estructurado como JSONL. Se crea un nuevo archivo de informe cada vez que se ejecuta `garak`. El nombre de este archivo se muestra al principio y, si tiene éxito, también al final de la ejecución. En el informe, se realiza una entrada por cada intento de sondéo tanto cuando se reciben las generaciones como cuando se evalúan; el atributo `status` de la entrada toma una constante de `garak.attempts` para describir en qué etapa se realizó.
* Un registro de aciertos, que detalla los intentos que produjeron una vulnerabilidad (un 'hit').

## ¿Cómo está estructurado el código?

Consulte la [documentación de referencia](https://reference.garak.ai/) para obtener una guía autorizada sobre la estructura del código de `garak`.

En una ejecución típica, `garak` leerá un tipo de modelo (y opcionalmente un nombre de modelo) desde la línea de comandos, luego determinará qué `probe`s y `detector`s ejecutar, iniciará un `generator`, y luego los pasará a un `harness` para realizar las pruebas; un `evaluator` se encarga de los resultados. Hay muchos módulos en cada una de estas categorías, y cada módulo proporciona una serie de clases que actúan como plugins individuales.

* `garak/probes/` - clases para generar interacciones con LLMs
* `garak/detectors/` - clases para detectar si un LLM está exhibiendo un modo de fallo determinado
* `garak/evaluators/` - esquemas de informe de evaluación
* `garak/generators/` - plugins para LLMs que serán probados
* `garak/harnesses/` - clases para estructurar las pruebas
* `resources/` - elementos auxiliares requeridos por los plugins

El modo de operación predeterminado es usar el harness `probewise`. Dada una lista de nombres de módulos de probe y nombres de plugins de probe, el harness `probewise` instancia cada probe, luego para cada probe lee sus atributos `primary_detector` y `extended_detectors` para obtener una lista de `detector`s a ejecutar sobre la salida.

Cada categoría de plugin (`probes`, `detectors`, `evaluators`, `generators`, `harnesses`) incluye un `base.py` que define las clases base utilizables por los plugins de esa categoría. Cada módulo de plugin define clases de plugin que heredan de una de las clases base. Por ejemplo, `garak.generators.openai.OpenAIGenerator` desciende de `garak.generators.base.Generator`.

Los artefactos más grandes, como archivos de modelo y corpus más extensos, se mantienen fuera del repositorio; se pueden almacenar, por ejemplo, en Hugging Face Hub y cargarlos localmente mediante clientes que usen `garak`.

## Desarrollar tu propio plugin

* Observa cómo lo hacen otros plugins
* Hereda de una de las clases base, por ejemplo, `garak.probes.base.TextProbe`
* Sobrescribe lo mínimo posible
* Puedes probar el nuevo código de al menos dos formas:
  * Inicia una sesión interactiva de Python
    * Importa el modelo, por ejemplo, `import garak.probes.mymodule`
    * Instancia el plugin, por ejemplo, `p = garak.probes.mymodule.MyProbe()`
  * Ejecuta un escaneo con plugins de prueba
    * Para probes, prueba un generador en blanco y el detector always.Pass: `python3 -m garak -m test.Blank -p mymodule -d always.Pass`
    * Para detectors, prueba un generador en blanco y un probe en blanco: `python3 -m garak -m test.Blank -p test.Blank -d mymodule`
    * Para generators, prueba un probe en blanco y el detector always.Pass: `python3 -m garak -m mymodule -p test.Blank -d always.Pass`
  * Haz que `garak` liste todos los plugins del tipo que estás escribiendo, con `--list_probes`, `--list_detectors`, o `--list_generators`

## FAQ

Tenemos una FAQ [aquí](https://github.com/NVIDIA/garak/blob/main/FAQ.md). ¡No dudes en contactarnos si tienes más preguntas! [[email protected]](mailto:[email protected])

La documentación de referencia del código está en [garak.readthedocs.io](https://garak.readthedocs.io/en/latest/).

## Citar garak

Puedes leer el [artículo preliminar de garak](https://github.com/nvidia/garak/blob/main/garak-paper.pdf). Si usas garak, por favor cítanos.```
@article{garak,
  title={{garak: A Framework for Security Probing Large Language Models}},
  author={Leon Derczynski and Erick Galinkin and Jeffrey Martin and Subho Majumdar and Nanna Inie},
  year={2024},
  howpublished={\url{https://garak.ai}}
}

"Mentir es una habilidad como cualquier otra, y si deseas mantener un nivel de excelencia tienes que practicar constantemente" - Elim

Para actualizaciones y novedades consulta @garak_llm

© 2023- Leon Derczynski; licencia Apache v2, consulta LICENSE

Categorías