Heretic o cómo eliminar fácilmente la censura en un LLM

Los modelos de lenguaje actuales (los conocidos LLM, Large Language Models) se han convertido en piezas clave de muchas aplicaciones: asistentes, análisis de código, automatización, etc. La mayoría de estos modelos modernos están construidos usando una arquitectura llamada transformer, que básicamente es un tipo de red neuronal diseñada para procesar texto analizando relaciones entre palabras dentro de una frase o documento.

Sin embargo, los modelos que se publican hoy en día no son exactamente el modelo “en bruto”. Antes de liberarse, pasan por procesos de alineamiento (alignment). Este término se refiere a un conjunto de técnicas usadas para hacer que el modelo evite generar contenido peligroso, rechace ciertas peticiones y siga políticas de seguridad. Ese comportamiento de rechazo es lo que en la comunidad se suele llamar refusal behavior.

Por ejemplo, si le preguntas a un modelo alineado algo sensible, muchas veces responderá con algo como: "Disculpa, no puedo ayudarte con eso". Esto no es casualidad: el modelo ha sido entrenado específicamente para hacerlo.

En este artículo vamos a analizar una herramienta bastante interesante desde el punto de vista técnico y de seguridad: Heretic. Lo que hace esta herramienta es automatizar un proceso para reducir o eliminar ese comportamiento de rechazo modificando directamente el modelo. Y lo más interesante: sin reentrenarlo.

Antes de seguir: qué es realmente un transformer

Un transformer es una red neuronal compuesta por varias capas que procesan el texto paso a paso. Cuando el modelo genera una respuesta, internamente ocurren varias transformaciones matemáticas sobre vectores numéricos que representan palabras o tokens.

Una forma útil de imaginarlo es pensar que cada palabra se convierte en un punto dentro de un espacio matemático de muchas dimensiones (a veces miles). A medida que el texto pasa por las capas del modelo, ese punto se va transformando.

Dentro del transformer hay algo llamado residual stream (flujo residual). Este es básicamente el estado interno del modelo que se va actualizando en cada capa y que contiene toda la información que el modelo está usando para decidir qué palabra generar después.

Muchos comportamientos complejos del modelo —incluido el rechazo de prompts— están codificados dentro de ese flujo interno. Esto es clave para entender Heretic.

Hacia la ablación direccional

Investigaciones recientes en interpretabilidad de modelos sugieren algo interesante: algunos comportamientos del modelo no están distribuidos por todo el sistema, sino que aparecen como direcciones concretas dentro de ese espacio interno.

Esto significa que, matemáticamente, el modelo podría estar haciendo algo equivalente a: “Si la activación se mueve hacia esta dirección concreta del espacio, genera un rechazo”. Si eso es cierto, entonces podríamos intentar identificar esa dirección y reducir su efecto.

Aquí es donde entra el concepto de ablación direccional (directional ablation) que, por supuesto, consiste en eliminar una dirección concreta dentro del espacio de activaciones del modelo.

El problema es que hacer esto manualmente es complicado. Y aquí es donde Heretic aporta valor.

Qué hace exactamente Heretic

Heretic automatiza todo el proceso que normalmente requeriría bastante experimentación manual. El pipeline que implementa la herramienta es básicamente este:

  1. Ejecutar el modelo con prompts que generan rechazo.
  2. Ejecutar el modelo con prompts normales.
  3. Capturar activaciones internas del modelo.
  4. Identificar la dirección asociada al refusal.
  5. Aplicar ablación sobre el modelo.
  6. Optimizar parámetros para que el modelo no se degrade.

Esto último es importante: si modificas demasiado el modelo, puedes romper su capacidad para responder correctamente. Por eso Heretic introduce un sistema de optimización automática y busca automáticamente valores que minimicen dos cosas: el número de rechazos del modelo y la diferencia con el comportamiento original.

Para medir esa diferencia se usa algo llamado divergencia KL (Kullback-Leibler divergence), que básicamente mide cuánto cambia la distribución de respuestas del modelo respecto al original. Cuanto menor sea esa divergencia, más parecido sigue siendo el modelo.

Como se usa en la práctica

Una de las cosas más interesantes de Heretic es que, a pesar de lo que hace internamente, usarlo es bastante sencillo.

Instalación:

pip install -U heretic-llm

Ejecutar sobre un modelo:

heretic Qwen/Qwen3-4B-Instruct-2507

Puedes reemplazar Qwen/Qwen3-4B-Instruct-2507 con el modelo que quieras descensurar.

Lo que ocurre internamente durante la ejecución es algo así:

Primero se carga el modelo completo en memoria.
Después se ejecuta un conjunto de pruebas iniciales.
Luego se analizan activaciones internas.
Se calcula el vector de refusal.
Se prueban distintas configuraciones de ablación.
Finalmente se genera una versión modificada del modelo.

Dependiendo del tamaño del modelo, este proceso puede tardar bastante.

Proyectohttps://github.com/p-e-w/heretic

Comentarios