论文(arXiv)
演示
模型(Hugging Face)
基准数据集(Hugging Face)

AI 文本检测器越来越多地用于高风险场景,但它们对保持语义的对抗性改写的鲁棒性仍不确定。我们提出了 StealthRL,一个通过自适应改述攻击对 AI 文本检测器进行压力测试的强化学习框架。StealthRL 针对检测器集成训练改述策略,同时保留语义内容,然后评估对留出检测器家族的迁移性。在完整过滤后的 MAGE 测试池(15,310 条人类样本 / 14,656 条 AI 样本)上,StealthRL 将平均 AUROC 从 0.79 降低到 0.43,并在 RoBERTa、Fast-DetectGPT、Binoculars 和 MAGE 上实现了 0.024 的平均 TPR@1%FPR。该攻击可迁移到两个未在训练中使用的检测器,暴露的是共享漏洞而非单一检测器失效。我们进一步分析了检测器得分分布,并使用 E5、BERTScore 和基于 LLM 的 Likert 评分评估质量。我们的结果表明,当前 AI 文本检测器在现实的改写压力下仍然脆弱,并提供了一个可复现的对抗鲁棒性评估协议。
本仓库是 StealthRL 背后的研究和工程代码库。它包含:
该仓库旨在为以下研究人员提供一个有用的起点:
stealthrl/:训练代码、检测器封装、奖励、数据工具以及原始的 StealthBench 包eval/:用于论文结果的研究级评估测试框架scripts/:用于训练、评估、编排、绘图和工具的可运行入口点configs/:用于训练、评估和消融实验的 YAML 配置figures/:管线图和静态资源tests/:集成测试与健全性检查analysis/:临时分析辅助工具和一次性工具python -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
根据您想运行项目的哪些部分,您可能还需要:
pip install tinker
pip install openai
pip install vllm
注意:
M2 所使用的云后端 StealthRL 检查点推理路径需要 tinker。openai。vllm 进行快速的本地生成。仓库使用的典型环境变量:
export HF_HOME=$HOME/.cache/huggingface
export TRANSFORMERS_CACHE=$HF_HOME
export OPENAI_API_KEY=...
export TINKER_API_KEY=...
对于分阶段的论文评估管线,我们使用了 env 文件加上检查点描述符 JSON。公开脚本允许您显式覆盖这两个路径:
python scripts/run_full_mage_research_eval.py \
--env-file ~/.config/stealthrl/eval.env \
--checkpoint-json ~/.config/stealthrl/m2_checkpoint.json
python scripts/run_eval.py --quick
python scripts/run_stealthbench.py --config configs/stealthbench.yaml
该脚本现在会加载配置的文本文件,运行配置的检测器,保存 CSV 输出,并生成对比图。旧的仅含 TODO 的存根已被移除。
python scripts/run_full_mage_research_eval.py \
--env-file ~/.config/stealthrl/eval.env \
--checkpoint-json ~/.config/stealthrl/m2_checkpoint.json \
--run-root outputs/eval_runs/full_mage_public \
--gpus 0 1 2 3
该仓库在 demo/ 下包含一个由 FastAPI 驱动的演示网站。它提供一个精美的静态 UI,并公开 POST /api/paraphrase,支持 API 密钥,并为未认证用户提供每天 20 次的公共配额。
pip install -r demo/requirements.txt
uvicorn demo.stealthrl_demo.app:app --reload --port 8080
默认情况下,演示以零成本的 mock 模式运行,用于 UI 测试。要使用真实的 StealthRL 采样器,请设置 STEALTHRL_DEMO_INFERENCE_BACKEND=tinker、STEALTHRL_DEMO_CHECKPOINT_JSON 和 TINKER_API_KEY。有关 API 密钥、配额、Docker 和 AWS 部署说明,请参阅 demo/README.md。
论文报告了完整过滤后的 MAGE 评估池上的结果:
研究级评估管线在 eval/ 模块以及 scripts/ 下的分阶段脚本中实现。
准备凭据和检查点元数据。
创建一个包含 OPENAI_API_KEY 和 TINKER_API_KEY 的 env 文件,以及一个描述 StealthRL Tinker 采样器路径的检查点 JSON。
运行预检。
python scripts/preflight_research_eval.py \
--env-file ~/.config/stealthrl/eval.env \
--checkpoint-json ~/.config/stealthrl/m2_checkpoint.json
python scripts/run_full_mage_research_eval.py \
--env-file ~/.config/stealthrl/eval.env \
--checkpoint-json ~/.config/stealthrl/m2_checkpoint.json \
--run-root outputs/eval_runs/full_mage_repro \
--gpus 0 1 2 3
在所选运行目录下检查生成的方法输出、检测器得分、指标和图表。
如果您只需要在缓存输出上重新运行基于 GPT 的质量评判:
python scripts/run_gpt_quality_only.py \
--run-root outputs/eval_runs/full_mage_repro \
--env-file ~/.config/stealthrl/eval.env
python scripts/compute_bertscore_for_run.py \
--run-dir outputs/eval_runs/full_mage_repro/assembled \
--device cuda:0 \
--batch-size 16 \
--chunk-size 512
BERTScore 脚本会在每个分块后就地更新 quality.parquet 和 quality.csv,因此中断的运行可以恢复,而无需重新计算已完成的行。使用 --limit-per-method 进行小型冒烟测试,并且只有在有意重新计算现有 BERTScore 列时才使用 --force。
分阶段运行会生成:
method_runs/:每种方法生成的输出detector_scores/:每个检测器的 parquet 得分文件assembled/metrics.json:聚合的检测器指标assembled/thresholds.json:校准后的检测器阈值assembled/quality.parquet:自动质量指标assembled/quality_gpt.parquet:GPT/Likert 质量评分assembled/figures/:论文级图表论文的主要检查点使用 configs/tinker_mage_10k.yaml 作为标准训练配置:Qwen3-4B-Instruct 搭配 LoRA rank 32、GRPO 组大小 8、10,000 条 MAGE 训练样本、三个 epoch、学习率 2.8e-4、KL 系数 0.05、温度 1.0、top-p 0.9,以及一个双检测器奖励集成,权重为 0.6 RoBERTa / 0.4 Fast-DetectGPT。configs/ 中的其他配置保留为旧版示例、冒烟测试设置或消融模板,除非另有明确说明,否则不应视为论文权威配置。
StealthRL 训练的是改述策略而非检测器。核心思想是优化一个模型,使其重写 AI 生成的文本,在保持语义忠实的同时降低检测器的置信度。
Qwen/Qwen3-4B-Instruct-2507奖励是多目标的,并平衡:
实现主要位于:
stealthrl/tinker/train.pystealthrl/rewards/configs/论文中的 StealthRL 攻击在测试时是单次的:
检测器访问用于离线 RL 训练和外部评估,并非用于在 M2 中进行自适应的查询时搜索。
论文评估在较新的 eval/ 栈中实现,而非较旧的 stealthrl/evaluation/ 测试框架。
M0:无攻击M1:简单改述基线M2:StealthRLM3:检测器引导的对抗性改述基线M4:AuthorMist 基线M5:字符级混淆基线相关代码:
eval/methods/scripts/generate_method_outputs.py论文主要的检测器面板使用:
roberta:openai-community/roberta-large-openai-detectorfast_detectgptbinocularsmage:yaful/MAGE仓库还保留了对 ghostbuster 的支持,用于旧版/兼容性实验,但 Ghostbuster 不属于最终的四检测器论文面板。
公开的评估代码计算:
相关代码:
eval/metrics.pyeval/plots.pyeval/quality_judge.pyscripts/finalize_eval_run.py当前评估代码支持 vLLM 后端的本地生成,用于高吞吐量基线评估。这在以下位置实现:
eval/methods/vllm_backend.pyStealthRL 的 M2 方法支持通过检查点描述符 JSON 进行 Tinker 后端的采样。该路径在以下位置实现:
eval/methods/stealthrl.py完整 MAGE 管线有意采用分阶段设计:
这使得耗时的多 GPU 运行更加健壮且更易调试。
eval/methods/ 下添加一个类BaseAttackMethod 接口eval/methods/__init__.py 中注册该方法eval/runner.py 使用的检测器注册表中注册它本仓库发布是为了支持 AI 文本检测器鲁棒性、对抗性评估和防御性基准测试的研究。它并非旨在支持作弊、抄袭或规避合法的安全和诚信系统。
如果您在此工作基础上构建,请使用它来改进检测器的鲁棒性、校准、迁移评估以及部署限制的透明度。
如果您使用本仓库,请引用该论文:
@article{ranganath2026stealthrl,
title={StealthRL: Reinforcement Learning Paraphrase Attacks for Multi-Detector Evasion of AI-Text Detectors},
author={Ranganath, Suraj and others},
journal={arXiv preprint arXiv:2602.08934},
year={2026}
}