# adaptive-attack detectors (DataSentinel / canary) 12 个更新后检测器(D1),每个攻击家族一个。给 adaptive attack 实验(GCG / TAP)用。 ## 下载 与本项目 base 权重同样的用法(`hf download ... --local-dir <目标目录>`): ```bash hf auth login hf download updateattacks/pi-detector-attack-targets --local-dir artifacts/attack_targets ``` 拉下来之后目录长这样: ``` artifacts/attack_targets/ MANIFEST.json promptsleuth_aug__Completion_Attack/ adapter_config.json promptsleuth_aug__Context_Tampering/ adapter_model.safetensors ... canary_config.json browsesafe_clean__multilanguage/ README.md ``` base 模型 `mistralai/Mistral-7B-v0.1` 会在加载时自动从 HF 拉(adapter_config.json 里记着)。 ## 用法 命令里传 `--detector_root`,各家族的权重自动按 `/__/` 找: ```bash python -m attack.tap.cli --detector_root artifacts/attack_targets \ --dataset promptsleuth_aug --family Instruction_Wrapping ... ``` 也可以直接加载单个: ```python from detectors.canary import CanaryDetector det = CanaryDetector.from_pretrained( "artifacts/attack_targets/promptsleuth_aug__Instruction_Wrapping", device="cuda") det.detect(text) # 1 = 判成攻击,0 = 判成干净(= 攻击绕过成功) ``` ## 是什么 每个目录是一个 **LoRA adapter**(base = `mistralai/Mistral-7B-v0.1`)。 训练配方:`--init_from scratch`,3 轮 × 500 步的 canary minimax 课程,agent 增强、k=1、n_gen=63。 每个家族的 seed / run 是从 3 seed × 3 run 里按 **new-FNR 最低**(= 最强的更新后检测器)选出来的, 具体数字见 `MANIFEST.json`。 ## 注意 * `canary_config.json` 不能删 —— 里面是训练时约定的 `separator`,推理格式必须与训练一致, 缺了会静默退回默认值并让误报率飙升(干净样本命中率从 40/40 掉到 13/40)。 * 目录名 `__` 是 `--detector_root` 的查找约定,别改名。