
إطار هجوم ترويج جماعي قائم على الوكلاء مدفوع بنموذج لغوي كبير يتلاعب بترتيبات أنظمة التوصية القائمة على التصفية التعاونية ذات الصندوق الأسود باستخدام استراتيجيات متعددة الأدوار تكيفية مع تفادي الكشف.
هذا هو الكود الرسمي للورقة البحثية: "An Efficient and Effective Agentic Group Shilling Attack on Recommender Systems". تقدّم هذه الورقة AGAS، وهو هجوم شيلينغ مدفوع بنماذج اللغة الكبيرة (LLM) ضد أنظمة التوصية القائمة على التصفية التعاونية ذات الصندوق الأسود. يقوم منسّق (Coordinator) واحد بتنسيق مجموعة من العاملين (workers) الوهميين من المستخدمين المزيّفين عبر سلسلة من الجولات. في كل جولة، يختار المنسّق واحدة من ثماني استراتيجيات ويُسنِد دورًا لكل عامل. ثم يقرّر العاملون العناصر التي سيقيّمونها باستخدام حلقة استدلال خاصة بهم على نمط 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
## 2. ملخص الطريقة
يقوم AGAS بإنشاء أربعة أدوار للعاملين (رموز الورقة في `roles.py`):
| الرمز | الاسم الكامل | ما يفعله |
|--------|----------------|-------------------------------------------------------------------------|
| `PR` | Profiler | تقييمات آمنة لعناصر الحشو لاستكشاف المنصة وبناء مجموعات الجسور. |
| `SN` | Sniper | دور الحمولة؛ الدفع المباشر نحو الهدف أو ترقية عنصر الجسر. |
| `CA` | Camouflageur | دور التخفي؛ يعيد بناء الثقة من خلال نشاط يبدو حميدًا. |
| `IN` | Inactive | لا إجراء في هذه الجولة (تهدئة أو حجر صحي). |
في كل جولة يختار المنسق واحدة بالضبط من ثماني استراتيجيات من
`strategies.py` (انظر `method_strategies.tex`):
1. **Victim Probe** (`S1_VICTIM_PROBE`)
2. **Bridge Building** (`S2_BRIDGE_BUILDING`، لضحايا الرسم البياني فقط)
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`)
يقود المنسق هذه القرارات انطلاقًا من مجموعتي إشارات (`signals.py`):
* **إشارات العاملين** `τ_{t,w}, γ_{t,w}, φ_{t,w}` — الثقة، والمخاطر، ومدقق
بنيوي. تطابق معادلات التحديث `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` —
الرتبة، وحركة الرتبة، ومعدل القبول، وإشارة الكبت، وعلم التنبيه. درجة
الاشتباه `q_t` هي المجموع الموزون بمعامل 0.2 للمصطلحات الخمسة المعيارية
`(d̂_t, δ̂_t, m̂_t, ŝ_t, g_t)` من `eq:round_suppression_terms` و
`eq:round_suppression_score`.
### حلقة الجولة (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*)}]
تُنفَّذ الحلقة الخارجية في src/agas/simulation/episode.py وتحاكي
algorithms/agas_end_to_end.tex.
| المكوّن | المتطلب | تم اختباره مع |
|---|---|---|
| Python | ≥ 3.10 | 3.13.5 |
| PyTorch | ≥ 2.1 (الأهداف فقط) | 2.11.0+cu128 |
| CUDA | اختياري | 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 وCUDA إلا لنماذج الضحية الخاصة بالتعلّم العميق (إضافة [targets]). تعمل حلقة AGAS الأساسية والمسارات القائمة على القواعد / البديلة على CPU دون أي اعتماد على GPU.
pip install -e .
pip install -e '.[targets]'
متغيرات البيئة المطلوبة:
| المتغير | الغرض | الافتراضي |
|--------------------|---------------------------------------------------------------|--------------------------|
| `OPENAI_API_KEY` | مفتاح OpenAI Responses API لوكلاء Coordinator / worker LLMs. | *(غير معيّن → fallback)* |
| `OPENAI_MODEL` | اسم النموذج المُمرَّر إلى OpenAI. | `gpt-5.1` |
## 4. Datasets
تقيّم الورقة البحثية على ستة معايير CF عامة (انظر `experiment.tex`):
| الاسم المختصر | المصدر | المستخدمون | العناصر | التفاعلات | التنزيل | ضع الملفات الخام في |
|-------------|---------------------------|----------:|-------:|-------------------:|-------------------------------------------------------------------|---------------------|
| 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 (محدود) | [GroupLens](https://grouplens.org/datasets/movielens/tag-genome-2021/) | `data/genome2021/` |
| Netflix | Netflix Prize | 342,445 | 17,434 | 2,000,000 (محدود) | [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 (محدود) | [UCSD](https://nijianmo.github.io/amazon/index.html) | `data/amazon/` |