
LLM-संचालित एजेंटिक समूह शिलिंग हमला ढांचा जो अनुकूली बहु-भूमिका रणनीतियों का उपयोग करके ब्लैक-बॉक्स सहयोगी-फ़िल्टरिंग सिफ़ारिश रैंकिंग में हेरफेर करता है और साथ ही पकड़ में आने से बचता है।
यह पेपर का आधिकारिक कोड है: "An Efficient and Effective Agentic Group Shilling Attack on Recommender Systems"। यह पेपर AGAS प्रस्तुत करता है, जो ब्लैक-बॉक्स कोलैबोरेटिव-फ़िल्टरिंग रिकमेंडर्स के विरुद्ध एक LLM-संचालित शिलिंग अटैक है। एक Coordinator राउंड्स के एक क्रम में फ़ेक-यूज़र workers के एक पूल को ऑर्केस्ट्रेट करता है। प्रत्येक राउंड में, Coordinator आठ रणनीतियों में से एक चुनता है और प्रत्येक worker को एक रोल सौंपता है। इसके बाद 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` | प्रोफाइलर | प्लेटफ़ॉर्म की जाँच करने और ब्रिज पूल बनाने के लिए सुरक्षित फ़िलर-आइटम रेटिंग। |
| `SN` | स्नाइपर | पेलोड भूमिका; सीधा लक्ष्य पुश या ब्रिज-आइटम प्रोन्नति। |
| `CA` | कैमोफ्लाजर | स्टील्थ भूमिका; सौम्य दिखने वाली गतिविधि से विश्वास पुनर्निर्मित करता है। |
| `IN` | निष्क्रिय | इस राउंड में कोई कार्रवाई नहीं (कूल-डाउन या क्वारंटाइन)। |
प्रत्येक राउंड में समन्वयक `strategies.py` से आठ रणनीतियों में से ठीक एक चुनता है
(`method_strategies.tex` देखें):
1. **विक्टिम प्रोब** (`S1_VICTIM_PROBE`)
2. **ब्रिज बिल्डिंग** (`S2_BRIDGE_BUILDING`, केवल ग्राफ़ विक्टिम)
3. **वार्म-अप** (`S3_WARM_UP`)
4. **फर्स्ट पुश** (`S4_FIRST_PUSH`)
5. **साइलेंट स्लोडाउन** (`S5_SILENT_SLOWDOWN`)
6. **प्रोफ़ाइल क्लीनअप** (`S6_PROFILE_CLEANUP`)
7. **सेफ रिप्लेसमेंट** (`S7_SAFE_REPLACEMENT`)
8. **मेन अटैक** (`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` पाँच सामान्यीकृत पदों `(d̂_t, δ̂_t, m̂_t, ŝ_t, g_t)` का 0.2-भारित योग है
जो `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 (केवल targets) | 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] extra) के लिए आवश्यक हैं। मुख्य AGAS लूप और नियम-आधारित / सरोगेट पथ बिना किसी GPU निर्भरता के CPU पर चलते हैं।
pip install -e .
pip install -e '.[targets]'
आवश्यक environment variables:
| Variable | उद्देश्य | डिफ़ॉल्ट |
|--------------------|---------------------------------------------------------------|--------------------------|
| `OPENAI_API_KEY` | Coordinator / worker LLMs के लिए OpenAI Responses API key। | *(unset → fallback)* |
| `OPENAI_MODEL` | OpenAI को पास किया गया model name। | `gpt-5.1` |
## 4. Datasets
यह पेपर छह सार्वजनिक CF benchmarks पर मूल्यांकन करता है (देखें `experiment.tex`):
| Short name | Source | Users | Items | Interactions | Download | Place raw files 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 (capped) | [GroupLens](https://grouplens.org/datasets/movielens/tag-genome-2021/) | `data/genome2021/` |
| Netflix | Netflix Prize | 342,445 | 17,434 | 2,000,000 (capped) | [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 (capped) | [UCSD](https://nijianmo.github.io/amazon/index.html) | `data/amazon/` |
raw downloads को `data/<dataset>/` में डालने के बाद, चलाएँ:```bash
python scripts/preprocess_all.py --data-root data --output-root processed
प्रत्येक डेटासेट को processed/<dataset>/ के अंतर्गत canonical interactions.csv + items.csv फ़ाइलों में पुनः लिखा जाता है। स्मोक टेस्ट MovieLens के साथ आने वाले बहुत छोटे ml-latest-small सैंपल का उपयोग करते हैं।