
Framework di difesa che mantiene congelati i modelli audio-linguaggio e aggiunge un gate di rischio a livello intermedio con adattatori di sicurezza a livello tardivo per bloccare i jailbreak audio in fase di inferenza.
Yu-Ling Liao*, Tzu-Chin Chiu*, Zong-You Chen*, Chi-Lei Tsai*, Shao-Yuan Lo — National Taiwan University (*equal contribution)
Codice per la sottomissione a ICASSP 2027. AEGIS mantiene congelato il modello audio-linguaggio di destinazione e aggiunge un gate di rischio a livello intermedio che pilota condizionatamente gli adattatori di sicurezza degli strati finali, con scaling a ciclo chiuso in inferenza.
| Pagina | Cosa contiene |
|---|
| Metodo | Il divario rischio-rifiuto, il gate e gli adattatori, la loss di training, il ciclo chiuso. |
| Risultati | Le tabelle del paper: sei modelli, tre benchmark, l'ablation, e il confronto delle difese. |
| Analisi oltre il paper | Il divario rischio-rifiuto negli altri cinque modelli, il comportamento del gate, le rappresentazioni, la tabella completa dell'ablation. |
| Dati | Da dove proviene ciascun dataset e come vengono costruiti i manifest. |
| Aggiungere un modello | Portare AEGIS su un altro LALM scrivendo un solo adattatore. |
In questa pagina: Struttura del repository · Setup · Dati · Eseguire AEGIS · Protocollo · Ablation · Test · Citazione
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
Ogni modello richiede una versione di Transformers in grado di caricarlo. Gli upstream sono in disaccordo, quindi abbiamo usato un ambiente per famiglia di modelli:
MODEL | Modello base | Hugging Face id (variabile di override) | Gate layer | Intervention layers | Transformers usato |
|---|---|---|---|---|---|
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, oppure impostare GUARD e
AEGIS_LLAMA31_PATH su copie locali.AEGIS_VITA_REPO sul checkout (default: external/VITA).DEVICE=auto sharda il modello; il gate e gli adattatori
seguono gli strati a cui sono agganciati). Anche Qwen2-Audio e Phi-4 traggono beneficio da DEVICE=auto sui
clip lunghi di AJail.Scaricare i cinque dataset come descritto in data/README.md, poi costruire
i manifest:
python scripts/prepare_data.py --data-root data --out-dir data/manifests
Lo script verifica i conteggi di righe usati nel paper: AJail 1.490, JALM 946, SACRED 1.364,
XSTest 250, Benign_train 215. Scrive anche gli split di test in-domain (718 / 499 / 683
righe) dalle liste di id in data/splits/.
Per ciascun modello (PY è il Python dell'ambiente di quel modello; JUDGE_PY può puntare a un
ambiente diverso per 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
Ogni fase è ripristinabile; rieseguire lo stesso comando dopo un'interruzione. Gli output vanno in
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 (leave one benchmark out): AEGIS viene addestrato sugli altri due
benchmark e valutato sull'intero benchmark held-out. In entrambe le impostazioni i dati valutati
non prendono mai parte alla selezione della soglia, e XSTest non viene mai usato per il training.scripts/build_trainsets.py). L'audio benigno è Benign_train con le
risposte undefended del modello stesso come target. I prompt benigni che sembrano dannosi e che il
modello ha rifiutato al baseline vengono scartati. I target dannosi sono template di rifiuto generici.
Il numero di clip dannosi è uguale al numero di clip benigni. Seed 42.λ_BCE = 1.0, λ_L1 = 0.01.PROMPT_MODE=native); gli altri modelli
ricevono l'audio più un prompt testuale fisso. Il gate legge uno hidden state dipendente dal
prompt, quindi un adattatore è valido solo con la modalità prompt con cui è stato addestrato.scripts/calibrate_threshold.py). Gli id di XSTest vengono ordinati e divisi
alternatamente in una metà di validazione e una metà di test. La soglia è il più piccolo gate
score la cui over-refusal aggiunta sulla metà di validazione è al massimo del 10%, contata sui prompt
a cui il modello undefended ha risposto.REFUSAL_PHRASE_SET=multi, impostata da run_aegis.sh), così i rifiuti non in inglese contano.scripts/summarize.py): l'unsafe rate è la quota di righe valutate che
Llama-Guard-3-8B etichetta come unsafe; l'over-refusal è la quota di risposte XSTest che corrispondono
a aegis/refusal.py, riportata su tutti i 250 prompt e sulla metà di test; il gate AUROC usa
i gate score grezzi con gli attacchi come positivi e XSTest come negativi.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}
}
Il codice è rilasciato sotto la MIT License. I modelli base (ad es. Gemma 4, Llama 3.1 in Ultravox, Llama-Guard-3-8B) e i benchmark mantengono le proprie licenze e condizioni d'uso.