第 5 章 — 輸入驗證與輸出過濾
《LLM Primer VII:AI 安全》章節走讀的第五篇。這一章把第 4 章的分層緩解框架轉成作業紀律 — 淨化階段、guardrail 工具、結構化輸出、紅隊,以及真正有意義的安全指標。
這一章為什麼存在
第 4 章命名的四層緩解架構,好不好只到它每一層能運作為止。第 5 章發展其中兩層:輸入面 — 使用者請求在此被檢視,並被通過、轉換或拒絕;輸出面 — 模型的回應在離開系統前對照第二組閘門做檢查。這兩面周圍坐落著結構化 prompting、對抗性測試與安全量測的紀律。工具已經成熟 — Llama Guard、NeMo Guardrails、Lakera Guard、AWS Bedrock Guardrails、Garak、PyRIT、promptfoo — 而把它們串在一起的作業樣式也已收攏。
5.1 淨化是分階段的,不是一次到位的
「淨化輸入」從 SQL injection 時代帶來一些誤導性的聯想。在 LLM 系統裡,淨化是一個分階段的過程 — 檢視、分類、轉換、通過或拒絕 — 其產物不是「安全」的輸入,而是一份通過一組政策閘門並被記下結果的輸入。管線通常有四類檢查,以成本排序。結構性檢查最便宜:長度上限、字元集約束、Unicode NFKC 正規化、剝除零寬與易混淆字元,這些構成了大部分走私文獻的內容。基於樣式的檢查抓明確的覆寫與已知的對抗性範本;它們在兩個方向上都很吵,但作為粗篩、以記錄而非封鎖的方式,是有用的。分類檢查使用專屬的安全模型 — Llama Guard、OpenAI Moderation API,以及 Lakera 與 AWS Bedrock 的對應品 — 對照定義好的分類法給輸入打分。基於 LLM 的檢查是最貴的一層,當分類器信心處於中間時,呼叫較小的模型來推理意圖。每一階段都有偽陽性與偽陰性率,兩者都必須在管線被託付給生產流量之前被量測。
5.2 結構化輸出是防禦,不只是格式的便利
第 4 章的縱深防禦架構有第三個結構性的層,由本章來發展:把模型的輸出限制到定義好的 schema,讓即使被 injection 影響過的輸出也逃不出結構包絡。最簡單的形式是 schema 強制的 JSON。模型被指示要吐出符合 schema 的 JSON;應用剖析並驗證;不符者被拒絕或重試。Jason Liu 的 instructor 函式庫用 pydantic 模型包裝 OpenAI 與 Anthropic 的 client — 開發者寫一個描述輸出結構的類別,函式庫處理 prompt 組裝、驗證與重試。Microsoft Research 的 Guidance 更進一步,以逐 token 的生成方式對照範本受限,那個範本明確定義了哪些位置可以放自由文字。在輸出調節這一面,Meta 的 Llama Guard 家族 — 第 1 到第 3 版,第 3 版加入多模態涵蓋 — 已在 2023–2025 的時窗成為典型的開放權重分類器,整合進大多數生產堆疊作為回應過濾器。NVIDIA NeMo Guardrails 以及來自 Lakera、AWS Bedrock、Cisco AI Defense 的商業產品,在類似的基礎上競爭。
5.3 沒被量測的防禦不算防禦
紅隊是把安全宣稱轉成量測的動作。人工紅隊 — 受過訓練的對抗性測試者,常常是外部的 — 產出對部署成功的具體 prompt,依攻擊樣式分組。自動化紅隊把人工工作規模化到輸入空間。NVIDIA Garak 在 2023 年開源並持續更新,對目標端點跑一組 probe,回報哪些成功了;probe 涵蓋 prompt injection、資料洩漏、仇恨言論誘出、編碼走私、角色扮演 jailbreak 等等。Microsoft PyRIT(Python Risk Identification Toolkit)於 2024 年釋出,加上一種 agentic 紅隊樣式:一個模型對另一個模型生成攻擊。promptfoo 對照評估集比較 prompt 與模型,適用於「哪個組態比較安全」這種問題。有意義的指標由兩種失敗模式組成。攻擊成功率回答「在一組定義好的攻擊裡有多少通過?」拒絕校準回答「在被拒絕的請求裡有多少不該被拒絕?」一個攻擊成功率為零但拒絕率 50% 的系統,並沒有解決問題;它只是把成本從不安全的輸出轉移到沒幫助的輸出。兩項指標都要求從真實流量分布抽出的標註樣本,兩者都對評估集的組成敏感。只回報單一數字而不附上組成,就是安全宣稱最常誤導人的地方。
第 5 章鋪陳出來的東西
第 6 章專門處理檢索增強生成。這裡發展的輸入層把使用者的訊息當作不可信的那一段。RAG 系統加上第二段不可信的部分:被取回的段落,其來源常常比使用者的訊息更不乾淨。Greshake 的間接 prompt injection、Liu 對整合了 LLM 之應用的 injection 攻擊之刻畫、Zhong 對檢索語料的中毒,以及較新的 PoisonedRAG 與 BadRAG 這條線,全都在描述這第二個表面如何失敗。第 6 章走 RAG 裡的信任邊界、具體的攻擊樣式、這個領域已收攏出來的安全檢索架構,以及在事件之前就浮現檢索層攻擊的監控實務。
下一篇 — 第 6 章:檢索增強生成的風險。RAG 裡的信任邊界、惡意文件注入、透過 embedding 路徑的索引中毒,以及抓住淨化沒抓到之攻擊的監控。