
Pipeline de recherche pour la détection de signaux latents d'exposition aux injections de prompts indirectes dans les LLM agentiques via le sondage des états cachés, incluant la collecte de traces, l'étiquetage, la featurisation et l'entraînement des sondes.
Ceci est le dépôt de code de notre article : Your Agentic LLMs Secretly Encode Latent Signals of Indirect Prompt-Injection Exposure.
Version ArXiv et lien vers l'article : https://arxiv.org/abs/2608.02657
Ce dépôt implémente le pipeline de sondage des signaux latents d'exposition IPI : collecte de traces AgentDojo, étiquetage du risque IPI, featurisation des états cachés, et entraînement/évaluation des sondes d'exposition 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},
}
Commencez par les vérifications compatibles 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 de tests est conçue pour s'exécuter sans ressources GPU. Elle vérifie la sérialisation des messages, l'enregistrement des attaques long-horizon AgentDojo, la logique d'étiquetage, la construction des jeux de données de sondes, les métriques d'entraînement, le comptage des tokens et l'empaquetage du patch vLLM.
Pour la collecte, pointez le collecteur vers un serveur de modèles compatible OpenAI :
export IPI_AWARE_UPSTREAM_BASE_URL=http://127.0.0.1:8000/v1
export IPI_AWARE_UPSTREAM_API_KEY=EMPTY
Pour l'extraction des états cachés et l'entraînement des sondes, installez les dépendances du modèle et la version de PyTorch correspondant à votre environnement CUDA :
uv sync --extra dev --extra models
Le flux de travail principal est exposé via ipi-signal-probe :
Exemple :
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.
Les protocoles d'étiquetage pris en charge sont risk_faced, risk_visible et
risk_actual.
Le répertoire examples/qwen3_5_0_8b/ contient une reproduction exécutable sur petit modèle
et un test d'utilisabilité open source pour Qwen/Qwen3.5-0.8B.
Démarrez huit serveurs vLLM mono-GPU :
examples/qwen3_5_0_8b/serve_qwen3_5_0_8b_8x.sh start
Exécutez un test de fumée :
QWEN3_5_0_8B_MODE=smoke \
examples/qwen3_5_0_8b/run_probe_pipeline.sh start
Exécutez l'exemple complet :
QWEN3_5_0_8B_MODE=full \
examples/qwen3_5_0_8b/run_probe_pipeline.sh start
L'exemple complet utilise 8 serveurs vLLM indépendants TP=1, 8 processus de collecte,
256 workers par processus/serveur, 8 shards de featurisation et des shards d'entraînement de
sonde sur un seul GPU. Consultez examples/qwen3_5_0_8b/README.md pour toutes les variables
d'environnement, les modes de reprise, les paramètres de cache et les commandes de statut/arrêt.
Le backend de featurisation par défaut est transformers_hook. Le backend de capture directe
des états cachés vLLM nécessite l'overlay vLLM 0.19.0 vérifié :
uv sync --frozen --extra dev --extra vllm
uv run python scripts/apply_vllm_ipi_aware_patch.py --check
Suivez docs/vllm_patches_v0.19.0.md avant utilisation :
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
Ce dépôt inclut une copie patchée d'AgentDojo sous vendor/agentdojo.
La version amont d'AgentDojo n'expose pas nativement les attaques long-horizon requises par
l'article : les commandes de collecte doivent donc être exécutées depuis cette copie source,
ou avec vendor/agentdojo/src placé devant toute version amont d'AgentDojo installée dans
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
Ce projet est sous licence Apache-2.0. Voir LICENSE.
| Commande | Objectif |
|---|
collect | Exécute les tâches AgentDojo et enregistre les traces ainsi que les points de décision |
label | Attribue des étiquettes de risque IPI aux points de décision collectés |
featurize | Extrait les états cachés du modèle pour les exemples de sonde |
partition | Construit les ensembles d'entraînement, de validation et d'évaluation |
train | Entraîne des sondes légères sur les caractéristiques des états cachés |
eval | Évalue les sondes entraînées sur les ensembles configurés |
eval-groups | Exécute une évaluation groupée pour les protocoles d'étiquetage et les configurations hors-échantillon |
| Variable | Objectif |
|---|
IPI_AWARE_UPSTREAM_BASE_URL | Point de terminaison de modèle compatible OpenAI utilisé pour la collecte |
IPI_AWARE_UPSTREAM_API_KEY | Clé API pour le point de terminaison amont, ou EMPTY pour un vLLM local |
PYTHONPATH | Placez vendor/agentdojo/src en premier lorsque vous utilisez la source AgentDojo patchée en dehors de ce dépôt |
QWEN3_5_0_8B_MODEL | Remplace le chemin de checkpoint par défaut Qwen/Qwen3.5-0.8B dans les scripts d'exemple |
QWEN3_5_0_8B_CACHE_DIR | Redirige le modèle et les caches locaux vers un système de fichiers de données |
QWEN3_5_0_8B_FEAT_BACKEND | Définissez sur vllm_direct après avoir appliqué l'overlay vLLM |