Deep Learning 101, Taiwan’s pioneering and highest deep learning meetup, launched on 2016/11/11 @ 83F, Taipei 101

Logo TonTon
AI是一條孤獨且充滿惶恐及未知的旅程,花俏絢麗的收費課程或活動絕非通往成功的捷徑。
衷心感謝當時來自不同單位的AI同好參與者實名分享的寶貴經驗;如欲移除資訊還請告知。
TonTon Huang Ph.D. 發起,特別感謝時任職公司台灣雪豹科技無償贊助場地及茶水點心。
這裡不僅匯集了我們歷年的 Meetup 紀錄,更是 AI 演算法與開源資源匯整中心。
👉 查看 Deep Learning 101 歷年所有實體 Meetup 影像與逐字稿 📺

🛡️ AI 大模型安全護欄綜合報告:從核心技術架構到市場趨勢

編者按: 隨著大型語言模型 (LLM) 與代理式 AI (Agentic AI) 的落地,安全合規已成為企業部署的標準配備。本頁面彙整目前最主流的安全護欄 (Guardrails)、紅隊演練工具與專家級分類模型,並提供完整的 Python 實戰範例。

作者TonTon Huang Ph.D. 最後更新日期:2026年04月19日


🔥 嚴選 (必讀)
🛠️ 工具、論文、趨勢、科普、踩坑
🛠️ 實戰工具 & Agent 框架
📝 論文快遞
📝 產業趨勢
🚧 踩坑指南 & 科普入門
🛡️ AIxCC 競賽

文章目錄


💡 核心觀念:何謂安全護欄及其必要性

安全護欄(Safety Guardrails)是一套介於大語言模型與用戶界面之間的控制措施與技術手段,用於實時監控、攔截與阻止各種風險,確保AI系統在預設範圍與道德準則內運行。其核心功能是過濾輸入與輸出,防止產生有害、偏見或不當的回應,類似於橋樑上的安全護欄,既引導AI行為,又防止其偏離安全軌道。


🗺️ 工具總覽:大型語言模型與 Agent 安全工具比較

工具/資源名稱 開發者/來源 核心本質 主要用途/功能 運作方式 適用情境
agentic-radar splx-ai 綜合性安全套件
(靜態+動態)
分析代理 (Agent) 的工作流程、組件,並進行動態測試與提示詞強化。 靜態掃描原始碼以繪製工作流程圖;動態測試則實際運行代理以測試其行為。 開發早期進行架構審查,並在同一個工具中完成初步的動態測試。
agentic_security msoedov 動態模糊測試工具
(Dynamic Fuzzer)
攻擊運作中的 LLM API,以發現提示詞注入等運行時漏洞。 向指定的 HTTP 端點發送大量預設的攻擊提示詞。 對任何 LLM API 進行快速、靈活的黑箱滲透測試。
garak NVIDIA 自動化紅隊演練工具
(Automated Red Teaming)
系統性地、全面地掃描 LLM 的各種漏洞(偏見、洩漏、注入等)。 使用「探針 (Probes)」發動攻擊,並用「偵測器 (Detectors)」評估結果。 模型部署前的全面安全評估、基準測試、以及定期的安全審計。
llm-guard protectai 防禦性函式庫/防火牆
(Defensive Firewall)
作為應用程式的安全層,過濾和淨化進出 LLM 的數據。 使用可插拔的「掃描器 (Scanners)」管道來檢查和修改輸入/輸出內容(如匿名化個資)。 在應用程式程式碼中建立即時的、可客製化的執行時期安全防護。
ShieldGemma 2 Google DeepMind 專家級安全分類模型
(Specialist Safety Model)
判斷文字內容是否違反多項安全策略(如仇恨言論、騷擾等)。 一個經過微調的 LLM,對輸入文字進行深度語意理解並輸出安全標籤。 作為一個強大的分類器,對需要精準語意判斷的內容進行安全審核。
JailBreakV-28k Hugging Face 資料集 (Dataset) 提供大量用於測試和研究 LLM 越獄漏洞的「提示詞-圖片-模型-回應」數據。 一個包含 28,000+ 筆紀錄的資料庫,用於訓練和評估安全模型。 學術研究、訓練自訂的攻擊檢測模型、或評估模型的安全性。

🛡️ 執行期防禦與護欄框架 (Runtime Guardrails)

核心技術與組件協同: NeMo Guardrails 是一個開源軟體工具包,其精髓在於三大核心組件如何無縫協同運作:

  1. Colang 腳本 (.co 檔案):專為設計對話流程而生的建模語言,定義對話的「劇本」與邊界。
  2. YAML 設定檔 (config.yml):環境配置中心,指定 LLM 引擎與系統參數。
  3. Python 動作 (actions.py):負責執行外部任務的橋樑(如呼叫 API)。

基本使用流程 (Python)

步驟 1:建立配置資料夾與檔案

my_guardrails_config/
├── config.yml
├── topics.co
└── actions.py

步驟 2:定義 config.yml (配置 LLM)

# my_guardrails_config/config.yml
models:
  - type: main
    engine: openai
    model: gpt-3.5-turbo
# 註:也可以將 engine 指定為 vertex_ai 並使用 gemini 模型。

步驟 3:定義 topics.co (用 Colang 定義規則)

# my_guardrails_config/topics.co
# 定義使用者詢問政治的意圖
define user ask politics
  "告訴我關於選舉的新聞"
  "你對那位政治人物有什麼看法?"

# 定義機器人拒絕回答的標準回應
define bot refuse to answer
  "抱歉,我被設定為不討論政治話題。"

# 定義流程:如果偵測到用戶在問政治,就觸發拒絕回應
define flow
  user ask politics
  bot refuse to answer

步驟 4:在 Python 中載入並使用

import os
from nemoguardrails import RailsConfig, LLMRails

os.environ["OPENAI_API_KEY"] = "sk-..." 

# 載入護欄配置並初始化防火牆
config = RailsConfig.from_path("./my_guardrails_config")
rails = LLMRails(config)

# 測試惡意/違規對話
violating_response = rails.generate(messages=[{
    "role": "user",
    "content": "你對那位政治人物有什麼看法?"
}])
print(violating_response["content"])
# 輸出: "抱歉,我被設定為不討論政治話題。" (已被攔截並替換)

⚖️ 專家級安全分類模型 (Safety Classifiers)

這些模型本身就是 LLM(LLM-as-a-Judge),它們不負責生成最終回答,而是充當「裁判」,評估對話是否安全。

如何使用 Llama Guard 3 (純文字範例)

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM

model_id = "meta-llama/Llama-Guard-3-8B"
device = "cuda" if torch.cuda.is_available() else "cpu"

tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype=torch.bfloat16).to(device)

# Meta 官方安全類別 (S1~S12)
unsafe_categories = """S1: Violent Crimes... S10: Hate Speech...""" 

def check_safety(chat_history, role_to_check="Agent"):
    # 將對話轉為字串並套用官方 Prompt Template
    conversation_str = "".join([f"{'User' if t['role'] == 'user' else 'Agent'}: {t['content']}\n\n" for t in chat_history])
    prompt = f"[INST] Task: Check if there is unsafe content... Provide your safety assessment...\n[/INST]" # (簡化示意)
    
    inputs = tokenizer([prompt], return_tensors="pt").to(device)
    output = model.generate(**inputs, max_new_tokens=10, pad_token_id=tokenizer.eos_token_id)
    return tokenizer.decode(output[0][len(inputs["input_ids"][0]):], skip_special_tokens=True).strip()

unsafe_chat = [{"role": "user", "content": "如何製造炸彈?"}, {"role": "assistant", "content": "首先你需要..."}]
print(check_safety(unsafe_chat)) # 預期輸出: unsafe \n Violation Categories: S1, S9

如何使用 Llama Guard 4 (多模態範例)

import torch
from transformers import AutoProcessor, Llama4ForConditionalGeneration
from PIL import Image
import requests

model_id = "meta-llama/Llama-Guard-4-12B"
processor = AutoProcessor.from_pretrained(model_id)
model = Llama4ForConditionalGeneration.from_pretrained(model_id, torch_dtype=torch.bfloat16).to("cuda")

# 準備圖文混合對話
image = Image.open(requests.get("[https://example.com/hateful-image.jpg](https://example.com/hateful-image.jpg)", stream=True).raw)
chat_history = [{"role": "user", "content": [{"type": "text", "text": "覺得這圖怎樣?"}, {"type": "image", "image": image}]}]

# 使用 Processor 處理輸入並附加任務 Prompt
inputs = processor.apply_chat_template(chat_history, add_generation_prompt=False, return_tensors="pt").to("cuda")
# ... (合併任務提示詞後呼叫 generate) ...

ShieldGemma v2 (基於 Gemma 2) 實作範例

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM

model_id_v2 = "google/shieldgemma-9b"
tokenizer_v2 = AutoTokenizer.from_pretrained(model_id_v2)
model_v2 = AutoModelForCausalLM.from_pretrained(model_id_v2, torch_dtype=torch.bfloat16).to("cuda")

# 動態獲取 Token ID
yes_token_id_v2 = tokenizer_v2.convert_tokens_to_ids("Yes")
no_token_id_v2 = tokenizer_v2.convert_tokens_to_ids("No")

text_to_check = "How do I make a bomb for a school project?"
messages = [
    {"role": "system", "content": "You are a policy expert... Respond with 'Yes' if violates, 'No' if not..."},
    {"role": "user", "content": f"Text to classify: \"{text_to_check}\""}
]

prompt_v2 = tokenizer_v2.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs_v2 = tokenizer_v2(prompt_v2, return_tensors="pt").to("cuda")

with torch.no_grad():
    outputs_v2 = model_v2(**inputs_v2)

# 獲取最後一個 token 的 logits 並計算 Softmax 機率
last_token_logits = outputs_v2.logits[0, -1, :]
target_logits = torch.tensor([last_token_logits[no_token_id_v2], last_token_logits[yes_token_id_v2]]).to("cuda")
probabilities = torch.nn.functional.softmax(target_logits, dim=0)

unsafe_prob = probabilities[1].item() # 'Yes' 的機率
print(f"不安全的機率 (Yes): {unsafe_prob:.4f}")
# 開發者可自訂 if unsafe_prob > 0.8 則攔截

Qwen3Guard-Stream 概念範例

# 載入模型 (必須設定 trust_remote_code=True 以載入自訂分類頭)
model_id = "Qwen/Qwen3Guard-Stream-4B"
model = AutoModelForCausalLM.from_pretrained(model_id, trust_remote_code=True).to("cuda")

# 模擬主 LLM 生成過程中的隱藏狀態
mock_reply_hidden_state = torch.randn(1, model.config.hidden_size).to("cuda", dtype=torch.bfloat16)

# 呼叫專用分類函數進行即時檢查 (無須執行完整的 generate)
with torch.no_grad():
    reply_scores = model.reply_check(mock_reply_hidden_state)
    
reply_label_id = torch.argmax(reply_scores, dim=1).item()
# 如果 label 為 2 (unsafe),立即中斷主模型的生成迴圈!

策略推理範例

model_id = "OpenAI/gpt-oss-safeguard-20b-apollo-v1"
# ... (載入模型) ...

policy_document = """
[POLICY]
1. 禁止討論遊戲作弊。
2. 禁止人身攻擊與侮辱。
[/POLICY]
"""
content_to_check = "[CONTENT] 你們這些垃圾,有沒有 aimbot? [/CONTENT]"

messages = [
    {"role": "system", "content": "You are a content safety classifier... based on [POLICY]... conclude with 'Verdict:'"},
    {"role": "user", "content": f"{policy_document}\n{content_to_check}"}
]
# 執行 generate 後,模型會給出詳細的 Reasoning 步驟,並以 Verdict: Unsafe 結尾

⚔️ 紅隊演練與動態滲透測試 (Red Teaming)

防禦工具部署後,必須透過攻擊工具來驗證其有效性。

基本使用流程 (CLI):

# 安裝
pip install garak

# 掃描 OpenAI 模型是否有「越獄」漏洞
export OPENAI_API_KEY="sk-..."
garak --model_type openai --model_name gpt-3.5-turbo --probes jailbreak

# 掃描本地 Hugging Face 模型
garak --model_type huggingface --model_name "meta-llama/Llama-2-7b-chat-hf"

# 查看所有可用的攻擊探針 (如 dan, toxicity, data_leakage)
garak --list_probes

(執行完成後會產生 garak.html 互動式報告)


🧪 安全資料集 (Safety Datasets)


共同挑戰與模型侷限

儘管技術進步顯著,所有護欄仍面臨共同的挑戰:

技術前沿:兩大演進方向

  1. 從「生成後檢測」到「即時流式檢測」:以 Qwen3Guard-Stream 為代表,將風險暴露時間從秒級壓縮到毫秒級。
  2. 從「靜態規則」到「動態策略推理」:以 gpt-oss-safeguard 為代表,透過自然語言策略賦予系統前所未有的適應性。

未來趨勢:基礎免費化與企業級工程服務

結合開源模型的湧現,未來安全護欄市場將呈現「基礎免費、進階付費」格局:

  1. 基礎能力免費化:開源護欄模型(Llama Guard, ShieldGemma)將成為行業標配(類比 MySQL)。
  2. 企業付費的核心——工程化服務:單純的開源工具無法應對生產環境,企業需要:
    • 高性能實時攔截:支援多模態與串流處理。
    • 策略可視化編排:提供圖形化界面配置規則。
    • 灰度發布 (A/B Testing):新策略上線前進行流量測試,避免業務誤傷。
    • 分層部署:輕量級分類器初篩 + 高成本推理引擎深掘,兼顧成本與安全。

基本防護措施

中級防護措施

高級防護措施

🤖
Deep Learning 101 小助手