
StealthRL: RL framework for adversarially paraphrasing AI text to stress-test detector robustness.
Paper (arXiv)
Demo
Modelo (Hugging Face)
Conjunto de Dados de Benchmark (Hugging Face)

Detectores de texto de IA são cada vez mais usados em contextos de alto risco, mas sua robustez a reescritas adversariais que preservam o significado permanece incerta. Apresentamos o StealthRL, uma estrutura de aprendizado por reforço para testar a resistência de detectores de texto de IA com ataques de paráfrase adaptativos. O StealthRL treina uma política de paráfrase contra um conjunto de detectores, preservando o conteúdo semântico, e então avalia a transferência para famílias de detectores não utilizadas no treinamento. No pool completo de teste MAGE filtrado (15.310 amostras humanas / 14.656 amostras de IA), o StealthRL reduz a AUROC média de 0,79 para 0,43 e atinge um TPR médio de 0,024 @ 1%FPR entre RoBERTa, Fast-DetectGPT, Binoculars e MAGE. O ataque transfere-se para dois detectores não utilizados durante o treinamento, expondo vulnerabilidades compartilhadas, em vez de uma falha em um único detector. Analisamos ainda as distribuições das pontuações dos detectores e avaliamos a qualidade com E5, BERTScore e classificações Likert baseadas em LLM. Nossos resultados mostram que os atuais detectores de texto de IA permanecem frágeis sob pressão realista de paráfrase e fornecem um protocolo reproduzível para avaliação de robustez adversarial.
Este repositório é a base de código de pesquisa e engenharia por trás do StealthRL. Ele contém:
O repositório pretende ser um ponto de partida útil para pesquisadores que desejam:
stealthrl/: código de treinamento, wrappers de detectores, recompensas, utilitários de dados e o pacote original StealthBencheval/: harness de avaliação de nível de pesquisa usado para os resultados do artigoscripts/: pontos de entrada executáveis para treinamento, avaliação, orquestração, gráficos e utilitáriosconfigs/: configurações YAML para treinamento, avaliação e ablaçõesfigures/: diagramas do pipeline e ativos estáticostests/: testes de integração e sanidadeanalysis/: auxiliares de análise ad hoc e utilitários pontuaispython -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
Dependendo de quais partes do projeto você deseja executar, também pode ser necessário:
pip install tinker
pip install openai
pip install vllm
Observações:
tinker é necessário para o caminho de inferência de checkpoint StealthRL baseado em nuvem usado pelo M2.openai é necessário apenas para a etapa de avaliação de qualidade GPT/Likert.vllm é recomendado para geração local rápida nas linhas de base do artigo.Variáveis de ambiente típicas usadas pelo repositório:
export HF_HOME=$HOME/.cache/huggingface
export TRANSFORMERS_CACHE=$HF_HOME
export OPENAI_API_KEY=...
export TINKER_API_KEY=...
Para o pipeline de avaliação em estágios do artigo, usamos um arquivo env mais um JSON descritor de checkpoint. Os scripts públicos permitem substituir ambos os caminhos explicitamente:
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
Isso agora carrega os arquivos de texto configurados, executa os detectores configurados, salva saídas CSV e gera gráficos de comparação. O antigo stub apenas com TODO foi removido.
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
O repositório inclui um site de demonstração baseado em FastAPI em demo/. Ele serve uma interface de usuário estática polida e expõe POST /api/paraphrase com suporte a chave de API mais uma cota pública de 20/dia para usuários não autenticados.
pip install -r demo/requirements.txt
uvicorn demo.stealthrl_demo.app:app --reload --port 8080
Por padrão, a demo executa em modo mock de custo zero para teste de interface. Para usar o amostrador StealthRL real, defina STEALTHRL_DEMO_INFERENCE_BACKEND=tinker, STEALTHRL_DEMO_CHECKPOINT_JSON e TINKER_API_KEY. Consulte demo/README.md para notas sobre chave de API, cota, Docker e implantação AWS.
O artigo relata resultados no pool de avaliação MAGE completo filtrado:
O pipeline de avaliação de nível de pesquisa é implementado no módulo eval/ mais os scripts em estágios em scripts/.
Prepare as credenciais e metadados do checkpoint.
Crie um arquivo env contendo OPENAI_API_KEY e TINKER_API_KEY, e um JSON de checkpoint descrevendo o caminho do amostrador Tinker do StealthRL.
Execute a verificação pré-voo.
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
Inspecione as saídas dos métodos gerados, pontuações dos detectores, métricas e gráficos no diretório de execução escolhido.
Se você precisar apenas reexecutar o julgamento de qualidade baseado em GPT em saídas em cache:
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
O script BERTScore atualiza quality.parquet e quality.csv imediatamente após cada bloco, para que execuções interrompidas possam ser retomadas sem recalcular linhas concluídas. Use --limit-per-method para um pequeno teste de fumaça e --force apenas quando for necessário recalcular colunas BERTScore existentes intencionalmente.
A execução em estágios produz:
method_runs/: saídas geradas por métododetector_scores/: arquivos de pontuação parquet por detectorassembled/metrics.json: métricas agregadas dos detectoresassembled/thresholds.json: limites calibrados dos detectoresassembled/quality.parquet: métricas automáticas de qualidadeassembled/quality_gpt.parquet: classificações de qualidade GPT/Likertassembled/figures/: gráficos prontos para publicaçãoO checkpoint principal do artigo usa configs/tinker_mage_10k.yaml como configuração de treinamento canônica: Qwen3-4B-Instruct com LoRA rank 32, tamanho de grupo GRPO 8, 10.000 amostras de treinamento MAGE, três épocas, taxa de aprendizado 2.8e-4, coeficiente KL 0.05, temperatura 1.0, top-p 0.9 e um conjunto de recompensas de dois detectores ponderado 0.6 RoBERTa / 0.4 Fast-DetectGPT. Outras configurações em configs/ são mantidas como exemplos legados, configurações de teste de fumaça ou modelos de ablação e não devem ser tratadas como autoritativas para o artigo, a menos que documentadas explicitamente.
StealthRL treina uma política de paráfrase, não um detector. A ideia central é otimizar um modelo que reescreve texto gerado por IA de modo que permaneça semanticamente fiel enquanto reduz a confiança do detector.
Qwen/Qwen3-4B-Instruct-2507A recompensa é multiobjetivo e equilibra:
A implementação reside principalmente em:
stealthrl/tinker/train.pystealthrl/rewards/configs/O ataque StealthRL do artigo é de tiro único no momento do teste:
O acesso ao detector é usado durante o treinamento offline de RL e para avaliação externa, não para busca adaptativa em tempo de consulta no M2.
A avaliação do artigo é implementada na pilha mais nova eval/, em vez do harness stealthrl/evaluation/ mais antigo.
M0: sem ataqueM1: linha de base de paráfrase simplesM2: StealthRLM3: linha de base de paráfrase adversarial guiada por detectorM4: linha de base AuthorMistM5: linha de base de ofuscação em nível de caractereCódigo relevante:
eval/methods/scripts/generate_method_outputs.pyO painel principal de detectores do artigo usa:
roberta: openai-community/roberta-large-openai-detectorfast_detectgptbinocularsmage: yaful/MAGEO repositório também mantém suporte a ghostbuster para experimentos legados/de compatibilidade, mas Ghostbuster não faz parte do painel final de quatro detectores do artigo.
Código relevante:
eval/detectors.pyscripts/score_detector_outputs.pyeval/runner.pyO código de avaliação público calcula:
Código relevante:
eval/metrics.pyeval/plots.pyeval/quality_judge.pyscripts/finalize_eval_run.pyO código de avaliação atual suporta geração local baseada em vLLM para avaliação de alto rendimento das linhas de base. Isso é implementado em:
eval/methods/vllm_backend.pyO método StealthRL M2 suporta amostragem via Tinker usando um JSON descritor de checkpoint. Este caminho é implementado em:
eval/methods/stealthrl.pyO pipeline MAGE completo é intencionalmente em estágios:
Isso torna execuções longas com múltiplas GPUs mais robustas e fáceis de depurar.
eval/methods/BaseAttackMethodeval/methods/__init__.pyeval/runner.pyEste repositório é disponibilizado para pesquisa sobre robustez de detectores de texto de IA, avaliação adversarial e benchmarking defensivo. Não se destina a apoiar trapaças, plágio ou evasão de sistemas legítimos de segurança e integridade.
Se você construir sobre este trabalho, use-o para melhorar a robustez, calibração, avaliação de transferência e transparência em torno das limitações de implantação dos detectores.
Se você usar este repositório, por favor cite o artigo:
@article{ranganath2026stealthrl,
title={StealthRL: Reinforcement Learning Paraphrase Attacks for Multi-Detector Evasion of AI-Text Detectors},
author={Ranganath, Suraj e outros},
journal={arXiv preprint arXiv:2602.08934},
year={2026}
}