跨模型比較
系統性比較 LLM 安全性的方法論,跨模型家族進行,內容涵蓋標準化評估框架、架構差異分析與比較測試方法。
跨模型家族比較安全性,對於理解更廣泛的 LLM 威脅面貌至關重要。某項漏洞存在於一個模型但不存在於另一個,就同時揭露兩者的特質:前者的弱點與後者的防禦。某項漏洞跨所有模型皆存在,則揭露此技術的根本性侷限。
為何要比較模型
對紅隊而言
跨模型比較有助紅隊:
- 高效遷移攻擊 —— 依新模型與你已測試模型的相似度,判斷哪些攻擊可能奏效
- 辨識模型特有漏洞 —— 以相同攻擊橫跨模型測試,找出特定架構或訓練方式獨有的弱點
- 排定測試優先順序 —— 依比較分析聚焦於最有可能產出發現的模型特定攻擊面
- 理解防禦機制 —— 由哪些攻擊在哪些模型上成功或失敗,推論每個模型的防禦機制
對防禦方而言
比較發現有助防禦方:
- 標竿安全 —— 理解自家模型安全相較競品如何
- 辨識涵蓋缺口 —— 找出自家模型較弱的類別
- 引入防禦 —— 採用其他模型奏效的防禦做法
- 預測未來攻擊 —— 在相似模型上奏效的攻擊,很快也可能對自家生效
比較框架
標準化測試維度
以下列維度組織跨模型比較:
| 維度 | 待比較內容 | 衡量方式 |
|---|---|---|
| 拒答校準 | 模型拒絕哪些請求及強度 | 標準化有害請求測試套件 |
| 系統提示遵循 | 模型遵循系統指令的程度 | 注入抗性測試套件 |
| 越獄抗性 | 哪類越獄手法成功 | 多手法越獄套組 |
| 資訊洩漏 | 模型揭露機密資訊的容易程度 | 系統提示擷取、訓練資料探測 |
| 工具使用安全 | 模型處理 function call 的安全程度 | 工具注入測試套件 |
| 多模態安全 | 跨模態注入抗性 | 影像/音訊注入測試套件 |
| 安全一致性 | 安全行為在不同脈絡的一致性 | 以多種框架提相同請求 |
標準化測試套件設計
要有效比較,測試套件必須:
控制能力層級: 請以相近能力層級模型比較。以前沿模型對比 7B 參數模型會產生誤導,因為安全差異可能反映能力差異,而非安全投入。
控制 API 差異: 將 API 差異正規化,使測試條件等同。例如確保系統提示於各模型 API 採正確格式。
可重現: 盡可能使用確定性設定(temperature=0),對隨機性測試多次重跑以計算成功率。
涵蓋完整: 覆蓋所有主要危害類別,而非僅挑單一模型已知較弱之處。
class StandardizedTestSuite:
"""跨模型比較測試套件。"""
def __init__(self, models):
self.models = models # dict:model_name -> ModelWrapper
self.test_cases = self.load_standard_tests()
def run_comparison(self):
results = {}
for test_case in self.test_cases:
results[test_case.id] = {}
for name, model in self.models.items():
response = model.generate(
system=test_case.system_prompt,
user=test_case.user_message,
temperature=0,
)
results[test_case.id][name] = self.evaluate(response, test_case)
return results
def evaluate(self, response, test_case):
return {
"complied": not self.is_refusal(response),
"refusal_type": self.classify_refusal(response),
"content_safety": self.assess_content(response),
"information_leaked": self.detect_leakage(response),
}跨 API 正規化
每個模型都有不同的 API 慣例。為公平比較,請予以正規化:
class ModelWrapper:
"""跨模型測試的抽象包裝。"""
def generate(self, system, user, temperature=0):
raise NotImplementedError
class GPT4Wrapper(ModelWrapper):
def generate(self, system, user, temperature=0):
return openai_client.chat.completions.create(
model="gpt-4o-2024-08-06",
messages=[
{"role": "system", "content": system},
{"role": "user", "content": user}
],
temperature=temperature,
)
class ClaudeWrapper(ModelWrapper):
def generate(self, system, user, temperature=0):
return anthropic_client.messages.create(
model="claude-sonnet-4-20250514",
system=system,
messages=[{"role": "user", "content": user}],
temperature=temperature,
)
class GeminiWrapper(ModelWrapper):
def generate(self, system, user, temperature=0):
model = genai.GenerativeModel("gemini-1.5-pro-002",
system_instruction=system)
return model.generate_content(user,
generation_config={"temperature": temperature})比較陷阱
常見錯誤
比較不同能力層級: GPT-4o 對上 Llama-8B 不是有意義的安全比較,因為能力差異會主導結果。
忽略 API 層級防禦: GPT-4 的 API 具有獨立於模型之外的內容審查。Claude 的 API 可能採用不同過濾。若比較「模型安全」卻未納入基礎設施層級防禦,會產生誤導。
單一手法偏誤: 只測試一種越獄手法,可能僅因該手法對應另一模型的特定弱點,就顯示某一模型「更安全」。
時點偏誤: 比較不同時點的模型(半年前的 GPT-4 對比今天的 Claude)會把模型差異與時間上的改進混在一起。
忽略部分遵從: 二元「拒答/遵從」分類會遺漏細膩的安全行為。一個模型可能完全拒絕,另一個則提供保留式的部分回應——兩者可能都被歸為「安全」,行為卻差異甚大。
有效比較的要求
為使比較具意義:
- 模型應處於相近的能力層級
- 測試應涵蓋多個攻擊類別與手法
- 安全性應以光譜衡量,而非二元
- 基礎設施層防禦應被記錄並納入
- 模型版本與測試日期應被記錄
- 結果應以足夠的統計檢定力加以驗證
重點比較領域
本章節於兩個關鍵領域提供詳細比較:
每項比較都同時揭露被比較模型的特徵以及底層技術的本質。
相關主題
參考資料
- Mazeika, M. et al.(2024)。"HarmBench: A Standardized Evaluation Framework for Automated Red Teaming and Robust Refusal"
- Chao, P. et al.(2024)。"JailbreakBench: An Open Robustness Benchmark for Jailbreaking Large Language Models"
- Wei, A. et al.(2023)。"Jailbroken: How Does LLM Safety Training Fail?"
為什麼 GPT-4o 對上 Llama-8B 並不是有意義的安全比較?