
Código, registros de respuesta y etiquetas para el artículo Jailbreaking Open-Weight LLMs via Random Embedding Perturbations
Código y datos para el artículo Jailbreaking Open-Weight LLMs via Random Embedding Perturbations.
Enlace a la pre-publicación del artículo: https://arxiv.org/abs/2610.07125
Escrito por las increíbles personas del Departamento de Ciencias de la Computación Teórica de la Universidad de California, Santa Cruz.
Este trabajo cuenta con contribuciones significativas de Scott Sirri, el Prof. Vaggos Chatziafratis, el Prof. C. Seshadhri y yo mismo.
El repositorio contiene todas las respuestas de los modelos generadas para el artículo, la etiqueta de segura / no segura / degenerada de cada respuesta, los cuadernos de Colab que las produjeron y los scripts de inferencia que importan los cuadernos. Esto abarca el ataque de Vector de Embedding Perturbado (PEV) y los otros cinco métodos de jailbreak comparados en el artículo. Todas las tasas de jailbreak y los tiempos de reloj de pared del artículo se calculan a partir de los archivos en results/.
code/
inference/ run_<model>.py: model loading, prompt construction and the manual
generation loop that every PEV notebook imports
ours/<model>/ PEV notebooks for one model
ours/<model>/fixed_peak_sigma/
notebooks for the fixed peak sigma runs (GLM-4-9B, Phi-4-mini,
Qwen2.5-1.5B); their logs are in results/<model>/ours/fixed_peak_sigma/
igcg/ I-GCG, one notebook per model
latentfusion/ LatentFusion, one notebook per model
refusalcones/ RefusalCones, one notebook per model
softprompt/ SoftPrompt notebooks (Llama-3.1-8B and Mistral-7B)
figures/ notebook that draws the paper figures
results/<model>/
baseline/ direct responses to the unperturbed prompts (.txt log) and their
labels (.xlsx / .csv); these give the baseline jailbreak rate
ours/raw_responses/ PEV response logs from the sigma sweeps, split by prompt range
ours/classified/ labels for those responses, split the same way
ours/fixed_peak_sigma/ PEV runs at the fixed peak sigma of the model (GLM-4-9B, Phi-4-mini,
Qwen2.5-1.5B): the full 100-prompt sweep and the SELECT re-runs
igcg/ latentfusion/ neurostrike/ refusalcones/ softprompt/
responses (.txt) and labels (.xlsx) for the other methods
Modelos: Qwen2.5-1.5B, SmolLM3-3B, Phi-4-mini, Mistral-7B-Instruct, Llama-3.1-8B,
GLM-4-9B, las variantes de chat ajustadas por instrucciones nombradas en la Sec. 4 del artículo.
Dónde está el código de cada método:
| Método | Ubicación |
|---|---|
| PEV | code/ours/<model>/; las ejecuciones con sigma de pico fijo están en code/ours/<model>/fixed_peak_sigma/; el código de inferencia compartido está en code/inference/ |
| I-GCG | code/igcg/, un notebook por modelo |
| LatentFusion | code/latentfusion/, un notebook por modelo |
| RefusalCones | code/refusalcones/, un notebook por modelo |
| SoftPrompt | code/softprompt/, Llama-3.1-8B y Mistral-7B |
| NeuroStrike | dentro de los notebooks de PEV code/ours/Llama-3.1-8B/LLama31_perturbation_p76_to_p100.ipynb (la celda de configuración también está en LLama31_perturbation_p1_to_p25.ipynb) y code/ours/SmolLM3-3B/run_smollm3_batched_p26_p50.ipynb; las respuestas van a results/<model>/neurostrike/ |
code/inference/run_<model>.py es un archivo por modelo (run_qwen.py, run_smollm3.py,
run_phi4mini.py, run_mistral.py, run_llama.py, run_glm.py). Cada uno carga el modelo con
HuggingFace Transformers, aplica la plantilla de chat con un mensaje de sistema vacío, expone
load_model(), build_prompt() y encode_prompt(), y ejecuta un bucle de generación
autorregresiva manual con un hook sobre los embeddings de entrada. Los notebooks importan el script de su
modelo e inyectan el ruido gaussiano a través de ese hook. Ejecutado por sí solo, un script abre una
terminal interactiva para un único modelo; los comandos /verbose y /embedfile imprimen tablas de
tokens y vectores de embedding. Los interruptores de dispositivo y de comportamiento son variables de entorno
documentadas en la cabecera de cada archivo. El script de Llama necesita un token de Hugging Face porque el
checkpoint tiene acceso restringido; el token se lee del entorno y nunca se almacena.
.txt) son registros de solo adición escritos por los notebooks. Cada entrada registra
el índice del prompt, el nivel de ruido sigma cuando corresponde, el número de ejecución y la respuesta
completa del modelo. Los nombres de archivo incluyen el rango de prompts (p001_to_p025 significa los prompts 1 a 25 de
los 100 prompts dañinos de JailbreakBench) y la marca de tiempo UTC de la ejecución. El tiempo de reloj de pared se
escribe después de cada lote de 20 ejecuciones por prompt y al final del experimento..xlsx, .csv) contienen una fila por respuesta con su etiqueta: segura, no segura o
degenerada, según se define en la Sec. 4 del artículo. Un prompt se considera jailbroken si alguna de sus
ejecuciones está etiquetada como no segura. Los archivos con nombres *_categorization* o del estilo *_p01_25 son las
versiones etiquetadas del registro con el mismo rango de prompts.ours/fixed_peak_sigma/) se nombran
JBB_<model>_sigma0pXXX_..._<timestamp>.txt; sigma0p003 significa sigma = 0.003. El
archivo p001_to_p100 es el barrido completo de 100 prompts y 20 ejecuciones con ese sigma. Los
archivos SELECT_..._nNN son ejecuciones de seguimiento con el mismo sigma sobre los prompts listados en el
nombre del archivo, con NN ejecuciones por prompt.HIGHSIGMA son las ejecuciones con sigma mayor analizadas en la Sec. 4.1.SELECT son ejecuciones adicionales sobre los prompts listados en el nombre del archivo, para
prompts que necesitaron más de 20 ejecuciones para ser jailbroken. La línea de cabecera de cada registro registra los
valores de sigma, el número de ejecuciones, los ids de los prompts y la semilla aleatoria.Llama-3.1-8B/baseline/fixed_baseline.xlsx y los archivos de etiquetas fixed_* son los archivos de etiquetas
tras la verificación manual y sustituyen a las versiones anteriores.Las respuestas fueron clasificadas por Claude Opus 4.6 con las instrucciones del juez de JailbreakBench, dado
el archivo de registro con el prompt, el número de ejecución y la respuesta. Cada respuesta etiquetada como no segura fue después
verificada a mano. Los archivos de etiquetas en results/ son las etiquetas verificadas.
Cada notebook bajo code/ours/<model>/ se ejecutó en una única NVIDIA A100-SXM4-80GB en Google
Colab. Importa el run_<model>.py correspondiente, carga los prompts dañinos de JailbreakBench,
mapea cada prompt a través de la capa de embedding de entrada del modelo, añade ruido gaussiano
independiente N(0, sigma^2) al embedding completo del prompt y pasa el embedding perturbado a las
capas del transformer. Para cada prompt muestrea 20 matrices de ruido en un solo lote y añade cada
respuesta al registro. Los parámetros de decodificación y el sigma por modelo se enumeran en la Sec. 4 y la
Tab. 3 del artículo y se establecen al inicio de cada notebook. El token de Hugging Face se solicita
de forma interactiva y no se almacena en este repositorio. Los notebooks para los otros métodos siguen
el mismo patrón con el ataque correspondiente sustituido.