Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
AGAS — إطار هجوم ترويج جماعي قائم على الوكلاء مدفوع بنموذج لغوي كبير يتلاعب بترتيبات أنظمة التوصية القائمة على التصفية التعاونية ذات الصندوق الأسود باستخدام استراتيجيات متعددة الأدوار تكيفية مع تفادي الكشف. | Kitploit
أدوات/GitHubGitHub/phkhanhtrinh23/agas
تعلم الآلةالأوراق والأبحاثالتعلم والتعليمأمن الذكاء الاصطناعيالهجوم العدائي
GitHubphkhanhtrinh23/agas

AGAS

إطار هجوم ترويج جماعي قائم على الوكلاء مدفوع بنموذج لغوي كبير يتلاعب بترتيبات أنظمة التوصية القائمة على التصفية التعاونية ذات الصندوق الأسود باستخدام استراتيجيات متعددة الأدوار تكيفية مع تفادي الكشف.

عرض المستودع
210منذ 3 أياملم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

هجوم شيلينغ جماعي وكيلي فعّال وفعّال على أنظمة التوصية

هذا هو الكود الرسمي للورقة البحثية: "An Efficient and Effective Agentic Group Shilling Attack on Recommender Systems". تقدّم هذه الورقة AGAS، وهو هجوم شيلينغ مدفوع بنماذج اللغة الكبيرة (LLM) ضد أنظمة التوصية القائمة على التصفية التعاونية ذات الصندوق الأسود. يقوم منسّق (Coordinator) واحد بتنسيق مجموعة من العاملين (workers) الوهميين من المستخدمين المزيّفين عبر سلسلة من الجولات. في كل جولة، يختار المنسّق واحدة من ثماني استراتيجيات ويُسنِد دورًا لكل عامل. ثم يقرّر العاملون العناصر التي سيقيّمونها باستخدام حلقة استدلال خاصة بهم على نمط ReAct.

AGAS pipeline


1. نظرة عامة على المستودع```

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. ملخص الطريقة

يقوم 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.

3. البيئة

لا يُشترط PyTorch وCUDA إلا لنماذج الضحية الخاصة بالتعلّم العميق (إضافة [targets]). تعمل حلقة AGAS الأساسية والمسارات القائمة على القواعد / البديلة على CPU دون أي اعتماد على GPU.

4. التثبيت```bash

pip install -e .

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

pip install -e '.[targets]'

root@kitploit:~
متغيرات البيئة المطلوبة:

| المتغير            | الغرض                                                         | الافتراضي                |
|--------------------|---------------------------------------------------------------|--------------------------|
| `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/`      |

بعد إسقاط التنزيلات الخام في `data/<dataset>/`، شغّل:```bash
python scripts/preprocess_all.py --data-root data --output-root processed

يُعاد كتابة كل مجموعة بيانات إلى ملفات interactions.csv + items.csv القياسية تحت processed/<dataset>/. تستخدم اختبارات التحقق السريع عيّنة ml-latest-small الأصغر بكثير التي تُشحن مع MovieLens.

بروتوكول تقسيم التدريب / الاختبار

لا تُخزّن خط أنابيب المعالجة المسبقة أي ملفات تقسيم — بل تُصدّر سجل التفاعل الكامل. تُطبَّق عمليات التقسيم في وقت التشغيل:

يتبع هذا بروتوكول تقييم هجوم التزييف القياسي: يراقب المهاجم ترتيبات الضحية على مستخدمي مجموعة التدريب ويحسّن وفقًا لذلك، محاكيًا سيناريو نشر الصندوق الأسود.

5. كيفية التشغيل

scripts/run_agas.py هو نقطة الدخول الوحيدة. الأعلام السبعة المطلوبة بموجب بروتوكول الورقة البحثية هي:``` 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:~
| العلامة        | المعنى                                                                                          |
|----------------|--------------------------------------------------------------------------------------------------|
| `--dataset`    | واحد من `ml-100k`، `ml-1m`، `genome2021`، `netflix`، `douban`، `amazon`، `ml-latest-small`.       |
| `--victim`     | واحد من 11 ضحية من `experiment.tex` (`mf`، `bpr`، `neumf`، `gmf`، `ncf`، `ngcf`، `lightgcn`، `simgcl`، `xsimgcl`، `egcf`، `lightccf`). |
| `--rounds`     | عدد جولات AGAS `T` (القيمة الافتراضية في الورقة `18`).                                                  |
| `--seed`       | البذرة العشوائية (تأخذ الورقة المتوسط على خمس بذور).                                                          |
| `--n_workers`  | حجم مجموعة المستخدمين الوهميين |
| `--budget`     | ميزانية التفاعل لكل مستخدم `L`، معبَّر عنها ككسر من.                                |
| `--out`        | مسار JSON الناتج لتتبع الحلقة الكامل ومقاييس الملخص.                                 |

### إعادة إنتاج كل سؤال بحثي على عينة صغيرة من 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

كل سكربت يطبع التجربة التي يقوم بتشغيلها، ومسار الإخراج، وملاحظة تشير إلى الشكل/الجدول المقابل في الورقة البحثية.

مثال على الإخراج المتوقع في الطرفية (مقتطع):``` [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:~
### هجوم النقل ضد LightGCN (داخل الحلقة)

يشغّل LightGCN كلاً من نموذج الحلقة وهدف التقييم. يعيد الضحية التدريب بعد كل جولة
بحيث يتلقى المنسّق تغذية راجعة حقيقية عن الترتيب ويكيّف الأدوار والاستراتيجية وفقاً لذلك.```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

العَلمالمعنى
--profiler-bridge-method cooccurrenceيتم اختيار عناصر الجسر بناءً على التواجد المشترك مع مجموعة المُقيّمين الخاصة بالهدف.
--graph-sniperيقوم القنّاصون بتقييم عناصر الجسر و الهدف مباشرةً (إجراء مزدوج).

بعد انتهاء التشغيل، تُطبع النتائج وتُحفظ في ملف JSON الناتج:``` 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. تسجيل الرموز، تفعيل الأدوار وتتبع الاستراتيجية

كل استدعاء لـ `run-episode` يحسب ويسجل تلقائيًا ثلاثة أنواع من التحليلات:

### 6a. استخدام الرموز

يتم عد الرموز لكل استدعاء LLM وتجميعها عبر الحلقة لكل من المنسق وكل وكيل عامل بشكل منفصل. يتم طباعتها إلى وحدة التحكم بعد الحلقة وحفظها داخل JSON الناتج تحت `token_usage`.

**مثال على مخرجات وحدة التحكم:**```
--- 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 (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:~
**قراءة عدد الرموز من تشغيل محفوظ:**```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")

ملاحظات المزوّد:

المزوّدالحقول المقروءة
OpenAI Responses APIresponse.usage.input_tokens, .output_tokens
Ollama /api/generatedata["prompt_eval_count"], data["eval_count"]

6b. عدّادات تنشيط الأدوار

بعد كل حلقة، يحسب CLI عدد المرات التي تم فيها تعيين كل دور عبر جميع الوكلاء وجميع الخطوات. يُطبع في الطرفية ويُحفظ تحت output["activation_stats"]["role_counts"].

مثال على مخرجات الطرفية:``` --- 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:~
**قراءة عدد الأدوار برمجيًا:**```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. أعداد تفعيل الاستراتيجيات

يُربط نمط تعيين الأدوار لدى المنسّق بإحدى استراتيجيات الورقة الثماني (S1–S8) في كل خطوة باستخدام قواعد الاستدلال التالية:

محفوظة تحت output["activation_stats"]["strategy_counts"].

مثال على مخرجات الطرفية:``` --- Strategy Activations --- S1_VICTIM_PROBE : 1 S3_WARM_UP : 4

root@kitploit:~
### 6d. سجل مقروء بشريًا لكل تشغيل

يُكتب ملف `.log` إلى جانب كل ملف JSON ناتج تلقائيًا
(على سبيل المثال `outputs/my_run.log`). يحتوي على:

- بيانات وصفية للحلقة (مجموعة البيانات، الهدف، عدد الوكلاء، السياسات)
- الجدول الزمني لكل خطوة: الرتبة، الاستراتيجية، دور كل وكيل، الإجراءات، وعدد الرموز لكل استدعاء
- ملخص استخدام الرموز
- إحصاءات تفعيل الأدوار والاستراتيجيات

**تشغيل CLI وقراءة السجل:**```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. البروتوكول والمطالبات

المنسّق وكل عامل هم وكلاء LLM يقرؤون من prompts/<role>/{system,user}.txt. البروتوكول الكامل — ما يستبدله المنسّق في مطالبه، والمتغيرات التي يراها العمال، ومخططات مخرجات JSON المتوقعة — موجود في prompts/README.md.

ملخص موجز:

  • المنسّق ← JSON مع {"strategy": "S?_…", "assignments": {agent: ROLE}}.
  • العمال ← JSON مع {"actions": [{"item_id": …, "rating": …, "reason": …}]}.
  • مجموعات العناصر المسموح بها تعتمد على الدور (مجموعة الحشو، مجموعة الجسر، الهدف + المنافسون) ويتم فرضها بواسطة كود المضيف.

8. النتائج المستنسخة من الورقة البحثية

جميع الأرقام أدناه هي المتوسط ± فاصل الثقة 95% على مدى 5 بذور، مقيسة بمقياس 10³ (أي أن خلية بقيمة 40.0±0.2 تعني HR@10 = 0.0400 ± 0.0002). الخط العريض = الأفضل، المائل = الثاني في الأفضلية، مطابقًا لـ tables/benchmark_unpopular.tex و tables/detection_mf.tex في الورقة البحثية.

تعزيز الأهداف غير الشائعة (tables/benchmark_unpopular.tex)

أعد الإنتاج باستخدام:```bash bash bash/run_performance.sh # RQ1; writes outputs/rq1_performance/

root@kitploit:~
**الضحايا القائمون على التضمين** (الخلية = `H@10 / NDCG@10`):

| الطريقة | 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%** |

**الضحايا القائمون على الرسم البياني** (الخلية = `H@10 / NDCG@10`):

| الطريقة | 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. الترخيص

رخصة MIT.
تنزيل الأداة
المكوّنالمتطلبتم اختباره مع
Python≥ 3.103.13.5
PyTorch≥ 2.1 (الأهداف فقط)2.11.0+cu128
CUDAاختياري12.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
المرحلةالبيانات المستخدمةالتفاصيل
التدريبجميع التفاعلات في interactions.csvيُدرَّب النموذج البديل (وأي نموذج هدف) على المجموعة الكاملة من التقييمات التاريخية.
تقييم الهجومالترتيب على مستخدمي الشريحةبعد كل جولة، يُقاس متوسط رتبة العنصر الهدف عبر المستخدمين الحقيقيين الحميدين الذين قيّموا ≥ 4.0 على الأقل لعنصر واحد من عناصر مجموعة الهدف (حتى 2 000 مستخدم). لا تُكتب أي مجموعة اختبار محجوزة على القرص.
الحقن المزيّفتُضاف في الذاكرةتُضاف تفاعلات المستخدمين المزيّفين ويُعاد تدريب النموذج تدريجيًا في كل جولة. ولا تُخلط أبدًا في ملفات CSV القياسية.
الشرطالاستراتيجية المستنتجة
مرحلة التحقق / وكيل التشخيص نشطS1_VICTIM_PROBE
علامة التنبيه مضبوطة (a_t = 1)S7_SAFE_REPLACEMENT
أقصى درجة اشتباه ≥ 0.5S6_PROFILE_CLEANUP
لا قناصة + خصم مرئيS5_SILENT_SLOWDOWN
لا قناصة + لا خصمS3_WARM_UP
القناصة نشطونS4_FIRST_PUSH
القناصة نشطونS8_MAIN_ATTACK