Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
AGAS — Framework de ataque de promoción grupal agéntico impulsado por LLM que manipula las clasificaciones de recomendadores de filtrado colaborativo de caja negra utilizando estrategias adaptativas de múltiples roles mientras evade la detección. | Kitploit
Herramientas/GitHubGitHub/phkhanhtrinh23/agas
Aprendizaje AutomáticoPapers e InvestigaciónAprendizaje y EducaciónSeguridad de IAAtaque Adversario
GitHubphkhanhtrinh23/agas

AGAS

Framework de ataque de promoción grupal agéntico impulsado por LLM que manipula las clasificaciones de recomendadores de filtrado colaborativo de caja negra utilizando estrategias adaptativas de múltiples roles mientras evade la detección.

Ver Repositorio
210hace 3 díasAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Un ataque de shilling grupal agéntico eficiente y efectivo contra sistemas de recomendación

Este es el código oficial del artículo: "An Efficient and Effective Agentic Group Shilling Attack on Recommender Systems". Este artículo presenta AGAS, que es un ataque de shilling impulsado por LLM contra recomendadores de filtrado colaborativo de caja negra. Un Coordinador orquesta un grupo de trabajadores usuarios falsos a lo largo de una secuencia de rondas. En cada ronda, el Coordinador elige una de ocho estrategias y asigna un rol a cada trabajador. Los trabajadores entonces deciden qué ítems calificar usando su propio bucle de razonamiento estilo ReAct.

AGAS pipeline


1. Descripción general del repositorio```

agent_attack_rs/ bash/ # Reviewer-friendly shell scripts (RQ1–RQ5) prompts/ # Coordinator + per-role prompt templates scripts/run_agas.py # Single entry point (--dataset --victim ...) src/agas/ roles.py # Role enum {PR, SN, CA, IN} (paper symbols) signals.py # WorkerSignals (τ, γ, φ) + EnvSignals (ρ, Δρ, η, ξ, a) strategies.py # 8-strategy enum agents/ # Coordinator + Worker policies simulation/ # Episode runner (= AGAS algorithm outer loop) llm/ # OpenAI / Ollama recsys/ # Surrogate + 11-victim backends data/ # Dataset loaders + preprocessing pipeline tests/ # Pytest suite

root@kitploit:~
## 2. Resumen del método

AGAS instancia cuatro roles de trabajador (símbolos de artículo en `roles.py`):

| Símbolo | Nombre completo | Qué hace                                                                |
|--------|----------------|-------------------------------------------------------------------------|
| `PR`   | Profiler       | Valoraciones seguras de ítems de relleno para sondear la plataforma y construir grupos puente.  |
| `SN`   | Sniper         | Rol de carga útil; empuje directo al objetivo o promoción de ítem puente.              |
| `CA`   | Camouflageur   | Rol de sigilo; reconstruye la confianza con actividad de apariencia benigna. |
| `IN`   | Inactive       | Sin acción esta ronda (enfriamiento o cuarentena).                         |

Cada ronda el Coordinador elige exactamente una de ocho estrategias de
`strategies.py` (ver `method_strategies.tex`):

1. **Victim Probe** (`S1_VICTIM_PROBE`)
2. **Bridge Building** (`S2_BRIDGE_BUILDING`, solo víctimas de grafo)
3. **Warm-up** (`S3_WARM_UP`)
4. **First Push** (`S4_FIRST_PUSH`)
5. **Silent Slowdown** (`S5_SILENT_SLOWDOWN`)
6. **Profile Cleanup** (`S6_PROFILE_CLEANUP`)
7. **Safe Replacement** (`S7_SAFE_REPLACEMENT`)
8. **Main Attack** (`S8_MAIN_ATTACK`)

El Coordinador impulsa esas decisiones a partir de dos grupos de señales (`signals.py`):

* **Señales de trabajador** `τ_{t,w}, γ_{t,w}, φ_{t,w}` — confianza, riesgo y un
  validador estructural. Las ecuaciones de actualización coinciden exactamente con `method_coordinator.tex`
  (`eq:trust_update`, `eq:risk_update`, `eq:risk_decay`,
  `eq:profile_validator`).
* **Señales de entorno** `ρ^{(t)}, Δρ^{(t)}, η_t, ξ_t = (q_t, s_t), a_t` —
  rango, movimiento de rango, tasa de aceptación, señal de supresión, indicador de alerta. La
  puntuación de sospecha `q_t` es la suma ponderada por 0.2 de los cinco términos
  normalizados `(d̂_t, δ̂_t, m̂_t, ŝ_t, g_t)` de `eq:round_suppression_terms` y
  `eq:round_suppression_score`.

### Bucle de ronda (ASCII)```
                ┌─────────────────────────────────────────────────┐
   t=0…T-1 ──►  │ 1. Observe ρ^{(t)}, update memory m_t           │
                │ 2. Update τ, γ, φ, η, ξ, a                       │
                │ 3. Coordinator picks Strategy ∈ {S1…S8}          │
                │    and assigns Role ∈ {PR, SN, CA, IN} per worker│
                │ 4. Workers act (filler / bridge / target items)  │
                │ 5. Validate + accept actions → ΔR̃^{(t+1)}        │
                │ 6. Refit / query victim → ρ^{(t+1)}              │
                └─────────────────────────────────────────────────┘
                          │
                          ▼
                   t* = argmin_t ρ^{(t)}, return R* = [R ; R̃^{(≤t*)}]

El bucle externo está implementado en src/agas/simulation/episode.py y refleja algorithms/agas_end_to_end.tex.

3. Entorno

PyTorch y CUDA solo son necesarios para los modelos víctima de aprendizaje profundo (extra [targets]). El bucle central de AGAS y las rutas basadas en reglas / sustitutas se ejecutan en CPU sin dependencia de GPU.

4. Instalación```bash

pip install -e .

If you want to use the deep-learning victim models (LightGCN, NeuMF, …)

pip install -e '.[targets]'

root@kitploit:~
Variables de entorno requeridas:

| Variable           | Propósito                                                       | Predeterminado                  |
|--------------------|---------------------------------------------------------------|--------------------------|
| `OPENAI_API_KEY`   | Clave de la API de OpenAI Responses para el Coordinador / LLMs trabajadores.   | *(sin establecer → respaldo)*     |
| `OPENAI_MODEL`     | Nombre del modelo pasado a OpenAI.                                  | `gpt-5.1`                |

## 4. Conjuntos de datos

El artículo evalúa en seis benchmarks públicos de CF (ver `experiment.tex`):

| Nombre corto  | Fuente                    | Usuarios     | Ítems  | Interacciones       | Descarga                                                          | Colocar archivos sin procesar en  |
|-------------|---------------------------|----------:|-------:|-------------------:|-------------------------------------------------------------------|---------------------|
| ML-100K     | MovieLens 100K            |       943 |  1,682 |            100,000 | [GroupLens](https://files.grouplens.org/datasets/movielens/ml-100k.zip) | `data/ml-100k/`     |
| ML-1M       | MovieLens 1M              |     6,040 |  3,706 |          1,000,209 | [GroupLens](https://files.grouplens.org/datasets/movielens/ml-1m.zip)   | `data/ml-1m/`       |
| Genome 2021 | MovieLens Tag Genome 2021 |    37,941 | 84,661 | 2,000,000 (limitado) | [GroupLens](https://grouplens.org/datasets/movielens/tag-genome-2021/)  | `data/genome2021/`  |
| Netflix     | Netflix Prize             |   342,445 | 17,434 | 2,000,000 (limitado) | [Kaggle](https://www.kaggle.com/datasets/netflix-inc/netflix-prize-data) | `data/netflix/`     |
| Douban      | Douban Movie              |    28,057 | 49,176 |          8,085,679 | [HKUST](http://shichuan.org/HIN_dataset.html)                     | `data/douban/`      |
| Amazon      | Amazon Reviews 2018       |   998,653 | 30,964 | 2,000,000 (limitado) | [UCSD](https://nijianmo.github.io/amazon/index.html)              | `data/amazon/`      |

Después de colocar las descargas sin procesar en `data/<dataset>/`, ejecuta:```bash
python scripts/preprocess_all.py --data-root data --output-root processed

Cada conjunto de datos se reescribe en archivos canónicos interactions.csv + items.csv bajo processed/<dataset>/. Las pruebas de humo utilizan la muestra mucho más pequeña ml-latest-small que se incluye con MovieLens.

Protocolo de división entrenamiento / prueba

El pipeline de preprocesamiento no almacena archivos de división — exporta el registro completo de interacciones. Las divisiones se aplican en tiempo de ejecución:

Esto sigue el protocolo estándar de evaluación de ataques de shilling: el atacante observa los rankings de la víctima sobre los usuarios del conjunto de entrenamiento y optimiza en consecuencia, imitando un escenario de despliegue de caja negra.

5. Cómo ejecutar

scripts/run_agas.py es el único punto de entrada. Los siete flags requeridos por el protocolo del paper son:``` python scripts/run_agas.py
--dataset ml-100k
--victim lightgcn
--rounds 18
--seed 42
--n_workers 8
--budget 0.01
--out outputs/agas_ml100k_lightgcn_seed42.json

root@kitploit:~
| Flag           | Significado                                                                                          |
|----------------|--------------------------------------------------------------------------------------------------|
| `--dataset`    | Uno de `ml-100k`, `ml-1m`, `genome2021`, `netflix`, `douban`, `amazon`, `ml-latest-small`.       |
| `--victim`     | Uno de los 11 victims de `experiment.tex` (`mf`, `bpr`, `neumf`, `gmf`, `ncf`, `ngcf`, `lightgcn`, `simgcl`, `xsimgcl`, `egcf`, `lightccf`). |
| `--rounds`     | Número de rondas de AGAS `T` (por defecto en el artículo `18`).                                                  |
| `--seed`       | Semilla aleatoria (el artículo promedia sobre cinco).                                                          |
| `--n_workers`  | Tamaño del grupo de usuarios falsos |
| `--budget`     | Presupuesto de interacción por usuario `L`, expresado como una fracción de.                                |
| `--out`        | Ruta JSON de salida para el seguimiento completo del episodio y las métricas de resumen.                                 |

### Reproduciendo cada pregunta de investigación en una pequeña muestra de ML-100K```bash
bash bash/run_performance.sh          # RQ1
bash bash/run_stealth_and_detect.sh   # RQ2 + RQ3
bash bash/run_ablation.sh             # RQ4
bash bash/run_efficiency.sh           # RQ5

Cada script imprime qué experimento está ejecutando, la ruta de salida y una nota que señala la figura/tabla correspondiente en el artículo.

Ejemplo de salida esperada en consola (truncada):``` [RQ1] Performance benchmark — tiny ML-100K sample [RQ1] Output directory: agent_attack_rs/outputs/rq1_performance [RQ1] Map outputs to tables/benchmark_unpopular.tex === ml-latest-small / lightgcn / seed=42 === Round 0 | ρ = 1834 Δρ = +0 strategy = S1_VICTIM_PROBE Round 1 | ρ = 1450 Δρ = +384 strategy = S1_VICTIM_PROBE Round 2 | ρ = 1212 Δρ = +238 strategy = S3_WARM_UP … [RQ1] Done. Expected outputs in agent_attack_rs/outputs/rq1_performance

root@kitploit:~
### Ataque de transferencia contra LightGCN (en bucle)

Ejecuta LightGCN tanto como modelo de episodio como objetivo de evaluación. La víctima
se reentrena después de cada ronda, por lo que el Coordinador recibe retroalimentación real de ranking y
adapta los roles y la estrategia en consecuencia.```bash
agas run-transfer \
  --dataset ml-latest-small \
  --target-item-id 7114 \
  --target-keyword horror \
  --num-agents 50 \
  --num-steps 10 \
  --victim-model-hint lightgcn \
  --profiler-bridge-method cooccurrence \
  --probe-steps 0 \
  --graph-sniper \
  --clone-segment-users-to-agents \
  --transfer-mode option-b \
  --target-models lightgcn \
  --target-epochs 50 \
  --target-embedding-dim 32 \
  --target-lightgcn-layers 3 \
  --min-active-fraction 0.5 \
  --min-sniper-fraction 0.3 \
  --output outputs/optb_warmstart_clean_cooc_50ag_10r.json

FlagSignificado
--profiler-bridge-method cooccurrenceElementos puente seleccionados por coocurrencia con el clúster de evaluadores del objetivo.
--graph-sniperLos snipers evalúan los elementos puente y el objetivo directamente (acción dual).

Después de la ejecución, los resultados se imprimen y se guardan en el JSON de salida:``` Bridge-item selection (cooccurrence): 50 items selected for profiler pool. ... Transfer evaluation saved to outputs/optb_warmstart_clean_cooc.json Option B (in-loop target models): lightgcn: final rank (best in-loop at step , best-seq retrain rank )

root@kitploit:~
## 6. Registro de tokens, activación de roles y seguimiento de estrategias

Cada llamada a `run-episode` calcula y registra automáticamente tres tipos de analíticas:

### 6a. Uso de tokens

Los tokens se cuentan por cada llamada al LLM y se acumulan a lo largo del episodio para el coordinador y para cada agente trabajador por separado. Se imprimen en la consola después del episodio y se guardan dentro del JSON de salida bajo `token_usage`.

**Ejemplo de salida en consola:**```
--- Token Usage ---
  Coordinator : prompt=20,043  completion=2,526  total=22,569
  agent_1     : prompt=1,308   completion=619    total=1,927
  agent_2     : prompt=3,930   completion=451    total=4,381
  agent_3     : prompt=0       completion=0      total=0
  AGGREGATE   : prompt=25,281  completion=3,596  total=28,877
-------------------

Estructura JSON (output["token_usage"]):```json { "coordinator": {"prompt_tokens": 20043, "completion_tokens": 2526, "total_tokens": 22569}, "by_agent": {"agent_1": {"prompt_tokens": 1308, ...}, ...}, "aggregate": {"prompt_tokens": 25281, "completion_tokens": 3596, "total_tokens": 28877} }

root@kitploit:~
**Lectura de recuentos de tokens de una ejecución guardada:**```python
import json
with open("outputs/my_run.json") as f:
    data = json.load(f)

agg = data["token_usage"]["aggregate"]
print(f"Total tokens used: {agg['total_tokens']:,}")
print(f"  Prompt     : {agg['prompt_tokens']:,}")
print(f"  Completion : {agg['completion_tokens']:,}")

# Per-step token usage (inside each worker trace)
for step in data["history"]:
    for report in step["reports"]:
        tok = (report.get("trace") or {}).get("token_usage") or {}
        print(f"Step {step['step']} {report['agent_id']}: {tok.get('total_tokens', 0)} tokens")

Notas del proveedor:

ProveedorCampos leídos
OpenAI Responses APIresponse.usage.input_tokens, .output_tokens
Ollama /api/generatedata["prompt_eval_count"], data["eval_count"]

6b. Recuentos de activación de roles

Después de cada episodio, la CLI cuenta cuántas veces se asignó cada rol en todos los agentes y todos los pasos. Se imprime en la consola y se guarda en output["activation_stats"]["role_counts"].

Ejemplo de salida en consola:``` --- Role Activations --- inactive : 10 profiler : 4 --- Role Activations by Agent --- agent_1 : inactive=3 profiler=1
agent_2 : profiler=3 inactive=2 agent_3 : inactive=5

root@kitploit:~
**Leer recuentos de roles de forma programática:**```python
stats = data["activation_stats"]
print("Most used role:", max(stats["role_counts"], key=stats["role_counts"].get))
print("Role counts:", stats["role_counts"])
print("By agent:", stats["role_counts_by_agent"])

6c. Recuentos de activación de estrategias

El patrón de asignación de roles del coordinador se asigna a una de las ocho estrategias del artículo (S1–S8) en cada paso utilizando las siguientes reglas de inferencia:

Guardado en output["activation_stats"]["strategy_counts"].

Ejemplo de salida por consola:``` --- Strategy Activations --- S1_VICTIM_PROBE : 1 S3_WARM_UP : 4

root@kitploit:~
### 6d. Registro legible por humanos por ejecución

Se escribe automáticamente un archivo `.log` junto a cada JSON de salida
(p. ej., `outputs/my_run.log`). Contiene:

- Metadatos del episodio (conjunto de datos, objetivo, número de agentes, políticas)
- Cronología paso a paso: rango, estrategia, rol de cada agente, acciones y recuento de tokens por llamada
- Resumen del uso de tokens
- Recuentos de activación de roles y estrategias

**Ejecución de la CLI y lectura del registro:**```bash
agas run-episode \
  --dataset ml-latest-small \
  --target-item-id 2571 \
  --target-keyword "Matrix" \
  --num-agents 3 \
  --num-steps 10 \
  --coordinator-policy openai \
  --worker-policy openai \
  --output outputs/run_matrix.json

# Human-readable log is at:
cat outputs/run_matrix.log

# JSON output is at:
python -c "
import json
d = json.load(open('outputs/run_matrix.json'))
print('Token aggregate:', d['token_usage']['aggregate'])
print('Role counts:',    d['activation_stats']['role_counts'])
print('Strategy counts:',d['activation_stats']['strategy_counts'])
"

7. Protocolo y prompts

El Coordinador y cada worker son agentes LLM que leen desde prompts/<role>/{system,user}.txt. El protocolo completo — qué interpola el Coordinador en su prompt, qué variables ven los workers, y los esquemas de salida JSON esperados — está en prompts/README.md.

Resumen breve:

  • Coordinador → JSON con {"strategy": "S?_…", "assignments": {agent: ROLE}}.
  • Workers → JSON con {"actions": [{"item_id": …, "rating": …, "reason": …}]}.
  • Los pools de ítems permitidos dependen del rol (pool de relleno, pool puente, objetivo + competidores) y son aplicados por el código host.

8. Resultados reproducidos del paper

Todos los números a continuación son media ± IC del 95 % sobre 5 semillas, escalados por 10³ (es decir, una celda de 40.0±0.2 significa HR@10 = 0.0400 ± 0.0002). Negrita = mejor, cursiva = segundo mejor, coincidiendo con tables/benchmark_unpopular.tex y tables/detection_mf.tex en el paper.

Promoción de objetivo impopular (tables/benchmark_unpopular.tex)

Reproducir con:```bash bash bash/run_performance.sh # RQ1; writes outputs/rq1_performance/

root@kitploit:~
**Víctimas basadas en embeddings** (celda = `H@10 / NDCG@10`):

| Método | ML-100K·MF(BPR) | ML-100K·NeuMF | ML-1M·GMF | ML-1M·NCF | Amazon·MF(BPR) | Amazon·NCF | Genome·GMF | Genome·NeuMF | Netflix·MF(BPR) | Netflix·NeuMF |
|---|---|---|---|---|---|---|---|---|---|---|
| NoneAttack | 1.8±0.2 / 0.7±0.5 | 2.2±0.2 / 0.9±0.6 | 0.9±0.1 / 0.4±0.3 | 0.8±0.1 / 0.3±0.2 | 0.4±0.1 / 0.1±0.2 | 0.5±0.1 / 0.2±0.2 | 0.2±0.1 / 0.1±0.2 | 0.5±0.1 / 0.2±0.2 | 0.6±0.1 / 0.2±0.2 | 0.7±0.1 / 0.3±0.2 |
| RandomAttack | 4.1±0.3 / 1.6±0.6 | 4.7±0.3 / 1.8±0.6 | 2.4±0.2 / 1.0±0.5 | 2.0±0.2 / 0.8±0.4 | 1.2±0.1 / 0.5±0.3 | 1.3±0.1 / 0.5±0.3 | 0.7±0.1 / 0.3±0.2 | 1.3±0.1 / 0.5±0.3 | 1.8±0.2 / 0.7±0.4 | 2.0±0.2 / 0.8±0.5 |
| BandwagonAttack | 6.2±0.3 / 2.5±0.7 | 6.8±0.3 / 2.7±0.8 | 3.4±0.2 / 1.4±0.6 | 2.9±0.2 / 1.2±0.5 | 2.0±0.1 / 0.8±0.4 | 2.2±0.1 / 0.9±0.4 | 1.2±0.1 / 0.5±0.3 | 2.0±0.1 / 0.8±0.4 | 2.7±0.2 / 1.1±0.5 | 3.0±0.2 / 1.2±0.5 |
| AUSH | 10.6±0.6 / 4.3±1.2 | 10.0±0.5 / 4.1±1.1 | 6.5±0.4 / 2.6±0.9 | 4.3±0.3 / 1.8±0.7 | 3.3±0.3 / 1.3±0.6 | 3.1±0.3 / 1.2±0.6 | 1.9±0.2 / 0.8±0.5 | 2.8±0.3 / 1.1±0.6 | 4.2±0.3 / 1.7±0.7 | 4.5±0.3 / 1.8±0.8 |
| PoisonRec | 13.4±0.7 / 5.3±1.6 | 11.5±0.6 / 4.7±1.5 | 7.6±0.5 / 3.0±1.1 | 5.5±0.4 / 2.1±0.9 | _5.8±0.5_ / _2.3±1.0_ | 4.8±0.3 / 1.9±0.8 | 2.3±0.3 / 0.9±0.6 | 3.2±0.3 / 1.3±0.7 | 5.6±0.4 / 2.2±1.0 | 5.7±0.4 / 2.3±1.0 |
| PGA | 11.5±0.6 / 4.6±1.3 | 12.2±0.6 / 5.0±1.4 | 8.4±0.5 / 3.4±1.1 | 6.0±0.4 / 2.4±0.9 | 4.3±0.3 / 1.7±0.8 | 4.0±0.3 / 1.6±0.7 | 2.8±0.2 / 1.1±0.6 | 3.8±0.3 / 1.5±0.7 | 5.5±0.4 / 2.2±1.0 | 6.0±0.5 / 2.4±1.0 |
| AgentSA | 12.7±0.6 / 5.2±1.4 | _12.5±0.6_ / _5.1±1.4_ | 8.2±0.4 / 3.3±1.0 | _7.2±0.4_ / _2.9±1.0_ | 5.6±0.3 / 2.2±0.9 | 4.9±0.3 / 1.9±0.8 | _2.9±0.2_ / _1.1±0.6_ | 4.2±0.3 / 1.7±0.7 | _6.3±0.4_ / _2.5±1.0_ | 6.5±0.4 / 2.6±1.0 |
| AgentAttack | _13.6±0.7_ / _5.5±1.5_ | 12.1±0.6 / 4.9±1.4 | _8.8±0.5_ / _3.5±1.1_ | 6.8±0.4 / 2.7±1.0 | 5.7±0.3 / 2.2±0.9 | _5.2±0.3_ / _2.0±0.9_ | 2.7±0.2 / 1.0±0.6 | _4.5±0.3_ / _1.8±0.8_ | 6.1±0.4 / 2.4±1.0 | _6.9±0.5_ / _2.8±1.0_ |
| **AGAS (Ours)** | **40.0±0.2 / 16.1±0.3** | **35.0±0.2 / 14.2±0.3** | **22.6±0.1 / 9.0±0.2** | **17.6±0.1 / 7.1±0.2** | **16.1±0.1 / 6.3±0.2** | **15.0±0.1 / 5.9±0.2** | **8.2±0.1 / 3.2±0.2** | **11.5±0.1 / 4.6±0.2** | **18.2±0.1 / 7.3±0.2** | **19.6±0.1 / 7.9±0.2** |
| **Improvement** | **+187.8% / +182.5%** | **+186.9% / +184.0%** | **+162.8% / +164.7%** | **+155.1% / +153.6%** | **+177.6% / +173.9%** | **+172.7% / +168.2%** | **+192.9% / +190.9%** | **+161.4% / +155.6%** | **+198.4% / +192.0%** | **+192.5% / +192.6%** |

**Víctimas basadas en grafos** (celda = `H@10 / NDCG@10`):

| Método | ML-100K·NGCF | ML-100K·LightGCN | ML-1M·SimGCL | ML-1M·XSimGCL | Amazon·EGCF | Amazon·LightCCF | Genome·NGCF | Genome·LightGCN | Douban·NGCF | Douban·LightGCN |
|---|---|---|---|---|---|---|---|---|---|---|
| NoneAttack | 1.9±0.2 / 0.8±0.5 | 2.4±0.2 / 1.0±0.6 | 0.8±0.1 / 0.3±0.2 | 0.9±0.1 / 0.4±0.3 | 0.4±0.1 / 0.2±0.2 | 0.5±0.1 / 0.2±0.2 | 0.2±0.1 / 0.1±0.2 | 0.3±0.1 / 0.1±0.2 | 0.7±0.1 / 0.3±0.2 | 0.6±0.1 / 0.2±0.2 |
| RandomAttack | 4.5±0.3 / 1.8±0.6 | 5.0±0.3 / 2.0±0.7 | 1.8±0.2 / 0.7±0.4 | 2.2±0.2 / 0.9±0.5 | 1.1±0.1 / 0.4±0.3 | 1.2±0.1 / 0.5±0.3 | 0.6±0.1 / 0.2±0.2 | 0.6±0.1 / 0.2±0.2 | 2.0±0.2 / 0.8±0.5 | 1.9±0.2 / 0.7±0.4 |
| BandwagonAttack | 5.9±0.3 / 2.4±0.7 | 6.7±0.3 / 2.7±0.8 | 2.4±0.2 / 1.0±0.5 | 2.9±0.2 / 1.2±0.6 | 1.8±0.2 / 0.7±0.4 | 1.9±0.2 / 0.8±0.4 | 1.1±0.1 / 0.4±0.3 | 1.0±0.1 / 0.4±0.3 | 2.8±0.2 / 1.1±0.6 | 2.7±0.2 / 1.1±0.5 |
| GSPAttack | 11.0±0.6 / 4.5±1.3 | 11.5±0.6 / 4.7±1.3 | 4.8±0.3 / 1.9±0.8 | 5.8±0.4 / 2.3±0.9 | 3.2±0.3 / 1.3±0.6 | 3.4±0.3 / 1.4±0.6 | 2.0±0.2 / 0.8±0.5 | 1.8±0.2 / 0.7±0.5 | 5.0±0.3 / 2.0±0.8 | 4.8±0.3 / 1.9±0.8 |
| TargetedAttack | 11.9±0.6 / 4.8±1.3 | 12.6±0.6 / 5.1±1.4 | 5.4±0.4 / 2.2±0.8 | 6.4±0.4 / 2.5±1.0 | 4.7±0.3 / 1.9±0.7 | 4.5±0.3 / 1.8±0.7 | 2.5±0.2 / 1.0±0.6 | 2.2±0.2 / 0.9±0.5 | 5.4±0.4 / 2.2±0.8 | 5.2±0.3 / 2.1±0.8 |
| CLeaR | 13.1±0.7 / 5.4±1.4 | 13.9±0.7 / 5.7±1.5 | 6.4±0.4 / 2.6±0.9 | 7.7±0.5 / 3.1±1.0 | 4.6±0.3 / 1.8±0.7 | 5.2±0.4 / 2.1±0.8 | 2.9±0.3 / 1.2±0.6 | 2.8±0.2 / 1.1±0.6 | 5.8±0.4 / 2.3±0.9 | 5.5±0.3 / 2.2±0.9 |
| AgentSA | 13.8±0.6 / 5.6±1.4 | _14.2±0.7_ / _5.8±1.5_ | 6.1±0.4 / 2.4±0.8 | _8.4±0.5_ / _3.3±1.0_ | 4.5±0.3 / 1.8±0.7 | _5.4±0.3_ / _2.2±0.8_ | 2.8±0.2 / 1.1±0.6 | _2.9±0.2_ / _1.1±0.6_ | 5.4±0.3 / 2.2±0.8 | _5.8±0.4_ / _2.3±0.9_ |
| AgentAttack | _14.4±0.7_ / _5.9±1.5_ | 14.0±0.7 / 5.6±1.5 | _6.6±0.4_ / _2.6±0.9_ | 8.0±0.5 / 3.1±1.0 | _4.9±0.3_ / _1.9±0.7_ | 5.0±0.3 / 2.0±0.8 | _3.1±0.3_ / _1.2±0.6_ | 2.5±0.2 / 1.0±0.5 | _6.0±0.4_ / _2.4±0.9_ | 5.5±0.3 / 2.2±0.9 |
| **AGAS (Ours)** | **40.0±0.2 / 17.0±0.3** | **40.5±0.2 / 16.5±0.3** | **16.8±0.1 / 6.7±0.2** | **20.7±0.1 / 8.2±0.2** | **13.1±0.1 / 5.2±0.2** | **13.8±0.1 / 5.4±0.2** | **8.9±0.1 / 3.4±0.2** | **7.8±0.1 / 3.1±0.2** | **17.0±0.1 / 6.8±0.2** | **16.9±0.1 / 6.7±0.2** |
| **Improvement** | **+181.7% / +193.1%** | **+189.3% / +194.6%** | **+162.5% / +157.7%** | **+155.6% / +156.2%** | **+178.7% / +173.7%** | **+165.4% / +157.1%** | **+196.7% / +183.3%** | **+178.6% / +181.8%** | **+193.1% / +195.7%** | **+196.5% / +191.3%** |

## 9. Licencia

Licencia MIT.
Descargar herramienta
ComponenteRequisitoProbado con
Python≥ 3.103.13.5
PyTorch≥ 2.1 (solo targets)2.11.0+cu128
CUDAopcional12.8
NumPy≥ 1.242.4.2
Pandas≥ 2.03.0.1
SciPy≥ 1.101.17.0
scikit-learn≥ 1.31.8.0
openai SDK≥ 1.122.21.0
EtapaDatos utilizadosDetalles
EntrenamientoTodas las interacciones en interactions.csvEl sustituto (y cualquier modelo objetivo) se ajusta sobre el conjunto completo de calificaciones históricas.
Evaluación del ataqueRanking sobre usuarios del segmentoDespués de cada ronda, el rango medio del ítem objetivo se mide entre usuarios benignos reales que calificaron ≥ 4.0 en al menos un ítem del clúster objetivo (hasta 2 000 usuarios). No se escribe ningún conjunto de prueba reservado en disco.
Inyección falsaAñadida en memoriaLas interacciones de usuarios falsos se añaden y el modelo se reajusta de forma incremental en cada ronda. Nunca se mezclan en los archivos CSV canónicos.
CondiciónEstrategia inferida
Fase de sondeo / agente de diagnóstico activoS1_VICTIM_PROBE
Indicador de alerta establecido (a_t = 1)S7_SAFE_REPLACEMENT
Puntuación máxima de sospecha ≥ 0.5S6_PROFILE_CLEANUP
Sin snipers + descuento visibleS5_SILENT_SLOWDOWN
Sin snipers + sin descuentoS3_WARM_UP
Snipers activosS4_FIRST_PUSH
Snipers activosS8_MAIN_ATTACK