
خط أنابيب بحثي لكشف إشارات التعرض الخفية لحقن التعليمات غير المباشرة (indirect prompt injection) في نماذج اللغات الكبيرة العاملة بالوكالة (agentic LLMs) عبر استكشاف الحالات الخفية، بما في ذلك جمع المسارات، والوسم، واستخراج الميزات، وتدريب المستكشف.
هذا هو مستودع الكود الخاص بورقتنا البحثية: Your Agentic LLMs Secretly Encode Latent Signals of Indirect Prompt-Injection Exposure.
نسخة ArXiv ورابط الورقة البحثية: https://arxiv.org/abs/2608.02657
ينفّذ هذا المستودع خط أنابيب الاستكشاف (probing) للإشارات الكامنة للتعرض لـ IPI: جمع تتبعات AgentDojo، ووضع علامات مخاطر IPI، واستخلاص السمات من الحالات المخفية، وتدريب/تقييم مسبار التعرض لـ 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},
}
ابدأ أولًا بالفحوصات المتوافقة مع وحدة المعالجة المركزية (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
صُمّمت مجموعة الاختبارات لتعمل دون الحاجة إلى موارد GPU. وهي تتحقق من تسلسل الرسائل الأساسي، وتسجيل هجمات AgentDojo طويلة الأفق، ومنطق وضع العلامات، وبناء مجموعة بيانات المسبار، ومقاييس التدريب، واحتساب الرموز، وتغليف تصحيحات vLLM.
لجمع البيانات، وجّه الجامع (collector) إلى خادم نموذج متوافق مع OpenAI:
export IPI_AWARE_UPSTREAM_BASE_URL=http://127.0.0.1:8000/v1
export IPI_AWARE_UPSTREAM_API_KEY=EMPTY
لاستخراج الحالات المخفية وتدريب المسبار، ثبّت تبعيات النماذج وبناء PyTorch المطابق لبيئة CUDA لديك:
uv sync --extra dev --extra models
يتاح سير العمل الرئيسي عبر ipi-signal-probe:
مثال:
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.
بروتوكولات وضع العلامات المدعومة هي risk_faced وrisk_visible
وrisk_actual.
يحتوي دليل examples/qwen3_5_0_8b/ على إعادة إنتاج قابلة للتشغيل بنموذج صغير
واختبار قابلية استخدام مفتوح المصدر لنموذج Qwen/Qwen3.5-0.8B.
شغّل ثمانية خوادم vLLM، كل منها بوحدة معالجة رسومية واحدة (GPU):
examples/qwen3_5_0_8b/serve_qwen3_5_0_8b_8x.sh start
شغّل اختبارًا سريعًا (smoke test):
QWEN3_5_0_8B_MODE=smoke \
examples/qwen3_5_0_8b/run_probe_pipeline.sh start
شغّل المثال الكامل:
QWEN3_5_0_8B_MODE=full \
examples/qwen3_5_0_8b/run_probe_pipeline.sh start
يستخدم المثال الكامل 8 خوادم vLLM مستقلة بإعداد TP=1، و8 عمليات جامع، و256 عاملًا
لكل عملية/خادم، و8 أجزاء (shards) لاستخلاص السمات، وأجزاء لتدريب المسبار،
كل منها بوحدة معالجة رسومية واحدة. راجع examples/qwen3_5_0_8b/README.md
للاطلاع على جميع متغيرات البيئة، وأوضاع الاستئناف، وإعدادات التخزين المؤقت،
وأوامر الحالة/الإيقاف.
الواجهة الخلفية الافتراضية لاستخلاص السمات هي transformers_hook. تتطلب الواجهة
الخلفية للالتقاط المباشر للحالات المخفية عبر vLLM طبقة vLLM 0.19.0 المرفقة
(overlay):
uv sync --frozen --extra dev --extra vllm
uv run python scripts/apply_vllm_ipi_aware_patch.py --check
اتبع docs/vllm_patches_v0.19.0.md قبل الاستخدام:
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
يضمّن هذا المستودع نسخة معدّلة (patched) من AgentDojo تحت vendor/agentdojo.
لا يوفر AgentDojo الأصلي (upstream) الهجمات طويلة الأفق المطلوبة في الورقة
البحثية بشكل أصلي، لذا يجب تشغيل أوامر الجمع من هذه النسخة المصدرية، أو بوضع
vendor/agentdojo/src قبل أي نسخة AgentDojo أصلية مثبتة في 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
هذا المشروع مرخّص بموجب Apache-2.0. راجع LICENSE.
| الأمر | الغرض |
|---|
collect | تشغيل مهام AgentDojo وحفظ التتبعات ونقاط القرار |
label | تعيين علامات مخاطر IPI لنقاط القرار المجمَّعة |
featurize | استخراج الحالات المخفية للنموذج لأمثلة المسبار |
partition | بناء تقسيمات التدريب/التحقق/التقييم |
train | تدريب مسبارات خفيفة على سمات الحالات المخفية |
eval | تقييم المسبارات المدربة على التقسيمات المكوَّنة |
eval-groups | تشغيل تقييم مجمّع لبروتوكولات وضع العلامات والإعدادات المستبقاة |
| المتغير | الغرض |
|---|
IPI_AWARE_UPSTREAM_BASE_URL | نقطة وصول نموذج متوافقة مع OpenAI تستخدمها عملية الجمع |
IPI_AWARE_UPSTREAM_API_KEY | مفتاح API لنقطة الوصول الأصلية (upstream)، أو EMPTY لخوادم vLLM المحلية |
PYTHONPATH | ضع vendor/agentdojo/src أولًا عند استخدام مصدر AgentDojo المعدّل خارج هذه النسخة المصدرية |
QWEN3_5_0_8B_MODEL | تجاوز مسار نقطة التفتيش الافتراضية لنموذج Qwen/Qwen3.5-0.8B في نصوص المثال البرمجية |
QWEN3_5_0_8B_CACHE_DIR | أعد توجيه ذاكرات التخزين المؤقت للنموذج والمحلية إلى نظام ملفات البيانات |
QWEN3_5_0_8B_FEAT_BACKEND | اضبطه على vllm_direct بعد تطبيق طبقة vLLM (overlay) |