
Expériences pour la suppression de la chaîne de pensée par jetons de contrôle et les attaques de laxisme d'analyse syntaxique sur les agents LLM utilisant des outils
Code et mesures journalisées pour une étude de deux attaques au niveau de l'entrée sur des agents de modèles de langage utilisant des outils. La première attaque ajoute une courte chaîne des propres jetons de contrôle de canal d'un modèle à une entrée non fiable ; le tokenizer la lit comme un canal de raisonnement déjà fermé, de sorte que le modèle n'émet aucune chaîne de pensée et passe directement à l'appel d'outil. Cela supprime la trace de raisonnement dont dépend un moniteur et, sur les requêtes que le modèle refuserait autrement, convertit les refus en actions accomplies. Le second résultat est que le fait qu'une génération d'appel d'outil identique se déclenche réellement est décidé par le parseur du harnais plutôt que par le modèle, de sorte que la robustesse de l'agent est une propriété conjointe du modèle et de son harnais de décodage et d'analyse.
Chaque expérience s'exécute en pleine précision (bfloat16) avec un décodage glouton via le bac à sable d'outils publié, et le JSON journalisé sous results/ est produit entièrement par les scripts présents ici.
Article : « Control-Token Injection Suppresses Chain-of-Thought and Defeats Reasoning-Based Oversight in Tool-Using Agents ».
requirements.txt (aicomp-sdk 3.1.2, transformers 5.16.1, gymnasium 0.29, openai, openai-harmony).openai/gpt-oss-20b, google/gemma-4-26B-A4B-it, deepseek-ai/DeepSeek-R1-Distill-Qwen-7B, Qwen/Qwen3-4B-Thinking-2507.Installation :
python3 -m venv --system-site-packages .venv
source .venv/bin/activate
pip install -r requirements.txt
# download the target models (needs an authenticated Hugging Face CLI)
hf download openai/gpt-oss-20b
hf download google/gemma-4-26B-A4B-it
hf download deepseek-ai/DeepSeek-R1-Distill-Qwen-7B
hf download Qwen/Qwen3-4B-Thinking-2507
gpt-oss-20b s'exécute sous transformers 4.57 ou 5.16 ; gemma-4-26B-A4B-it est un modèle multimodal qui nécessite transformers 5.16. La mesure de suppression du raisonnement de gpt-oss est identique sous les deux versions.
Tous les scripts d'expérience importent le harnais partagé, donc exécutez-les avec experiments dans le chemin. Chaque script écrit sa sortie dans results/.
export PYTHONPATH=experiments
# reproduction gate: the forge empties the gpt-oss analysis channel while the call still fires
python scripts/h200_gate.py
# E1: chain-of-thought suppression at scale
python experiments/e1_cot_suppression.py
# E2: monitor evasion and refusal bypass (generate traces, then score three monitors)
python experiments/e2b_generate.py
JUDGE=gemma python experiments/e2b_judge.py
# E3: parser leniency
python experiments/e3a_parser_leniency.py # deterministic, no model
MODEL=gpt_oss python experiments/e3b_end2end.py
MODEL=gemma python experiments/e3b_end2end.py
python experiments/e3c_gemma_parser_ab.py # same model, two parsers
# E4: generality across reasoning models
MODEL=deepseek-ai/DeepSeek-R1-Distill-Qwen-7B TAG=deepseek python experiments/e4_generality.py
MODEL=Qwen/Qwen3-4B-Thinking-2507 TAG=qwen3 python experiments/e4_generality.py
# E5: defenses
python experiments/e5_defenses.py # input sanitization
python experiments/e5_d2_parser_hardening.py # parser hardening, deterministic
# W1 to W3: ablation, token-level grounding, indirect delivery, cross-stack parser
python experiments/w1_forge_variants.py
python experiments/w1_tokenlevel.py
python experiments/w2_indirect.py
python experiments/w3_truncation_sweep.py
# adaptive empty-reasoning evasion (raw traces, effort sweep, decoy attack, monitor matrix)
python experiments/ad_traces_effort.py
python experiments/ad_decoy.py
python experiments/ad_decoy_judge.py
# regenerate the results figure from the logged JSON
python scripts/make_results_fig.py
experiments/harness.py shared harness: build an agent, run a message through the
sandbox gym env, and read back the reasoning channel, the
fired tool events, and the predicates
experiments/e1_*.py chain-of-thought suppression at scale
experiments/e2*_*.py monitor evasion and refusal bypass (generate, then judge)
experiments/e3*_*.py parser leniency: deterministic, end-to-end, and A/B
experiments/e4_*.py generality across reasoning models
experiments/e5_*.py defenses: sanitization and parser hardening
experiments/w1_*.py ablation of the injected string and token-level grounding
experiments/w2_*.py indirect delivery and broader action types
experiments/w3_*.py truncation robustness of the attack
experiments/ad_*.py adaptive empty-reasoning evasion and raw traces
experiments/*_probe.py, *_debug.py supporting probes used while building the study
scripts/h200_gate.py the reproduction gate
scripts/make_results_fig.py the results figure
results/*.json logged measurements produced by the scripts above
| expérience | mesure |
|---|---|
| E1 (gpt-oss-20b) | canal de raisonnement de 52,5 à 0 jetons (vide sur 55 tâches sur 55), l'action non sûre se déclenche à 100 pour cent |
| Évasion du moniteur E2 | les moniteurs à règles et à modèle de langage détectent 100 pour cent sans l'injection, 0 pour cent avec ; 39,6 pour cent des refus convertis en exfiltrations accomplies |
| A/B parseur E3c (Gemma) | même modèle et décodage glouton : le parseur regex déclenche 24 sur 24, le parseur de processeur natif déclenche 0 sur 24 |
| Généralité E4 | gpt-oss vulnérable via injection d'entrée ; conformité de Qwen3-Thinking de 0,08 à 1,00 sous la primitive de canal fermé ; DeepSeek robuste |
| Défenses E5 | le désinfectant remplacer-par-espace neutralise l'attaque ; la suppression naïve échoue sur des entrées bénignes ; le durcissement du parseur rejette l'appel tronqué |
| adaptatif | le fil-piège à raisonnement vide intercepte la forge vide mais est déjoué par un leurre bénin d'une ligne qui se déclenche à 100 pour cent |
Le décodage est glouton, donc chaque taux est déterministe par entrée et les intervalles rapportés reflètent l'échantillon fini de tâches. La graine 123 et une boucle d'interaction à huit sauts correspondent au bac à sable publié. Les révisions des modèles cibles et la version de transformers sont épinglées dans requirements.txt et indiquées dans chaque script.
Licence MIT. Voir LICENSE.