
إطار هجوم ترويج جماعي قائم على الوكلاء مدفوع بنموذج لغوي كبير يتلاعب بترتيبات أنظمة التوصية القائمة على التصفية التعاونية ذات الصندوق الأسود باستخدام استراتيجيات متعددة الأدوار تكيفية مع تفادي الكشف.
هذا هو الكود الرسمي للورقة البحثية: "An Efficient and Effective Agentic Group Shilling Attack on Recommender Systems". تقدم هذه الورقة AGAS، وهو هجوم تزوير مدفوع بنماذج اللغة الكبيرة (LLM) ضد أنظمة التوصية القائمة على التصفية التعاونية ذات الصندوق الأسود. يقوم منسّق واحد بتنسيق مجموعة من العمال من المستخدمين المزيفين عبر سلسلة من الجولات. في كل جولة، يختار المنسّق واحدة من ثماني استراتيجيات ويُسنِد دورًا لكل عامل. ثم يقرر العمال العناصر التي سيقيّمونها باستخدام حلقة استدلال خاصة بهم على نمط 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 بإنشاء أربعة أدوار للعاملين (رموز الورقة في roles.py):
| الرمز | الاسم الكامل | ما الذي يفعله |
|---|---|---|
PR | Profiler | تقييمات آمنة لعناصر الحشو لاستكشاف المنصة وبناء مجموعات الجسور. |
SN | Sniper | دور الحمولة؛ دفع مباشر نحو الهدف أو ترقية عنصر الجسر. |
CA | Camouflageur | دور التخفّي؛ يعيد بناء الثقة عبر نشاط يبدو حميدًا. |
IN | Inactive | لا إجراء في هذه الجولة (تهدئة أو حجر). |
في كل جولة يختار المنسّق استراتيجية واحدة بالضبط من بين ثماني استراتيجيات من
strategies.py (انظر method_strategies.tex):
S1_VICTIM_PROBE)S2_BRIDGE_BUILDING، ضحايا الرسم البياني فقط)S3_WARM_UP)S4_FIRST_PUSH)S5_SILENT_SLOWDOWN)S6_PROFILE_CLEANUP)S7_SAFE_REPLACEMENT)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. ┌─────────────────────────────────────────────────┐
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 .
# If you want to use the deep-learning victim models (LightGCN, NeuMF, …)
pip install -e '.[targets]'
متغيرات البيئة المطلوبة:
| المتغير | الغرض | الافتراضي |
|---|---|---|
OPENAI_API_KEY | مفتاح OpenAI Responses API لمنسّق / نماذج العمال LLMs. | (غير معيّن → احتياطي) |
OPENAI_MODEL | اسم النموذج المُمرَّر إلى OpenAI. | gpt-5.1 |
تقيّم الورقة البحثية على ستة معايير CF عامة (انظر experiment.tex):
| الاسم المختصر | المصدر | المستخدمون | العناصر | التفاعلات | التنزيل | ضع الملفات الخام في |
|---|---|---|---|---|---|---|
| ML-100K | MovieLens 100K | 943 | 1,682 | 100,000 | GroupLens | data/ml-100k/ |
| ML-1M | MovieLens 1M | 6,040 | 3,706 | 1,000,209 | GroupLens | data/ml-1m/ |
| Genome 2021 | MovieLens Tag Genome 2021 | 37,941 | 84,661 | 2,000,000 (محدود) | GroupLens | data/genome2021/ |
| Netflix | Netflix Prize | 342,445 | 17,434 | 2,000,000 (محدود) | Kaggle | data/netflix/ |
| Douban | Douban Movie | 28,057 | 49,176 | 8,085,679 | HKUST | data/douban/ |
| Amazon | Amazon Reviews 2018 | 998,653 | 30,964 | 2,000,000 (محدود) | UCSD | data/amazon/ |