
Pipeline de investigación para detectar señales latentes de exposición a inyección indirecta de prompts en LLM agénticos mediante sondaje de estados ocultos, que incluye recopilación de trazas, etiquetado, extracción de características y entrenamiento de sondas.
Este es el repositorio de código de nuestro artículo: Your Agentic LLMs Secretly Encode Latent Signals of Indirect Prompt-Injection Exposure.
Versión en arXiv y enlace al artículo: https://arxiv.org/abs/2608.02657
Este repositorio implementa el pipeline de sondeo para señales latentes de exposición a IPI: recopilación de trazas de AgentDojo, etiquetado de riesgo IPI, extracción de características de estados ocultos y entrenamiento/evaluación de sondas de exposición a 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},
}
Comience con las comprobaciones compatibles con CPU primero:
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 pruebas está diseñada para ejecutarse sin recursos de GPU. Comprueba la serialización de mensajes, el registro de ataques de largo horizonte de AgentDojo, la lógica de etiquetado, la construcción de conjuntos de datos de sondas, las métricas de entrenamiento, el conteo de tokens y el empaquetado del parche de vLLM.
Para la recopilación, apunte el recopilador a un servidor de modelos compatible con OpenAI:
export IPI_AWARE_UPSTREAM_BASE_URL=http://127.0.0.1:8000/v1
export IPI_AWARE_UPSTREAM_API_KEY=EMPTY
Para la extracción de estados ocultos y el entrenamiento de sondas, instale las dependencias de modelos y la compilación de PyTorch que coincida con su entorno CUDA:
uv sync --extra dev --extra models
El flujo de trabajo principal se expone mediante ipi-signal-probe:
Ejemplo:
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.
Los protocolos de etiquetado admitidos son risk_faced, risk_visible y
risk_actual.
El directorio examples/qwen3_5_0_8b/ contiene una reproducción ejecutable con un modelo pequeño y una prueba de usabilidad de código abierto para Qwen/Qwen3.5-0.8B.
Inicie ocho servidores vLLM con una GPU cada uno:
examples/qwen3_5_0_8b/serve_qwen3_5_0_8b_8x.sh start
Ejecute una prueba de humo:
QWEN3_5_0_8B_MODE=smoke \
examples/qwen3_5_0_8b/run_probe_pipeline.sh start
Ejecute el ejemplo completo:
QWEN3_5_0_8B_MODE=full \
examples/qwen3_5_0_8b/run_probe_pipeline.sh start
El ejemplo completo utiliza 8 servidores vLLM independientes con TP=1, 8 procesos de recopilación, 256 workers por proceso/servidor, 8 shards de featurización y shards de entrenamiento de sondas con una GPU. Consulte examples/qwen3_5_0_8b/README.md para conocer todas las variables de entorno, modos de reanudación, ajustes de caché y comandos de estado/detención.
El backend de caracterización predeterminado es transformers_hook. El backend de captura directa de estados ocultos de vLLM requiere el overlay de vLLM 0.19.0 incluido:
uv sync --frozen --extra dev --extra vllm
uv run python scripts/apply_vllm_ipi_aware_patch.py --check
Siga docs/vllm_patches_v0.19.0.md antes de usar:
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
Este repositorio incluye un checkout de AgentDojo parcheado en vendor/agentdojo. El AgentDojo original (upstream) no expone de forma nativa los ataques de largo horizonte requeridos por el artículo, por lo que los comandos de recopilación deben ejecutarse desde este checkout de código fuente, o con vendor/agentdojo/src colocado por delante de cualquier AgentDojo instalado en 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
Este proyecto está licenciado bajo Apache-2.0. Consulte LICENSE.
| Comando | Propósito |
|---|
collect | Ejecutar tareas de AgentDojo y guardar trazas más puntos de decisión |
label | Asignar etiquetas de riesgo IPI a los puntos de decisión recopilados |
featurize | Extraer estados ocultos del modelo para los ejemplos de sonda |
partition | Crear particiones de entrenamiento/validación/evaluación |
train | Entrenar sondas ligeras sobre las características de los estados ocultos |
eval | Evaluar las sondas entrenadas en las particiones configuradas |
eval-groups | Ejecutar evaluación agrupada para protocolos de etiquetado y configuraciones reservadas (held-out) |
| Variable | Propósito |
|---|
IPI_AWARE_UPSTREAM_BASE_URL | Endpoint de modelo compatible con OpenAI usado para la recopilación |
IPI_AWARE_UPSTREAM_API_KEY | Clave de API para el endpoint ascendente, o EMPTY para vLLM local |
PYTHONPATH | Coloque vendor/agentdojo/src al principio cuando use el código fuente de AgentDojo parcheado fuera de este repositorio |
QWEN3_5_0_8B_MODEL | Sobrescribir la ruta predeterminada del checkpoint de Qwen/Qwen3.5-0.8B en los scripts de ejemplo |
QWEN3_5_0_8B_CACHE_DIR | Redirigir los cachés de modelo y locales a un sistema de archivos de datos |
QWEN3_5_0_8B_FEAT_BACKEND | Establecer en vllm_direct después de aplicar el overlay de vLLM |