
StealthRL: фреймворк RL для состязательного перефразирования текста ИИ, предназначенный для стресс-тестирования устойчивости детекторов.
Статья (arXiv)
Демо
Модель (Hugging Face)
Бенчмарк-датасет (Hugging Face)

Детекторы ИИ-текста всё чаще используются в задачах с высокими ставками, однако их устойчивость к сохраняющему смысл состязательному переписыванию остаётся неопределённой. Мы представляем StealthRL — фреймворк на основе обучения с подкреплением для стресс-тестирования детекторов ИИ-текста с помощью адаптивных атак перефразированием. StealthRL обучает политику перефразирования против ансамбля детекторов, сохраняя семантическое содержание, а затем оценивает перенос на семейства детекторов, не использовавшиеся при обучении. На полном отфильтрованном тестовом пуле MAGE (15,310 человеческих / 14,656 ИИ-образцов) StealthRL снижает средний AUROC с 0.79 до 0.43 и достигает среднего TPR@1%FPR 0.024 на RoBERTa, Fast-DetectGPT, Binoculars и MAGE. Атака переносится на два детектора, не использовавшихся при обучении, выявляя общие уязвимости, а не отказ отдельного детектора. Мы также анализируем распределения оценок детекторов и оцениваем качество с помощью E5, BERTScore и Likert-оценок на основе LLM. Наши результаты показывают, что современные детекторы ИИ-текста остаются хрупкими под давлением реалистичного перефразирования, и предоставляют воспроизводимый протокол для оценки состязательной устойчивости.
Этот репозиторий — исследовательская и инженерная кодовая база, лежащая в основе StealthRL. Он содержит:
Репозиторий задуман как удобная отправная точка для исследователей, которые хотят:
stealthrl/: код обучения, обёртки детекторов, функции вознаграждения, утилиты для работы с данными и оригинальный пакет StealthBencheval/: исследовательский харнесс для оценки, использованный для результатов статьиscripts/: исполняемые точки входа для обучения, оценки, оркестрации, построения графиков и утилитconfigs/: YAML-конфиги для обучения, оценки и абляцийfigures/: диаграммы конвейера и статические ресурсыtests/: интеграционные проверки и sanity-тестыanalysis/: ad hoc вспомогательные инструменты анализа и разовые утилиты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
Примечания:
tinker требуется для облачного пути инференса чекпоинта StealthRL, используемого методом M2.openai требуется только для этапа оценки качества GPT/Likert.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
Репозиторий включает демонстрационный сайт на FastAPI в каталоге demo/. Он обслуживает аккуратный статический интерфейс и предоставляет эндпоинт POST /api/paraphrase с поддержкой API-ключей, а также публичную квоту 20 запросов в день для неаутентифицированных пользователей.
pip install -r demo/requirements.txt
uvicorn demo.stealthrl_demo.app:app --reload --port 8080
По умолчанию демо запускается в бесплатном режиме mock для тестирования интерфейса. Чтобы использовать реальный сэмплер StealthRL, задайте STEALTHRL_DEMO_INFERENCE_BACKEND=tinker, STEALTHRL_DEMO_CHECKPOINT_JSON и TINKER_API_KEY. См. demo/README.md с примечаниями по API-ключам, квотам, развёртыванию в Docker и AWS.
В статье представлены результаты на полном отфильтрованном оценочном пуле MAGE:
Исследовательский конвейер оценки реализован в модуле eval/ и поэтапных скриптах в каталоге scripts/.
Подготовьте учётные данные и метаданные чекпоинта.
Создайте env-файл, содержащий OPENAI_API_KEY и TINKER_API_KEY, и JSON-файл чекпоинта, описывающий путь к сэмплеру StealthRL Tinker.
Запустите предварительную проверку.
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 для небольшого смоук-теста и --force только при намеренном пересчёте существующих столбцов BERTScore.
Поэтапный запуск создаёт:
method_runs/: сгенерированные выходы по каждому методуdetector_scores/: файлы оценок parquet по каждому детекторуassembled/metrics.json: агрегированные метрики детекторовassembled/thresholds.json: откалиброванные пороги детекторовassembled/quality.parquet: автоматические метрики качестваassembled/quality_gpt.parquet: оценки качества GPT/Likertassembled/figures/: готовые к публикации графикиОсновной чекпоинт статьи использует configs/tinker_mage_10k.yaml в качестве канонической конфигурации обучения: Qwen3-4B-Instruct с LoRA рангом 32, размером группы GRPO 8, 10,000 обучающими сэмплами MAGE, тремя эпохами, скоростью обучения 2.8e-4, коэффициентом KL 0.05, температурой 1.0, top-p 0.9 и ансамблем вознаграждения из двух детекторов с весами 0.6 RoBERTa / 0.4 Fast-DetectGPT. Остальные конфиги в configs/ сохранены как унаследованные примеры, настройки для смоук-тестов или шаблоны для абляций, и их не следует рассматривать как авторитетные для статьи, если это явно не задокументировано.
StealthRL обучает политику перефразирования, а не детектор. Основная идея — оптимизировать модель, которая переписывает сгенерированный ИИ текст так, чтобы он оставался семантически точным, одновременно снижая уверенность детектора.
Qwen/Qwen3-4B-Instruct-2507Вознаграждение многоцелевое и балансирует:
Реализация находится в основном в:
stealthrl/tinker/train.pystealthrl/rewards/configs/Атака StealthRL из статьи является одношаговой (single-shot) во время тестирования:
Доступ к детектору используется во время offline-обучения RL и для внешней оценки, а не для адаптивного поиска во время запросов в M2.
Оценка из статьи реализована в новом стеке eval/, а не в более старом харнессе stealthrl/evaluation/.
M0: без атакиM1: простой базовый метод перефразированияM2: StealthRLM3: базовый метод состязательного перефразирования под руководством детектораM4: базовый метод AuthorMistM5: базовый метод обфускации на уровне символовСоответствующий код:
eval/methods/scripts/generate_method_outputs.pyОсновная панель детекторов статьи использует:
roberta: openai-community/roberta-large-openai-detectorfast_detectgptbinocularsmage: yaful/MAGEРепозиторий также сохраняет поддержку ghostbuster для унаследованных/совместимых экспериментов, но Ghostbuster не входит в финальную панель из четырёх детекторов, использованную в статье.
Соответствующий код:
eval/detectors.pyscripts/score_detector_outputs.pyeval/runner.pyПубличный код оценки вычисляет:
Соответствующий код:
eval/metrics.pyeval/plots.pyeval/quality_judge.pyscripts/finalize_eval_run.pyТекущий код оценки поддерживает локальную генерацию на основе vLLM для высокопроизводительной оценки базовых методов. Это реализовано в:
eval/methods/vllm_backend.pyМетод M2 StealthRL поддерживает сэмплирование на основе Tinker через JSON-файл описания чекпоинта. Этот путь реализован в:
eval/methods/stealthrl.pyКонвейер полной MAGE намеренно разбит на этапы:
Это делает длительные много-GPU запуски более надёжными и удобными для отладки.
eval/methods/BaseAttackMethodeval/methods/__init__.pyeval/runner.pyЭтот репозиторий выпущен для исследований устойчивости детекторов ИИ-текста, состязательной оценки и защитного бенчмаркинга. Он не предназначен для поддержки списывания, плагиата или обхода легитимных систем безопасности и честности.
Если вы развиваете эту работу, пожалуйста, используйте её для улучшения устойчивости детекторов, калибровки, оценки переноса и прозрачности ограничений развёртывания.
Если вы используете этот репозиторий, пожалуйста, цитируйте статью:
@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}
}