
Pipeline di ricerca per rilevare segnali latenti di esposizione a prompt injection indiretti in LLM agentici tramite sonde sugli stati nascosti, inclusi raccolta di tracce, etichettatura, estrazione di feature e addestramento delle sonde.
Questo è il repository del codice per il nostro articolo: Your Agentic LLMs Secretly Encode Latent Signals of Indirect Prompt-Injection Exposure.
Versione arXiv e link all'articolo: https://arxiv.org/abs/2608.02657
Questo repository implementa la pipeline di probing per i segnali latenti di esposizione IPI: raccolta delle tracce AgentDojo, etichettatura del rischio IPI, featurizzazione degli stati nascosti e addestramento/valutazione della sonda per l'esposizione IPI.
@misc{dong2026agenticllmssecretlyencode,
title={Your Agentic LLMs Secretly Encode Latent Signals of Indirect Prompt-Injection Exposure},
author={Jianshuo Dong and Yiming Liu and Maosen Zhang and Nan Deng and Xu Peng and Xiaoping Zhang and Tianwei Zhang and Jie Zhang and Han Qiu},
year={2026},
eprint={2608.02657},
archivePrefix={arXiv},
primaryClass={cs.CR},
url={https://arxiv.org/abs/2608.02657},
}
Inizia dai controlli adatti alla CPU:
git clone https://github.com/jianshuod/IPI-exposure-signal.git
cd IPI-exposure-signal
# Install uv if needed.
curl -LsSf https://astral.sh/uv/install.sh | sh
# This repository targets Python 3.12.
uv python install 3.12
uv sync --extra dev
uv run pytest
La suite di test è progettata per essere eseguita senza risorse GPU. Verifica la serializzazione dei messaggi, la registrazione degli attacchi AgentDojo a lungo orizzonte, la logica di etichettatura, la costruzione del dataset della sonda, le metriche di addestramento, la contabilità dei token e l'impacchettamento della patch vLLM.
Per la raccolta, punta il collector a un server di modelli compatibile con OpenAI:
export IPI_AWARE_UPSTREAM_BASE_URL=http://127.0.0.1:8000/v1
export IPI_AWARE_UPSTREAM_API_KEY=EMPTY
Per l'estrazione degli stati nascosti e l'addestramento della sonda, installa le dipendenze del modello e la build di PyTorch compatibile con il tuo ambiente CUDA:
uv sync --extra dev --extra models
Il flusso di lavoro principale è esposto tramite ipi-signal-probe:
Esempio:
uv run ipi-signal-probe collect \
--suite workspace \
--attack direct \
--injected \
--max-cases 4 \
--results-dir results/probe_traces/v2
uv run ipi-signal-probe label \
--root results/probe_traces/v2/<run-name> \
--labeling-protocol risk_faced
uv run ipi-signal-probe featurize \
--root results/probe_traces/v2/<run-name> \
--model Qwen/Qwen3-8B \
--backend transformers_hook \
--model-family qwen3 \
--selected-position -1
uv run ipi-signal-probe partition \
--root results/probe_traces/v2/<run-name> \
--dataset broad
# Training consumes a JSON config. The Qwen example below generates the
# train/eval configs used for its full run.
I protocolli di etichettatura supportati sono risk_faced, risk_visible e
risk_actual.
La directory examples/qwen3_5_0_8b/ contiene una riproduzione eseguibile con un piccolo modello
e un test di usabilità open source per Qwen/Qwen3.5-0.8B.
Avvia otto server vLLM con una GPU ciascuno:
examples/qwen3_5_0_8b/serve_qwen3_5_0_8b_8x.sh start
Esegui uno smoke test:
QWEN3_5_0_8B_MODE=smoke \
examples/qwen3_5_0_8b/run_probe_pipeline.sh start
Esegui l'esempio completo:
QWEN3_5_0_8B_MODE=full \
examples/qwen3_5_0_8b/run_probe_pipeline.sh start
L'esempio completo usa 8 server vLLM indipendenti con TP=1, 8 processi di raccolta,
256 worker per processo/server, 8 shard di featurizzazione e shard di addestramento della sonda
con una GPU ciascuno. Vedi examples/qwen3_5_0_8b/README.md per tutte le variabili d'ambiente,
le modalità di ripresa, le impostazioni della cache e i comandi di stato/stop.
Il backend di featurizzazione predefinito è transformers_hook. Il backend di acquisizione diretta
degli stati nascosti vLLM richiede l'overlay di vLLM 0.19.0 incluso:
uv sync --frozen --extra dev --extra vllm
uv run python scripts/apply_vllm_ipi_aware_patch.py --check
Segui docs/vllm_patches_v0.19.0.md prima dell'uso:
uv run ipi-signal-probe featurize \
--root results/probe_traces/v2/<run-name> \
--model Qwen/Qwen3-8B \
--backend vllm_direct \
--model-family qwen3 \
--selected-position -1
Questo repository incorpora un checkout patchato di AgentDojo sotto vendor/agentdojo.
AgentDojo upstream non espone in modo nativo gli attacchi a lungo orizzonte richiesti
dall'articolo, quindi i comandi di raccolta devono essere eseguiti da questo checkout del sorgente, oppure
con vendor/agentdojo/src posizionato davanti a qualsiasi AgentDojo upstream installato su
PYTHONPATH.
IPI-exposure-signal/
├── ipi_aware/
│ ├── data_collection/ # AgentDojo traces and decision points
│ ├── message_content.py # Chat-message normalization used by collection/features
│ └── probes/ # labels, features, partitions, training, eval
├── examples/
│ └── qwen3_5_0_8b/ # 8-GPU Qwen/Qwen3.5-0.8B reproduction scripts
├── patches/ # vLLM 0.19.0 hidden-state capture overlay
├── vendor/agentdojo/ # patched AgentDojo source for long-horizon attacks
├── docs/ # vLLM patch notes
├── scripts/ # utility scripts
└── tests/ # CPU-friendly regression tests
Questo progetto è concesso in licenza sotto Apache-2.0. Vedi LICENSE.
| Comando | Scopo |
|---|
collect | Esegue le attività AgentDojo e salva le tracce e i punti di decisione |
label | Assegna etichette di rischio IPI ai punti di decisione raccolti |
featurize | Estrae gli stati nascosti del modello per gli esempi della sonda |
partition | Crea le suddivisioni train/validation/evaluation |
train | Addestra sonde leggere sulle caratteristiche degli stati nascosti |
eval | Valuta le sonde addestrate sulle suddivisioni configurate |
eval-groups | Esegue una valutazione raggruppata per i protocolli di etichettatura e le impostazioni hold-out |
| Variabile | Scopo |
|---|
IPI_AWARE_UPSTREAM_BASE_URL | Endpoint del modello compatibile OpenAI usato per la raccolta |
IPI_AWARE_UPSTREAM_API_KEY | Chiave API per l'endpoint a monte, oppure EMPTY per vLLM locale |
PYTHONPATH | Mettere vendor/agentdojo/src al primo posto quando si usa il sorgente AgentDojo patchato al di fuori di questo checkout |
QWEN3_5_0_8B_MODEL | Sostituisce il percorso predefinito del checkpoint Qwen/Qwen3.5-0.8B negli script di esempio |
QWEN3_5_0_8B_CACHE_DIR | Reindirizza il modello e le cache locali a un filesystem dati |
QWEN3_5_0_8B_FEAT_BACKEND | Impostare su vllm_direct dopo aver applicato l'overlay vLLM |