abedegno/prompt-injection-lora

GitHub: abedegno/prompt-injection-lora

基于Qwen3-0.6B的LoRA微调prompt注入检测模型,使用全公开训练数据,在标准基准上超越同类开源方案并逼近闭源水平。

Stars: 0 | Forks: 0

# prompt-injection-lora 一个基于 **Qwen3-0.6B** 的 LoRA 微调模型,用于 prompt 注入检测。使用完全公开的训练数据,并在标准的 900 条提示 `aiguard-lab` 语料库上进行了评估。 - **Hugging Face 上的训练适配器:** - **完整文章(四篇博客系列):** ## 核心结果 在 [`aiguard-lab`](https://github.com/abedegno/aidr-aiguard-lab) 的 900 条提示 PI(提示注入)子集上: | 模型 | 大小 | F1 | |---|---:|---:| | AIDR (闭源参考,PA4002) | N/A | **0.979** | | **本方案** (Qwen3-0.6B + LoRA + class-tokens) | 600M | **0.9053** | | Sentinel v1 (ModernBERT-large) | 395M | 0.879 | | Vijil DOME (ModernBERT-base) | ~150M | 0.860 | | ProtectAI DeBERTa V2 | 184M | 0.714 | | Meta Prompt-Guard-2 (86M / 22M) | 86M / 22M | ~0.69 | 通过 LoRA + class-tokens 微调,该方案在此语料库上的表现超越了所有已发表的开源分类器,与闭源的当前最佳水平仅相差不到 0.074。它包含约 10M 可训练参数(约占 Qwen3-0.6B 的 1.7%),适配器仅几兆大小,并且无需自定义分类器头即可通过任何 chat-completions 端点提供服务。 每条提示的评估 CSV 位于 [`results/finetune-eval.csv`](results/finetune-eval.csv)。 ## 目录结构 ``` prompt-injection-lora/ ├── scripts/ │ ├── prep_dataset_dome.py # starter mix: WildGuardMix + safe-guard (~95k rows) │ ├── prep_dataset.py # final mix: + SPML / alespalla / verazuo (~111k rows) │ ├── audit_dataset.py # schema / dedup / length sanity check │ ├── eval_baseline.py # eval HF text-classification models (DOME, ProtectAI, etc.) │ ├── eval_finetune_local.py # local eval via transformers + peft │ └── train_modal.py # Modal H100 training entrypoint (Qwen3.5-0.8B base-swap test) ├── results/ │ └── finetune-eval.csv # per-prompt scores from the headline eval └── data/ # gitignored - regenerate via the prep scripts ``` ## 复现 训练数据(约 310 MB)已被 gitignore。可从公开数据源重新生成: ``` # 0. 安装 dev env uv sync # 1. 将 aiguard-lab corpus 克隆为 eval corpus 的同级目录 cd .. && git clone https://github.com/abedegno/aidr-aiguard-lab.git aiguard-lab && cd - # 2. 构建最终的 training corpus(约 11.1 万行;从 Hugging Face + GitHub 拉取) uv run scripts/prep_dataset.py # 3. Audit uv run scripts/audit_dataset.py # 4. 在 Fireworks 上进行 Fine-tune(博客详细介绍了此步骤) firectl supervised-fine-tuning-job create \ --base-model accounts/fireworks/models/qwen3-0p6b \ --dataset pi-final-mix \ --output-model pi-injection-qwen3-0p6b \ --epochs 3 --lora-rank 8 --learning-rate 1e-4 --batch-size-samples 32 \ --learning-rate-warmup-steps 100 # 5. Pull adapter 并在本地评估 uv run scripts/eval_finetune_local.py \ --base-model Qwen/Qwen3-0.6B \ --adapter-dir \ --out results/finetune-eval.csv # 6. (可选)在相同 corpus 上重新测量 open-source baselines uv run scripts/eval_baseline.py --model vijil/vijil_dome_prompt_injection_detection \ --tokenizer answerdotai/ModernBERT-base --injection-label 1 --threshold 0.9 ``` ## 方法概述(一段话) Decoder LLM 没有二分类输出头;其输出是包含约 15 万个 token 的完整词汇表上的分布。这里的技巧是:使用 SFT(监督微调)训练模型,使其在接收“你是一个安全分类器”的提示后,下一个 token 的概率分布会直接坍缩到模型在预训练中已经学过的两个特定 token(`unsafe` 和 `safe`)上。置信度来源于对这两个 token 的 logits 进行的二分类 softmax。结合 LoRA(约 10M 可训练参数,约占基础模型的 1.7%),该方案体积小巧、成本低廉,并且无需自定义分类器头就能通过任何 chat-completions 端点提供服务。完整的分步说明在该博客系列的第 1 部分:。 ## 许可证 Apache 2.0。详见 [`LICENSE`](LICENSE)。
标签:AI安全, AI模型评估, AMSI绕过, Chat Copilot, DLL 劫持, Hugging Face, LoRA微调, NLP, PEFT, Qwen3, SML/LLM防护, Transformer, 凭据扫描, 大语言模型, 威胁检测, 对抗性机器学习, 开源模型, 恶意提示词检测, 文本分类, 深度学习, 网络安全, 逆向工具, 隐私保护