
Framework d'attaque de shilling de groupe agentique piloté par LLM qui manipule les classements de systèmes de recommandation à filtrage collaboratif en boîte noire à l'aide de stratégies multi-rôles adaptatives tout en échappant à la détection.
Ceci est le code officiel de l'article : « An Efficient and Effective Agentic Group Shilling Attack on Recommender Systems ». Cet article présente AGAS, qui est une attaque de shilling pilotée par LLM contre des systèmes de recommandation à filtrage collaboratif en boîte noire. Un Coordinateur orchestre un pool de workers utilisateurs factices sur une séquence de tours. À chaque tour, le Coordinateur choisit l'une des huit stratégies et attribue un rôle à chaque worker. Les workers décident ensuite quels items noter en utilisant leur propre boucle de raisonnement de style ReAct.
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
AGAS instancie quatre rôles de travailleurs (symboles de l'article dans roles.py) :
| Symbole | Nom complet | Ce qu'il fait |
|---|---|---|
PR | Profiler | Évaluations sûres d'éléments de remplissage pour sonder la plateforme et construire des pools de pont. |
SN | Sniper | Rôle de charge utile ; poussée directe de la cible ou promotion d'élément de pont. |
CA | Camouflageur | Rôle furtif ; reconstruit la confiance avec une activité d'apparence bénigne. |
IN | Inactif | Aucune action ce tour (refroidissement ou quarantaine). |
À chaque tour, le Coordinateur choisit exactement l'une des huit stratégies de
strategies.py (voir method_strategies.tex) :
S1_VICTIM_PROBE)S2_BRIDGE_BUILDING, victimes de graphe uniquement)S3_WARM_UP)S4_FIRST_PUSH)S5_SILENT_SLOWDOWN)S6_PROFILE_CLEANUP)S7_SAFE_REPLACEMENT)S8_MAIN_ATTACK)Le Coordinateur pilote ces décisions à partir de deux groupes de signaux (signals.py) :
τ_{t,w}, γ_{t,w}, φ_{t,w} — confiance, risque et un
validateur structurel. Les équations de mise à jour correspondent exactement à method_coordinator.tex
(eq:trust_update, eq:risk_update, eq:risk_decay,
eq:profile_validator).ρ^{(t)}, Δρ^{(t)}, η_t, ξ_t = (q_t, s_t), a_t —
rang, mouvement de rang, taux d'acceptation, signal de suppression, indicateur d'alerte. Le
score de suspicion q_t est la somme pondérée à 0,2 des cinq termes normalisés
(d̂_t, δ̂_t, m̂_t, ŝ_t, g_t) issus de eq:round_suppression_terms et
eq:round_suppression_score. ┌─────────────────────────────────────────────────┐
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*)}]
La boucle externe est implémentée dans src/agas/simulation/episode.py et reflète
algorithms/agas_end_to_end.tex.
| Composant | Exigence | Testé avec |
|---|---|---|
| Python | ≥ 3.10 | 3.13.5 |
| PyTorch | ≥ 2.1 (cibles uniquement) | 2.11.0+cu128 |
| CUDA | facultatif | 12.8 |
| NumPy | ≥ 1.24 | 2.4.2 |
| Pandas | ≥ 2.0 | 3.0.1 |
| SciPy | ≥ 1.10 | 1.17.0 |
| scikit-learn | ≥ 1.3 | 1.8.0 |
| openai SDK | ≥ 1.12 | 2.21.0 |
PyTorch et CUDA ne sont requis que pour les modèles victimes d'apprentissage profond (extra [targets]). La boucle AGAS principale et les chemins basés sur des règles / substituts fonctionnent sur CPU sans dépendance GPU.
pip install -e .
# If you want to use the deep-learning victim models (LightGCN, NeuMF, …)
pip install -e '.[targets]'
Variables d'environnement requises :
| Variable | Objectif | Valeur par défaut |
|---|---|---|
OPENAI_API_KEY | Clé API OpenAI Responses pour les LLM Coordinateur / worker. | (non définie → repli) |
OPENAI_MODEL | Nom du modèle transmis à OpenAI. | gpt-5.1 |
L'article évalue sur six benchmarks CF publics (voir experiment.tex) :