Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
AGAS — LLM駆動のエージェント型集団シリング攻撃フレームワーク。適応的なマルチロール戦略を用いてブラックボックスの協調フィルタリング推薦ランキングを操作しつつ、検出を回避する。 | Kitploit
ツール/GitHubGitHub/phkhanhtrinh23/agas
機械学習論文と研究学習と教育AIセキュリティ敵対的攻撃
GitHubphkhanhtrinh23/agas

AGAS

LLM駆動のエージェント型集団シリング攻撃フレームワーク。適応的なマルチロール戦略を用いてブラックボックスの協調フィルタリング推薦ランキングを操作しつつ、検出を回避する。

リポジトリを見る
233日前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

推薦システムに対する効率的かつ効果的なエージェント型グループ・シリング攻撃

これは論文「An Efficient and Effective Agentic Group Shilling Attack on Recommender Systems」の公式コードです。本論文ではAGASを紹介します。これは、ブラックボックスの協調フィルタリング推薦システムに対するLLM駆動のシリング攻撃です。1つの Coordinatorが、一連のラウンドにわたって偽ユーザーのworkerプールを統制します。各ラウンドで、Coordinatorは8つの戦略のうち1つを選択し、 すべてのworkerに役割を割り当てます。その後、workerは自身の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 は 4 つのワーカーロールをインスタンス化します(`roles.py` 内の論文記号):

| 記号 | 正式名称 | 役割 |
|--------|----------------|-------------------------------------------------------------------------|
| `PR`   | Profiler       | プラットフォームを調査しブリッジプールを構築するための安全なフィラー項目評価。  |
| `SN`   | Sniper         | ペイロード役割;直接ターゲットプッシュまたはブリッジ項目の昇格。              |
| `CA`   | Camouflageur   | ステルス役割;無害に見える活動で信頼を再構築。                              |
| `IN`   | Inactive       | このラウンドはアクションなし(クールダウンまたは隔離)。                         |

各ラウンドで Coordinator は `strategies.py` から 8 つの戦略のうちちょうど 1 つを選択します(`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`)

Coordinator はこれらの決定を 2 つのシグナルグループ(`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` は `eq:round_suppression_terms` と `eq:round_suppression_score` からの 5 つの正規化項 `(d̂_t, δ̂_t, m̂_t, ŝ_t, g_t)` の 0.2 重み付き和です。

### ラウンドループ(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 ループおよびルールベース/サロゲートのパスは、GPU 依存なしで CPU 上で動作します。

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`   | Coordinator / worker LLM 用の OpenAI Responses API キー。     | *(未設定 → フォールバック)* |
| `OPENAI_MODEL`     | OpenAI に渡されるモデル名。                                   | `gpt-5.1`                |

## 4. データセット

本論文では6つの公開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

各データセットは、processed/<dataset>/ 配下の正規化された interactions.csv + items.csv ファイルに書き換えられます。スモークテストでは、MovieLens に同梱されているはるかに小さい ml-latest-small サンプルを使用します。

訓練 / テスト分割プロトコル

前処理パイプラインは分割ファイルを一切保存しません — 完全なインタラクションログをエクスポートします。分割は実行時に適用されます:

これは標準的なシリング攻撃評価プロトコルに従っています: 攻撃者は訓練セットユーザーに対する被害者のランキングを観察し、それに応じて最適化を行い、ブラックボックス展開シナリオを模倣します。

5. 実行方法

scripts/run_agas.py が唯一のエントリポイントです。論文のプロトコルで必要な7つのフラグは以下の通りです:``` 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`     | `experiment.tex` に記載された11のvictim(`mf`、`bpr`、`neumf`、`gmf`、`ncf`、`ngcf`、`lightgcn`、`simgcl`、`xsimgcl`、`egcf`、`lightccf`)のいずれか。 |
| `--rounds`     | AGASのラウンド数 `T`(論文のデフォルトは `18`)。                                                  |
| `--seed`       | ランダムシード(論文では5回の平均をとる)。                                                          |
| `--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に対する転移攻撃(in-loop)

LightGCNをエピソードモデルと評価ターゲットの両方として実行します。被害者は
毎ラウンド後に再トレーニングするため、Coordinatorは実際のランクフィードバックを受け取り、
それに応じて役割と戦略を適応させます。```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` の呼び出しごとに、3種類の分析が自動的に計算され、ログに記録されます:

### 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. 戦略発動回数

コーディネーターの役割割り当てパターンは、以下の推論ルールを用いて各ステップで8つの論文戦略(S1~S8)のいずれかにマッピングされます:

output["activation_stats"]["strategy_counts"] に保存されます。

コンソール出力例:``` --- Strategy Activations --- S1_VICTIM_PROBE : 1 S3_WARM_UP : 4

root@kitploit:~
### 6d. 実行ごとの人間が読めるログ

すべての出力 JSON と並んで `.log` ファイルが自動的に書き出されます
(例: `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. プロトコルとプロンプト

Coordinator とすべての worker は、prompts/<role>/{system,user}.txt を読み込む LLM エージェントです。完全なプロトコル — Coordinator がプロンプトに補間する内容、worker が参照する変数、期待される JSON 出力スキーマ — は prompts/README.md に記載されています。

簡単な概要:

  • Coordinator → {"strategy": "S?_…", "assignments": {agent: ROLE}} を含む JSON。
  • Workers → {"actions": [{"item_id": …, "rating": …, "reason": …}]} を含む JSON。
  • 許可される item プールは role に依存し(filler プール、bridge プール、target + competitors)、ホストコードによって強制されます。

8. 論文から再現された結果

以下のすべての数値は 5 シードにわたる平均 ± 95 % CI、10³ でスケーリングされています(つまり、40.0±0.2 のセルは HR@10 = 0.0400 ± 0.0002 を意味します)。太字 = 最良、斜体 = 2 番目に良い、論文の 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 License.
ツールをダウンロード
コンポーネント要件テスト済みバージョン
Python≥ 3.103.13.5
PyTorch≥ 2.1 (targets のみ)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 内のすべてのインタラクションサロゲート(および任意のターゲットモデル)は、過去の評価の完全なセットでフィットされます。
攻撃評価セグメントユーザーに対するランキング各ラウンド後、ターゲットアイテムの平均ランクが、少なくとも1つのターゲットクラスターアイテムに ≥ 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