
Estrutura de defesa que mantém os modelos de áudio-linguagem congelados e adiciona um portão de risco em camada intermediária com adaptadores de segurança em camadas finais para bloquear jailbreaks de áudio na inferência.
Yu-Ling Liao*, Tzu-Chin Chiu*, Zong-You Chen*, Chi-Lei Tsai*, Shao-Yuan Lo — Universidade Nacional de Taiwan (*contribuição igualitária)
Código para a submissão ao ICASSP 2027. O AEGIS mantém o modelo de áudio-linguagem alvo congelado e adiciona um portão de risco em camada intermediária que aciona condicionalmente adaptadores de segurança em camadas tardias, com escalonamento em malha fechada na inferência.
| Página | O que contém |
|---|
| Método | A lacuna risco-para-recusa, o portão e os adaptadores, a perda de treinamento, a malha fechada. |
| Resultados | As tabelas do artigo: seis modelos, três benchmarks, a ablação e a comparação de defesa. |
| Análises além do artigo | A lacuna risco-para-recusa nos outros cinco modelos, comportamento do portão, representações, a tabela completa de ablação. |
| Dados | De onde vem cada conjunto de dados e como os manifestos são construídos. |
| Adicionando um modelo | Portar o AEGIS para outro LALM escrevendo um adaptador. |
Nesta página: Estrutura do repositório · Configuração · Dados · Executando o AEGIS · Protocolo · Ablações · Testes · Citação
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 precisa de uma versão do Transformers que consiga carregá-lo. Os upstreams divergem, então usamos um ambiente por família de modelo:
MODEL | Modelo base | Id do Hugging Face (variável de substituição) | Camada do portão | Camadas de intervenção | Transformers usado |
|---|---|---|---|---|---|
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, ou defina GUARD e
AEGIS_LLAMA31_PATH para cópias locais.AEGIS_VITA_REPO para o checkout (padrão: external/VITA).DEVICE=auto fragmenta o
modelo; o portão e os adaptadores seguem as camadas que eles interceptam). Qwen2-Audio e Phi-4
também se beneficiam de DEVICE=auto nos clipes longos do AJail.Baixe os cinco conjuntos de dados conforme descrito em data/README.md, depois construa
os manifestos:
python scripts/prepare_data.py --data-root data --out-dir data/manifests
O script verifica as contagens de linhas usadas no artigo: AJail 1.490, JALM 946, SACRED 1.364,
XSTest 250, Benign_train 215. Ele também escreve as divisões de teste in-domain (718 / 499 / 683
linhas) a partir das listas de ids em data/splits/.
Para cada modelo (PY é o Python do ambiente daquele modelo; JUDGE_PY pode apontar para um
ambiente diferente para o 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 estágio é retomável; execute novamente o mesmo comando após uma interrupção. As saídas vão para
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): O AEGIS é treinado nos
outros dois benchmarks e avaliado no benchmark reservado completo. Em ambas as configurações, os
dados avaliados nunca participam da seleção de limiar, e o XSTest nunca é usado para treinamento.scripts/build_trainsets.py). O áudio benigno é o Benign_train com as
próprias respostas não defendidas do modelo como alvos. Prompts benignos que parecem prejudiciais
e que o modelo recusou na linha de base são descartados. Os alvos prejudiciais são templates
genéricos de recusa. O número de clipes prejudiciais é igual ao número de clipes benignos. Seed 42.λ_BCE = 1.0, λ_L1 = 0.01.PROMPT_MODE=native); os outros modelos recebem o
áudio mais um prompt de texto fixo. O portão lê um estado oculto dependente do prompt, então um
adaptador é válido apenas sob o modo de prompt com o qual foi treinado.scripts/calibrate_threshold.py). Os ids do XSTest são ordenados e divididos
alternadamente em uma metade de validação e uma metade de teste. O limiar é a menor pontuação de
portão cuja sobre-recusa adicionada na metade de validação é de no máximo 10%, contada em prompts
que o modelo não defendido respondeu.REFUSAL_PHRASE_SET=multi, definida por run_aegis.sh), então recusas em outros idiomas contam.scripts/summarize.py): taxa de insegurança é a proporção de linhas avaliadas que o
Llama-Guard-3-8B rotula como unsafe; sobre-recusa é a proporção de respostas do XSTest que
correspondem a aegis/refusal.py, relatada sobre todos os 250 prompts e sobre a metade de teste;
AUROC do portão usa pontuações brutas do portão com ataques como positivos e 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}
}
O código é liberado sob a Licença MIT. Os modelos base (por exemplo, Gemma 4, Llama 3.1 no Ultravox, Llama-Guard-3-8B) e os benchmarks mantêm suas próprias licenças e termos de uso.