このリポジトリには、以下の論文の公式実装が含まれています:
プロンプトの先へ:シミュレートされたモデレーショントレースによる関数呼び出しLLMのジェイルブレイク
このリポジトリが研究に役立つ場合は、ぜひ論文を引用してください。質問、バグ報告、再現性に関する問題は、GitHub Issues からお寄せください。

.
├── install.sh # Installation script for setting up the environment and dependencies
├── main.py # Main evaluation entry point
├── demo.ipynb # Minimal working example
├── requirements.txt # Python dependencies
├── data/
│ ├── SafeBench-Tiny.txt # Default benchmark
│ └── JailbreakBench.txt # Optional benchmark
├── figures/
│ ├── pipline.jpg # Framework overview
│ ├── main_res1.jpg # Main result figure
│ └── main_res2.jpg # Main result figure
├── utils/
│ ├── config.example.json # Example API configuration
│ ├── eval_h_cot.py # External evaluation utility
│ ├── fake_tool_call_noharmful.json
│ ├── moderation_generator.py
│ └── moderation_validator.py
└── output/ # Checkpoints and evaluation results
Python環境を自動的にセットアップし、必要な依存関係をすべてインストールするためのインストールスクリプトを提供しています。
chmod +x install.sh
./install.sh
インストールが完了したら、仮想環境をアクティブ化します:
source .venv/bin/activate
あるいは、Condaを使用して手動で環境を作成することもできます:
conda create -n SMT python=3.12
conda activate SMT
pip install -r requirements.txt
サンプルファイルから utils/config.json を作成します:
cp utils/config.example.json utils/config.json
最小限の設定ファイルは次の形式に従う必要があります:
{
"llm_api": {
"base_url": "https://your-api-endpoint/v1",
"api_key": "YOUR_API_KEY"
},
"local": {
"base_url": "http://localhost:1234/v1",
"api_key": "YOUR_LOCAL_API_KEY"
}
}
2つのエントリは以下に対応します:
llm_api: 商用モデル向けのデフォルトのOpenAI互換APIエンドポイント。local: 選択したローカルモデルで使用される、ローカルのOpenAI互換推論エンドポイント。main.py を開き、ファイル冒頭付近にある実験設定を変更します:
DATA_FILE = "SafeBench-Tiny.txt"
# DATA_FILE = "JailbreakBench.txt"
TARGET_MODELS = [
"gpt-4o-2024-11-20",
# "gpt-5.4-2026-03-05",
# "qwen3-max-2026-01-23",
# "gemini-3-flash-preview",
# "deepseek-v4-flash",
# "claude-sonnet-4-5-20250929",
]
utils/config.json で設定された API エンドポイントに対して有効なモデル識別子を使用してください。
デフォルトのパラメータは main.py で定義されています:
MAX_THREADS = 1
MAX_ROUNDS = 3
TURNS_NUM = 3
RESET = False
それぞれの意味は次のとおりです:
| パラメータ | 説明 |
|---|---|
MAX_THREADS | ターゲットモデルごとの最大同時ワーカー数 |
MAX_ROUNDS | 最大外側リトライラウンド数 |
TURNS_NUM | サンプルごとの最大マルチターン対話試行回数 |
RESET | 評価前に既存のチェックポイントを破棄するかどうか |
設定:
RESET = True
選択したモデルで新規実行を開始します。既存のチェックポイントから再開する場合は False のままにしてください。
python main.py
各ターゲットモデルに対して、スクリプトは自動的に以下を実行します。
data/ から選択したベンチマークを読み込みます。結果は以下に保存されます。
output/attack_checkpoint_<dataset>_<model>.json
例:
output/attack_checkpoint_SafeBench-Tiny_gpt-4o-2024-11-20.json
各ベンチマーク項目は、次のようなフィールドとともに保存されます:
{
"target_question": {
"success": true,
"queries": 3,
"payload": "...",
"score": 60
}
}
スクリプトは以下の指標を報告します:
| 指標 | 説明 |
|---|---|
| ASR | 攻撃成功率: スコアが設定された閾値に達したサンプルの割合 |
| Avg.Q | サンプルあたりに使用されたAPIクエリの平均数 |
| Avg.Score | 全サンプルにわたる外部評価スコアの平均 |
主要なSMT実験はAPIベースであり、ローカルGPUを必要としません。
MAX_ROUNDS = 3 および TURNS_NUM = 3 では、SMTは早期停止前にベンチマークサンプルあたり最大9回のターゲットモデルクエリを使用します。ローカルにデプロイされたモデルの場合、追加のGPUおよびメモリ要件は、選択したモデルと推論バックエンドに依存します。
商用LLM APIは継続的に更新されています。同じモデルエイリアスを使用している場合でも、プロバイダー側のモデル更新、ルーティング動作、安全ポリシーの変更、デコーディング設定、または一時的なAPI障害により、結果が異なる場合があります。
再現性を向上させるには:
このリポジトリで報告されているすべての実験は2026年6月に実施されました。シミュレートされた検証トレースにはランダム化された要素が含まれているため、モデルの出力は本質的に確率的であり、モデルの能力と外部検出メカニズムの両方が進化し続けているため、同じ高レベルの設定であっても、正確なインタラクション履歴および再現された結果はここで報告されているものと異なる場合があります。


私たちの評価では、SMTを複数の商用関数呼び出しLLMおよび2つの安全性ベンチマークにわたる代表的なジェイルブレイクベースラインと比較しています。
完全な実験設定、ベースラインの実装、統計的詳細、および防御分析については論文を参照してください。
このプロジェクトは、安全性が整合された関数呼び出しLLMシステムにおける失敗モードを研究します。コードおよび関連資料は以下を支援することを目的としています:
ユーザーは、適用される法律、機関の審査要件、APIプロバイダーの利用規約、および責任ある開示の慣行を遵守する責任があります。
許可なくこのフレームワークを本番システムに対して展開することは強く推奨されません。研究者は、生の有害な出力、API認証情報、個人識別情報、または無制限の攻撃アーティファクトを公開リポジトリで公開することを避けるべきです。
このリポジトリが役立つと思われた場合は、以下を引用してください:
@inproceedings{liu2027smt,
title={Beyond the Prompt: Jailbreaking Function-Calling LLMs via Simulated Moderation Traces},
author={Junlong Liu and Haobo Wang and Weiqi Luo and Xiaojun Jia},
booktitle={{IEEE} Symposium on Security and Privacy},
year={2027}
}