
Marco de defensa que mantiene congelados los modelos de audio-lenguaje y añade una puerta de riesgo de capa intermedia con adaptadores de seguridad de capa tardía para bloquear jailbreaks de audio en inferencia.
Yu-Ling Liao*, Tzu-Chin Chiu*, Zong-You Chen*, Chi-Lei Tsai*, Shao-Yuan Lo — Universidad Nacional de Taiwán (*contribución equitativa)
Código para la presentación en ICASSP 2027. AEGIS mantiene congelado el modelo de audio-lenguaje objetivo y añade una compuerta de riesgo en capas intermedias que dirige condicionalmente adaptadores de seguridad en capas tardías, con escalado en bucle cerrado durante la inferencia.
| Página | Qué contiene |
|---|
| Método | La brecha riesgo-a-rechazo, la compuerta y los adaptadores, la pérdida de entrenamiento, el bucle cerrado. |
| Resultados | Las tablas del artículo: seis modelos, tres benchmarks, la ablación y la comparación de defensas. |
| Análisis más allá del artículo | La brecha riesgo-a-rechazo en los otros cinco modelos, comportamiento de la compuerta, representaciones, la tabla de ablación completa. |
| Datos | De dónde proviene cada conjunto de datos y cómo se construyen los manifiestos. |
| Añadir un modelo | Portar AEGIS a otro LALM escribiendo un adaptador. |
En esta página: Estructura del repositorio · Configuración · Datos · Ejecutar AEGIS · Protocolo · Ablaciones · Pruebas · Citación
aegis/ defense runtime; every script runs from any directory
model_registry.py ModelAdapter interface, registry, Qwen2-Audio and Phi-4 adapters
adapters_gemma_voxtral.py Gemma 4 E4B-it and Voxtral-Small-24B adapters
adapters_ultravox_vita.py Ultravox v0.5 and VITA-1.5 adapters
train_gate_lora.py joint training of the risk gate and the safety adapters
run_defense.py gated inference with closed-loop scaling (--score-only: gate scores)
run_model.py undefended generation
judge.py Llama-Guard-3-8B safety judge
refusal.py refusal regex for the over-refusal metric
extract_hidden.py, analysis/ hidden-state probes for layer selection
scripts/
prepare_data.py downloaded datasets -> manifests (+ in-domain test splits)
run_baseline.sh step 0: undefended responses, judgments, training files
run_aegis.sh steps 1-4 for one protocol (PROTOCOL=indomain or lobo)
run_ablation.sh the Full and Always-on ablations
models.sh per-model gate layer, intervention layers, prompt mode
build_trainsets.py, calibrate_threshold.py, summarize.py
data/splits/ in-domain train/test ids used in the paper
docs/ method, results, analyses, porting guide
tests/ CPU tests of the evaluation protocol
pip install -r requirements.txt
Cada modelo necesita una versión de Transformers que pueda cargarlo. Los repositorios upstream no coinciden, por lo que usamos un entorno por familia de modelos:
MODEL | Modelo base | Id de Hugging Face (variable de anulación) | Capa de compuerta | Capas de intervención | Transformers usados |
|---|---|---|---|---|---|
gemma4_e4b_it | Gemma 4 E4B IT | google/gemma-4-E4B-it (AEGIS_GEMMA4_PATH) | 21 | 25–41 | 5.7.0.dev0 |
phi4_mm | Phi-4-multimodal | microsoft/Phi-4-multimodal-instruct (AEGIS_PHI4_MM_PATH) | 15 | 19–31 | 5.7.0.dev0 |
vita_15 | VITA-1.5 | VITA-MLLM/VITA-1.5 (AEGIS_VITA_PATH) | 15 | 19–27 | 4.43.4 |
qwen2_audio | Qwen2-Audio-7B-Instruct | Qwen/Qwen2-Audio-7B-Instruct (AEGIS_QWEN2_AUDIO_PATH) | 15 | 19–31 | ≥ 4.45 |
ultravox_v05 | Ultravox v0.5 (Llama-3.1-8B) | fixie-ai/ultravox-v0_5-llama-3_1-8b (AEGIS_ULTRAVOX_PATH) | 15 | 19–31 | 4.48.1 |
voxtral_small | Voxtral Small 24B | mistralai/Voxtral-Small-24B-2507 (AEGIS_VOXTRAL_PATH) | 24 | 28–39 | 4.57.6 |
huggingface-cli login, o configure GUARD y
AEGIS_LLAMA31_PATH a copias locales.AEGIS_VITA_REPO a la copia local (por defecto: external/VITA).DEVICE=auto fragmenta el modelo; la compuerta y los adaptadores
siguen las capas que enganchan). Qwen2-Audio y Phi-4 también se benefician de DEVICE=auto en
los clips largos de AJail.Descargue los cinco conjuntos de datos como se describe en data/README.md, luego construya
los manifiestos:
python scripts/prepare_data.py --data-root data --out-dir data/manifests
El script verifica los recuentos de filas usados en el artículo: AJail 1.490, JALM 946, SACRED 1.364,
XSTest 250, Benign_train 215. También escribe las divisiones de prueba en dominio (718 / 499 / 683
filas) a partir de las listas de ids en data/splits/.
Para cada modelo (PY es el Python del entorno de ese modelo; JUDGE_PY puede apuntar a un
entorno diferente para Llama Guard):
MODEL=gemma4_e4b_it PY=python DEVICE=cuda:0 bash scripts/run_baseline.sh # step 0
MODEL=gemma4_e4b_it PROTOCOL=indomain PY=python DEVICE=cuda:0 bash scripts/run_aegis.sh # in-domain
MODEL=gemma4_e4b_it PROTOCOL=lobo PY=python DEVICE=cuda:0 bash scripts/run_aegis.sh # LOBO
Cada etapa es reanudable; vuelva a ejecutar el mismo comando tras una interrupción. Las salidas van a
runs/<model>/:
baseline/ undefended responses; <bench>_judged.jsonl = Llama Guard labels
train/train_{indomain,lobo}_<bench>.jsonl
<protocol>/<bench>/adapter/ router_head.pt, late_adapters.pt, config.json
<protocol>/<bench>/scores/ gate scores on XSTest and on the evaluation set
<protocol>/<bench>/threshold.json
<protocol>/<bench>/defended/ defended responses and their judgments
<protocol>/summary.json unsafe rate, over-refusal, gate AUROC per benchmark
data/splits/. LOBO (dejar un benchmark fuera): AEGIS se entrena con los otros dos
benchmarks y se evalúa en todo el benchmark reservado. En ambas configuraciones los datos evaluados nunca
participan en la selección del umbral, y XSTest nunca se usa para entrenamiento.scripts/build_trainsets.py). El audio benigno es Benign_train con las
propias respuestas no defendidas del modelo como objetivos. Los prompts benignos que parecen dañinos y que el
modelo rechazó en la línea base se descartan. Los objetivos dañinos son plantillas de rechazo genéricas.
El número de clips dañinos es igual al número de clips benignos. Semilla 42.λ_BCE = 1.0, λ_L1 = 0.01.PROMPT_MODE=native); los otros modelos
reciben el audio más un prompt de texto fijo. La compuerta lee un estado oculto dependiente del prompt,
por lo que un adaptador solo es válido bajo el modo de prompt con el que fue entrenado.scripts/calibrate_threshold.py). Los ids de XSTest se ordenan y se dividen
alternadamente en una mitad de validación y una mitad de prueba. El umbral es la puntuación de compuerta más pequeña
cuya sobre-rechazo añadido en la mitad de validación sea como máximo del 10%, contado sobre prompts
que el modelo no defendido respondió.REFUSAL_PHRASE_SET=multi, establecida por run_aegis.sh), por lo que los rechazos en otros idiomas cuentan.scripts/summarize.py): la tasa de inseguridad es la proporción de filas evaluadas que
Llama-Guard-3-8B etiqueta como unsafe; el sobre-rechazo es la proporción de respuestas de XSTest que coinciden con
aegis/refusal.py, reportada sobre los 250 prompts y sobre la mitad de prueba; el AUROC de la compuerta usa
puntuaciones de compuerta sin procesar con los ataques como positivos y XSTest como negativos.MODEL=qwen2_audio VARIANT=full bash scripts/run_ablation.sh # LoRA on all layers, no gate
MODEL=qwen2_audio VARIANT=always_on bash scripts/run_ablation.sh # AEGIS layers, no gate
python -m unittest discover tests
@misc{liao2027aegis,
title = {{AEGIS}: Audio Endogenous Guarding via Internal Signals Against Large Audio-Language Model Jailbreaks},
author = {Liao, Yu-Ling and Chiu, Tzu-Chin and Chen, Zong-You and Tsai, Chi-Lei and Lo, Shao-Yuan},
note = {Submitted to ICASSP 2027},
year = {2026}
}
El código se publica bajo la Licencia MIT. Los modelos base (p. ej. Gemma 4, Llama 3.1 en Ultravox, Llama-Guard-3-8B) y los benchmarks conservan sus propias licencias y términos de uso.