Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
Tools/GitHubGitHub/phkhanhtrinh23/agas
Maschinelles LernenPapers & ForschungLernen & BildungKI-SicherheitAdversarial-Angriff
GitHubphkhanhtrinh23/agas

AGAS

LLM-gesteuertes agentisches Framework für Group-Shilling-Angriffe, das Black-Box-Collaborative-Filtering-Empfehlungsrankings mithilfe adaptiver Multi-Rollen-Strategien manipuliert und dabei der Erkennung entgeht.

Repository anzeigen
210vor 3 TagenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Ein effizienter und effektiver agentischer Gruppen-Shilling-Angriff auf Empfehlungssysteme

Dies ist der offizielle Code zum Paper: „An Efficient and Effective Agentic Group Shilling Attack on Recommender Systems“. Dieses Paper stellt AGAS vor, einen LLM-gesteuerten Shilling-Angriff gegen Black-Box-Collaborative-Filtering-Empfehlungssysteme. Ein Coordinator orchestriert einen Pool von Fake-User-Workern über eine Sequenz von Runden. In jeder Runde wählt der Coordinator eine von acht Strategien und weist jedem Worker eine Rolle zu. Die Worker entscheiden dann, welche Items sie bewerten, indem sie ihre eigene ReAct-artige Reasoning-Schleife verwenden.

AGAS pipeline


1. Repo-Überblick```

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. Methodenrückblick

AGAS instanziiert vier Worker-Rollen (Papiersymbole in `roles.py`):

| Symbol | Langname       | Was es tut                                                              |
|--------|----------------|-------------------------------------------------------------------------|
| `PR`   | Profiler       | Sichere Filler-Item-Bewertungen, um die Plattform zu sondieren und Bridge-Pools aufzubauen. |
| `SN`   | Sniper         | Payload-Rolle; direkter Ziel-Push oder Bridge-Item-Promotion.           |
| `CA`   | Camouflageur   | Stealth-Rolle; baut Vertrauen mit harmlos wirkender Aktivität wieder auf. |
| `IN`   | Inactive       | Keine Aktion in dieser Runde (Cool-down oder Quarantäne).               |

Jede Runde wählt der Coordinator genau eine von acht Strategien aus
`strategies.py` (siehe `method_strategies.tex`):

1. **Victim Probe** (`S1_VICTIM_PROBE`)
2. **Bridge Building** (`S2_BRIDGE_BUILDING`, nur Graph-Opfer)
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`)

Der Coordinator steuert diese Entscheidungen aus zwei Signalgruppen (`signals.py`):

* **Worker-Signale** `τ_{t,w}, γ_{t,w}, φ_{t,w}` — Vertrauen, Risiko und ein
  struktureller Validator. Die Aktualisierungsgleichungen stimmen exakt mit
  `method_coordinator.tex` überein (`eq:trust_update`, `eq:risk_update`, `eq:risk_decay`,
  `eq:profile_validator`).
* **Umgebungssignale** `ρ^{(t)}, Δρ^{(t)}, η_t, ξ_t = (q_t, s_t), a_t` —
  Rang, Rangbewegung, Akzeptanzrate, Unterdrückungssignal, Alarm-Flag. Der
  Verdachtswert `q_t` ist die mit 0,2 gewichtete Summe der fünf normalisierten
  Terme `(d̂_t, δ̂_t, m̂_t, ŝ_t, g_t)` aus `eq:round_suppression_terms` und
  `eq:round_suppression_score`.

### Runden-Schleife (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*)}]

Die äußere Schleife ist in src/agas/simulation/episode.py implementiert und spiegelt algorithms/agas_end_to_end.tex wider.

3. Umgebung

PyTorch und CUDA werden nur für die Deep-Learning-Victim-Modelle benötigt (Extra [targets]). Die Kern-AGAS-Schleife und die regelbasierten / Surrogat-Pfade laufen auf der CPU ohne GPU-Abhängigkeit.

4. Installation```bash

pip install -e .

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

pip install -e '.[targets]'

root@kitploit:~
Erforderliche Umgebungsvariablen:

| Variable           | Zweck                                                       | Standard                  |
|--------------------|---------------------------------------------------------------|--------------------------|
| `OPENAI_API_KEY`   | OpenAI Responses API-Schlüssel für die Coordinator-/Worker-LLMs.   | *(nicht gesetzt → Fallback)*     |
| `OPENAI_MODEL`     | An OpenAI übergebener Modellname.                                  | `gpt-5.1`                |

## 4. Datensätze

Das Paper evaluiert auf sechs öffentlichen CF-Benchmarks (siehe `experiment.tex`):

| Kurzname  | Quelle                    | Nutzer     | Elemente  | Interaktionen       | Download                                                          | Rohdateien ablegen in  |
|-------------|---------------------------|----------:|-------:|-------------------:|-------------------------------------------------------------------|---------------------|
| 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 (begrenzt) | [GroupLens](https://grouplens.org/datasets/movielens/tag-genome-2021/)  | `data/genome2021/`  |
| Netflix     | Netflix Prize             |   342,445 | 17,434 | 2,000,000 (begrenzt) | [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 (begrenzt) | [UCSD](https://nijianmo.github.io/amazon/index.html)              | `data/amazon/`      |

Nachdem die Rohdownloads in `data/<dataset>/` abgelegt wurden, führe aus:```bash
python scripts/preprocess_all.py --data-root data --output-root processed

Jeder Datensatz wird in kanonische interactions.csv + items.csv-Dateien unter processed/<dataset>/ umgeschrieben. Die Smoke-Tests verwenden das deutlich kleinere ml-latest-small-Beispiel, das mit MovieLens ausgeliefert wird.

Train-/Test-Split-Protokoll

Die Vorverarbeitungs-Pipeline speichert keine Split-Dateien — sie exportiert das vollständige Interaktionsprotokoll. Splits werden zur Laufzeit angewendet:

Dies folgt dem Standard-Evaluierungsprotokoll für Shilling-Angriffe: Der Angreifer beobachtet die Rankings des Opfers auf Nutzern des Trainingssets und optimiert entsprechend, was ein Black-Box-Einsatzszenario nachahmt.

5. Ausführung

scripts/run_agas.py ist der einzige Einstiegspunkt. Die sieben Flags, die das Paper-Protokoll erfordert, sind:``` 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           | Bedeutung                                                                                        |
|----------------|--------------------------------------------------------------------------------------------------|
| `--dataset`    | Eines von `ml-100k`, `ml-1m`, `genome2021`, `netflix`, `douban`, `amazon`, `ml-latest-small`.       |
| `--victim`     | Eines der 11 Opfer aus `experiment.tex` (`mf`, `bpr`, `neumf`, `gmf`, `ncf`, `ngcf`, `lightgcn`, `simgcl`, `xsimgcl`, `egcf`, `lightccf`). |
| `--rounds`     | Anzahl der AGAS-Runden `T` (Standard im Paper: `18`).                                                  |
| `--seed`       | Zufallsseed (das Paper mittelt über fünf).                                                          |
| `--n_workers`  | Größe des Fake-User-Pools |
| `--budget`     | Interaktionsbudget pro Nutzer `L`, ausgedrückt als Bruchteil von.                                |
| `--out`        | Ausgabe-JSON-Pfad für die vollständige Episode-Aufzeichnung und Zusammenfassungsmetriken.                                 |

### Reproduktion jeder Forschungsfrage anhand einer winzigen ML-100K-Stichprobe```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

Jedes Skript gibt aus, welches Experiment es ausführt, den Ausgabepfad und einen Hinweis auf die entsprechende Abbildung/Tabelle im Paper.

Beispiel einer erwarteten Konsolenausgabe (gekürzt):``` [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:~
### Transfer-Angriff gegen LightGCN (in-loop)

Führt LightGCN sowohl als Episode-Modell als auch als Evaluierungsziel aus. Das Opfer
trainiert nach jeder Runde neu, sodass der Coordinator echtes Rang-Feedback erhält und
Rollen und Strategie entsprechend anpasst.```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

FlagBedeutung
--profiler-bridge-method cooccurrenceBridge-Elemente werden durch Ko-Okkurrenz mit dem Rater-Cluster des Ziels ausgewählt.
--graph-sniperSniper bewerten Bridge-Elemente und das Ziel direkt (Dual-Aktion).

Nach dem Lauf werden die Ergebnisse ausgegeben und in der Ausgabe-JSON gespeichert:``` 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. Token-Protokollierung, Rollenaktivierung & Strategieverfolgung

Jeder `run-episode`-Aufruf berechnet und protokolliert automatisch drei Arten von Analysen:

### 6a. Token-Nutzung

Tokens werden pro LLM-Aufruf gezählt und über die Episode hinweg für den
Koordinator und für jeden Worker-Agenten separat akkumuliert. Sie werden nach
der Episode auf der Konsole ausgegeben und im Ausgabe-JSON unter
`token_usage` gespeichert.

**Beispiel für die Konsolenausgabe:**```
--- 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
-------------------

JSON-Struktur (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:~
**Token-Zählungen aus einem gespeicherten Lauf lesen:**```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")

Hinweise zu den Anbietern:

AnbieterGelesene Felder
OpenAI Responses APIresponse.usage.input_tokens, .output_tokens
Ollama /api/generatedata["prompt_eval_count"], data["eval_count"]

6b. Rollenaktivierungszählungen

Nach jeder Episode zählt die CLI, wie oft jede Rolle über alle Agenten und alle Schritte hinweg zugewiesen wurde. Ausgegeben auf der Konsole und gespeichert unter output["activation_stats"]["role_counts"].

Beispiel für Konsolenausgabe:``` --- 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:~
**Rollenanzahlen programmatisch auslesen:**```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. Aktivierungszählungen der Strategien

Das Rollenzuweisungsmuster des Koordinators wird bei jedem Schritt mithilfe der folgenden Inferenzregeln einer der acht Paper-Strategien (S1–S8) zugeordnet:

Gespeichert unter output["activation_stats"]["strategy_counts"].

Beispiel für Konsolenausgabe:``` --- Strategy Activations --- S1_VICTIM_PROBE : 1 S3_WARM_UP : 4

root@kitploit:~
### 6d. Menschenlesbares Protokoll pro Durchlauf

Neben jeder Ausgabe-JSON wird automatisch eine `.log`-Datei geschrieben
(z. B. `outputs/my_run.log`). Sie enthält:

- Episoden-Metadaten (Datensatz, Ziel, Agentenanzahl, Richtlinien)
- Zeitleiste pro Schritt: Rang, Strategie, Rolle jedes Agenten, Aktionen und Token-Anzahl pro Aufruf
- Zusammenfassung der Token-Nutzung
- Zählungen der Rollen- und Strategieaktivierungen

**Ausführen der CLI und Lesen des Protokolls:**```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. Protokoll und Prompts

Der Coordinator und jeder Worker sind LLM-Agenten, die aus prompts/<role>/{system,user}.txt lesen. Das vollständige Protokoll — was der Coordinator in seinen Prompt interpoliert, welche Variablen die Worker sehen und die erwarteten JSON-Ausgabeschemata — befindet sich in prompts/README.md.

Kurze Zusammenfassung:

  • Coordinator → JSON mit {"strategy": "S?_…", "assignments": {agent: ROLE}}.
  • Worker → JSON mit {"actions": [{"item_id": …, "rating": …, "reason": …}]}.
  • Erlaubte Item-Pools sind rollenabhängig (Filler-Pool, Bridge-Pool, Target + Konkurrenten) und werden durch den Host-Code durchgesetzt.

8. Reproduzierte Ergebnisse aus dem Paper

Alle Zahlen unten sind Mittelwert ± 95 %-KI über 5 Seeds, skaliert mit 10³ (d. h. eine Zelle mit 40.0±0.2 bedeutet HR@10 = 0.0400 ± 0.0002). Fett = bestes, kursiv = zweitbestes, übereinstimmend mit tables/benchmark_unpopular.tex und tables/detection_mf.tex im Paper.

Förderung unbeliebter Ziele (tables/benchmark_unpopular.tex)

Reproduzieren mit:```bash bash bash/run_performance.sh # RQ1; writes outputs/rq1_performance/

root@kitploit:~
**Embedding-basierte Opfer** (Zelle = `H@10 / NDCG@10`):

| Methode | 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%** |

**Graph-basierte Opfer** (Zelle = `H@10 / NDCG@10`):

| Methode | 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. Lizenz

MIT-Lizenz.
Tool herunterladen
KomponenteAnforderungGetestet mit
Python≥ 3.103.13.5
PyTorch≥ 2.1 (nur targets)2.11.0+cu128
CUDAoptional12.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
PhaseVerwendete DatenDetails
TrainingAlle Interaktionen in interactions.csvDas Surrogat (und jedes Zielmodell) wird auf dem vollständigen Satz historischer Bewertungen angepasst.
AngriffsbewertungRanking über SegmentnutzerNach jeder Runde wird der mittlere Rang des Zielitems über echte gutartige Nutzer gemessen, die mindestens ein Item des Zielclusters mit ≥ 4,0 bewertet haben (bis zu 2 000 Nutzer). Es wird kein zurückgehaltenes Testset auf die Festplatte geschrieben.
Fake-InjektionIm Speicher angehängtFake-Nutzer-Interaktionen werden angehängt und das Modell wird in jeder Runde inkrementell neu angepasst. Sie werden niemals in die kanonischen CSV-Dateien eingemischt.
BedingungAbgeleitete Strategie
Probe-Phase / diagnostischer Agent aktivS1_VICTIM_PROBE
Alert-Flag gesetzt (a_t = 1)S7_SAFE_REPLACEMENT
Maximaler Verdachtsscore ≥ 0.5S6_PROFILE_CLEANUP
Keine Scharfschützen + sichtbares DiscountingS5_SILENT_SLOWDOWN
Keine Scharfschützen + kein DiscountingS3_WARM_UP
Scharfschützen aktivS4_FIRST_PUSH
Scharfschützen aktivS8_MAIN_ATTACK