┌─────────────────────────────────────────────────────────────────┐
│ 工具 A: Garak (現有流程) │
├─────────────────────────────────────────────────────────────────┤
│ 1. garak 生成對抗樣本 → ~/.local/share/garak/garak_runs/ │
│ 2. convert_garak_to_inspect.py → adversarial_dataset/*.json │
│ 3. inspect eval shield_audit_workflow.py │
│ │
│ 控制方式: scripts/run_audit.sh (已整合) │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ 工具 B: FuzzyAI (新建工具) │
├─────────────────────────────────────────────────────────────────┤
│ 1. generate_fuzzyai_dataset.py → adversarial_dataset/*.json │
│ 2. inspect eval examples/eval_fuzzyai_dataset.py │
│ │
│ 控制方式: 獨立執行 (未整合) │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ 工具 C: shield_audit_workflow.py (整合中樞) │
├─────────────────────────────────────────────────────────────────┤
│ - 從 adversarial_dataset/ 自動載入最新的 Garak 資料集 │
│ - 動態組裝攻擊端 Solver │
│ - 動態組裝裁判端 Scorer │
│ - 執行完整審計流程 │
│ │
│ 問題: 尚未支援 FuzzyAI 資料集載入 │
└─────────────────────────────────────────────────────────────────┘
理念: 保持工具獨立性,透過統一入口協調
✅ 職責清晰: 每個工具專注自己的任務 ✅ 易於維護: 各工具可獨立開發與測試 ✅ 彈性高: 可以單獨使用任一工具或組合使用 ✅ 擴展性強: 未來新增其他生成器(如 AdversarialNLP)只需加入 run_audit.sh
# scripts/run_audit.sh 升級版
┌─────────────────────────────────────────────────────────────────┐
│ 統一入口: run_audit.sh --mode [garak|fuzzyai|both|custom] │
└─────────────────────────────────────────────────────────────────┘
│
├─ [模式 1] --mode garak
│ └─ 執行現有 Garak 流程
│
├─ [模式 2] --mode fuzzyai
│ ├─ 1. generate_fuzzyai_dataset.py
│ └─ 2. inspect eval shield_audit_workflow.py
│
├─ [模式 3] --mode both (預設)
│ ├─ 1. garak 生成
│ ├─ 2. convert_garak_to_inspect.py
│ ├─ 3. generate_fuzzyai_dataset.py
│ └─ 4. inspect eval shield_audit_workflow.py (載入兩個資料集)
│
└─ [模式 4] --mode custom
└─ 透過 --dataset 參數指定自訂資料集路徑
# 在 Step 4 資料集載入段落加入 FuzzyAI 支援
dataset = []
# 1. 載入 Garak 資料集 (現有邏輯)
if weapons.get('enable_garak_injection', False):
garak_files = glob.glob(str(dataset_dir / "garak_adversarial_dataset_*.json"))
# ... 載入邏輯
# 2. 載入 FuzzyAI 資料集 (新增)
if weapons.get('enable_fuzzyai', False):
fuzzyai_files = glob.glob(str(dataset_dir / "fuzzyai_adversarial_dataset_*.json"))
if fuzzyai_files:
latest_fuzzyai = max(fuzzyai_files, key=os.path.getctime)
# ... 載入邏輯
print(f"📥 偵測到 FuzzyAI 資料集,正在載入: {Path(latest_fuzzyai).name}")
# 3. 合併資料集
print(f"✅ 總共載入 {len(dataset)} 筆測資 (Garak: {garak_count}, FuzzyAI: {fuzzyai_count})")
weapons_loadout:
genai_text:
enable_garak_injection: true
enable_fuzzyai: true # 新增開關
fuzzyai_config: # 新增配置區塊
engine: "ollama"
model: "llama3:8b"
topics:
- "惡意程式開發"
- "機密資料竊取"
- "釣魚攻擊"
count_per_topic: 10
delay: 0.5
理念: 將 FuzzyAI 完全嵌入 shield_audit_workflow.py
❌ 耦合過緊: FuzzyAI 變成 workflow 的一部分 ❌ 難以測試: 無法單獨測試 FuzzyAI 生成邏輯 ❌ 降低彈性: 無法在其他專案中重用 FuzzyAI ❌ 增加複雜度: workflow 腳本變得臃腫
# 這樣做會讓 shield_audit_workflow.py 變成巨石腳本
@task
def shield_hybrid_audit():
# 1. 初始化 Garak
# 2. 執行 Garak
# 3. 轉換 Garak 結果
# 4. 初始化 FuzzyAI (新增)
# 5. 執行 FuzzyAI (新增)
# 6. 轉換 FuzzyAI 結果 (新增)
# 7. 合併資料集
# 8. 執行評估
# ... 500+ 行代碼
fuzzyai_adversarial_dataset_*.json--mode 參數(garak/fuzzyai/both/custom)--dataset 參數支援自訂資料集enable_fuzzyai 開關fuzzyai_config 配置區塊bash scripts/run_audit.sh --mode garak
bash scripts/run_audit.sh --mode fuzzyai \
--fuzzyai-engine ollama \
--fuzzyai-count 20 \
--fuzzyai-topics "惡意程式" "釣魚攻擊"
bash scripts/run_audit.sh --mode both \
--fuzzyai-engine nim \
--fuzzyai-count 30
bash scripts/run_audit.sh --mode custom \
--dataset ../custom_datasets/my_adversarial_data.json
┌───────────────────────────────────────────────────────────────────┐
│ scripts/run_audit.sh │
│ (統一入口 + 參數路由) │
└───────────────────────────────────────────────────────────────────┘
│
┌───────────────┴───────────────┐
│ │
┌───────▼────────┐ ┌────────▼─────────┐
│ Garak 生成器 │ │ FuzzyAI 生成器 │
│ (promptinject │ │ (8種變異策略) │
│ dan, sysprompt) │ NIM/vLLM/Ollama │
└───────┬────────┘ └────────┬─────────┘
│ │
│ convert_garak_to_inspect.py │
│ │
▼ ▼
garak_adversarial_dataset_ fuzzyai_adversarial_dataset_
YYYYMMDD_HHMMSS.json YYYYMMDD_HHMMSS.json
│ │
└───────────────┬───────────────┘
│
┌───────────▼───────────┐
│ shield_audit_workflow │
│ (Inspect AI) │
│ │
│ ├─ 自動偵測資料集 │
│ ├─ 組裝 Solver │
│ ├─ 組裝 Scorer │
│ └─ 執行審計 │
└───────────┬───────────┘
│
┌───────────▼───────────┐
│ inspect_report/ │
│ (審計報告輸出) │
└───────────────────────┘
| 特性 | 方案 A (輕量整合) | 方案 B (深度整合) |
|---|---|---|
| 工具獨立性 | ✅ 高 | ❌ 低 |
| 維護成本 | ✅ 低 | ❌ 高 |
| 彈性 | ✅ 高 | ❌ 低 |
| 擴展性 | ✅ 易 | ❌ 難 |
| 測試難度 | ✅ 低 | ❌ 高 |
| 學習曲線 | ✅ 平緩 | ❌ 陡峭 |
| 推薦指數 | ⭐⭐⭐⭐⭐ | ⭐⭐ |
推薦採用方案 A(輕量整合),原因:
下一步:是否要我開始實施方案 A?