
StealthRL: framework de RL para parafrasear texto de IA de forma adversaria y poner a prueba la robustez de los detectores.
Artículo (arXiv)
Demo
Modelo (Hugging Face)
Dataset de Referencia (Hugging Face)

Los detectores de texto IA se utilizan cada vez más en entornos de alto riesgo, pero su robustez frente a la reescritura adversarial que preserva el significado sigue siendo incierta. Presentamos StealthRL, un marco de aprendizaje por refuerzo para poner a prueba los detectores de texto IA con ataques de paráfrasis adaptativos. StealthRL entrena una política de paráfrasis contra un conjunto de detectores mientras preserva el contenido semántico, y luego evalúa la transferencia a familias de detectores no vistas durante el entrenamiento. En el conjunto completo filtrado de prueba MAGE (15,310 humanos / 14,656 IA), StealthRL reduce el AUROC medio de 0.79 a 0.43 y alcanza un TPR@1%FPR medio de 0.024 en RoBERTa, Fast-DetectGPT, Binoculars y MAGE. El ataque se transfiere a dos detectores no utilizados durante el entrenamiento, lo que expone vulnerabilidades compartidas en lugar de un fallo de un solo detector. Además, analizamos las distribuciones de puntuaciones de los detectores y evaluamos la calidad con E5, BERTScore y valoraciones Likert basadas en LLM. Nuestros resultados muestran que los detectores de texto IA actuales siguen siendo frágiles bajo una presión realista de paráfrasis y proporcionan un protocolo reproducible para la evaluación de robustez adversarial.
Este repositorio es la base de código de investigación e ingeniería detrás de StealthRL. Contiene:
El repositorio pretende ser un punto de partida útil para investigadores que quieran:
stealthrl/: código de entrenamiento, envoltorios de detectores, recompensas, utilidades de datos y el paquete StealthBench originaleval/: infraestructura de evaluación de nivel de investigación utilizada para los resultados del artículoscripts/: puntos de entrada ejecutables para entrenamiento, evaluación, orquestación, gráficos y utilidadesconfigs/: configuraciones YAML para entrenamiento, evaluación y ablacionesfigures/: diagramas del pipeline y recursos estáticostests/: pruebas de integración y comprobaciones de corduraanalysis/: ayudas de análisis ad hoc y utilidades puntualespython -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
Según las partes del proyecto que quieras ejecutar, también puedes necesitar:
pip install tinker
pip install openai
pip install vllm
Notas:
tinker es necesario para la ruta de inferencia del checkpoint de StealthRL respaldada por la nube utilizada por M2.openai solo se requiere para el paso de evaluación de calidad GPT/Likert.vllm se recomienda para la generación local rápida en los baselines del artículo.Variables de entorno típicas utilizadas por el repositorio:
export HF_HOME=$HOME/.cache/huggingface
export TRANSFORMERS_CACHE=$HF_HOME
export OPENAI_API_KEY=...
export TINKER_API_KEY=...
Para el pipeline de evaluación del artículo por etapas, utilizamos un archivo env además de un JSON descriptor de checkpoint. Los scripts públicos te permiten sobrescribir ambas rutas explícitamente:
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
Ahora carga los archivos de texto configurados, ejecuta los detectores configurados, guarda las salidas CSV y genera gráficos de comparación. El antiguo stub de solo TODO se ha eliminado.
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
El repositorio incluye un sitio web de demostración respaldado por FastAPI en demo/. Ofrece una interfaz estática pulida y expone POST /api/paraphrase con soporte de clave API además de una cuota pública de 20/día para usuarios no autenticados.
pip install -r demo/requirements.txt
uvicorn demo.stealthrl_demo.app:app --reload --port 8080
De forma predeterminada, la demo se ejecuta en modo mock de costo cero para probar la interfaz. Para usar el sampler real de StealthRL, establece STEALTHRL_DEMO_INFERENCE_BACKEND=tinker, STEALTHRL_DEMO_CHECKPOINT_JSON y TINKER_API_KEY. Consulta demo/README.md para obtener notas sobre clave API, cuota, Docker e implementación en AWS.
El artículo presenta resultados sobre el conjunto completo filtrado de evaluación MAGE:
El pipeline de evaluación de nivel de investigación está implementado en el módulo eval/ junto con los scripts por etapas en scripts/.
Prepara las credenciales y los metadatos del checkpoint.
Crea un archivo env que contenga OPENAI_API_KEY y TINKER_API_KEY, y un JSON de checkpoint que describa la ruta del sampler Tinker de StealthRL.
Ejecuta el preflight.
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
Inspecciona las salidas de métodos generadas, las puntuaciones de los detectores, las métricas y los gráficos en el directorio de ejecución elegido.
Si solo necesitas volver a ejecutar la evaluación de calidad basada en GPT sobre salidas en caché:
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
El script de BERTScore actualiza quality.parquet y quality.csv in situ después de cada fragmento, por lo que las ejecuciones interrumpidas pueden reanudarse sin volver a calcular las filas completadas. Usa --limit-per-method para una pequeña prueba de humo y --force solo cuando quieras recalcular intencionadamente las columnas BERTScore existentes.
La ejecución por etapas produce:
method_runs/: salidas generadas por métododetector_scores/: archivos de puntuaciones parquet por detectorassembled/metrics.json: métricas agregadas de detectoresassembled/thresholds.json: umbrales calibrados de detectoresassembled/quality.parquet: métricas automáticas de calidadassembled/quality_gpt.parquet: valoraciones de calidad GPT/Likertassembled/figures/: gráficos listos para el artículoEl checkpoint principal del artículo utiliza configs/tinker_mage_10k.yaml como configuración de entrenamiento canónica: Qwen3-4B-Instruct con LoRA de rango 32, tamaño de grupo GRPO 8, 10,000 muestras de entrenamiento MAGE, tres épocas, tasa de aprendizaje 2.8e-4, coeficiente KL 0.05, temperatura 1.0, top-p 0.9 y un conjunto de recompensa de dos detectores ponderado 0.6 RoBERTa / 0.4 Fast-DetectGPT. Las demás configuraciones en configs/ se conservan como ejemplos heredados, ajustes de prueba de humo o plantillas de ablación y no deben tratarse como autoritativas para el artículo a menos que estén documentadas explícitamente.
StealthRL entrena una política de paráfrasis en lugar de un detector. La idea central es optimizar un modelo que reescriba el texto generado por IA de modo que siga siendo semánticamente fiel mientras reduce la confianza del detector.
Qwen/Qwen3-4B-Instruct-2507La recompensa es multiobjetivo y equilibra:
La implementación reside principalmente en:
stealthrl/tinker/train.pystealthrl/rewards/configs/El ataque de StealthRL del artículo es de un solo disparo en tiempo de prueba:
El acceso al detector se utiliza durante el entrenamiento de RL offline y para la evaluación externa, no para la búsqueda adaptativa en tiempo de consulta en M2.
La evaluación del artículo está implementada en la pila más nueva eval/ en lugar de la infraestructura más antigua stealthrl/evaluation/.
M0: sin ataqueM1: baseline simple de paráfrasisM2: StealthRLM3: baseline de paráfrasis adversarial guiada por detectorM4: baseline AuthorMistM5: baseline de ofuscación a nivel de caracteresCódigo relevante:
eval/methods/scripts/generate_method_outputs.pyEl panel principal de detectores del artículo utiliza:
roberta: openai-community/roberta-large-openai-detectorfast_detectgptbinocularsmage: yaful/MAGEEl repositorio también conserva el soporte de ghostbuster para experimentos heredados/de compatibilidad, pero Ghostbuster no forma parte del panel final de cuatro detectores del artículo.
Código relevante:
eval/detectors.pyscripts/score_detector_outputs.pyeval/runner.pyEl código público de evaluación calcula:
Código relevante:
eval/metrics.pyeval/plots.pyeval/quality_judge.pyscripts/finalize_eval_run.pyEl código de evaluación actual admite la generación local respaldada por vLLM para la evaluación de baselines de alto rendimiento. Esto está implementado en:
eval/methods/vllm_backend.pyEl método M2 de StealthRL admite el muestreo respaldado por Tinker mediante un JSON descriptor de checkpoint. Esta ruta está implementada en:
eval/methods/stealthrl.pyEl pipeline completo de MAGE está deliberadamente dividido en etapas:
Esto hace que las ejecuciones largas con múltiples GPUs sean más robustas y fáciles de depurar.
eval/methods/BaseAttackMethodeval/methods/__init__.pyeval/runner.pyEste repositorio se publica para la investigación sobre la robustez de los detectores de texto IA, la evaluación adversarial y la evaluación comparativa defensiva. No está pensado para apoyar el engaño, el plagio ni la evasión de sistemas legítimos de seguridad e integridad.
Si construyes sobre este trabajo, úsalo para mejorar la robustez de los detectores, la calibración, la evaluación de transferencia y la transparencia en torno a las limitaciones de implementación.
Si utilizas este repositorio, cita el artículo:
@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}
}