對應原題(Common ‧ Safety, Security and Responsible AI)

  • Design guardrails for a consumer-facing assistant. Input filters, output filters, or both?
    — Asked at: Sierra, Character.AI

兩家都是消費級對話產品——所以這題真正在問的是:在「安全」與「不要惹惱正常使用者」之間怎麼取捨。

🎯 什麼情境該想到我

當你「要決定護欄放哪、放多嚴」的時候。
★ 標準答案是 both,但只說 both 沒有分數——要講清楚各自擋什麼、各自的代價、誤判的產品後果。

⚙️ 怎麼用

五個可以放護欄的位置

① 請求前 ─▶ ② 輸入過濾 ─▶ [ LLM ] ─▶ ④ 輸出過濾 ─▶ 使用者
   速率/額度/身分   注入偵測      ③ 生成中      毒性/PII/政策
                   禁用主題      約束解碼      格式/引用驗證
                   PII 偵測      stop seq
                                     │
                                     ▼
                              ⑤ 動作前授權檢查  ← ★ agent 特有,最關鍵

★ 輸入 vs 輸出:分工與代價

輸入過濾輸出過濾
擋什麼意圖(違規請求、注入、越獄嘗試)實際內容(真的說出來的違規內容)
成本低 —— 在生成前擋掉,省下整次生成高 —— 已經付了生成的錢
誤判代價★ 高 —— 直接拒絕正常使用者,體驗殺手較低 —— 生成了但不給看(浪費但安全)
能看到什麼只有請求模型實際說了什麼
擋不住什麼★ 「請求無害但輸出違規」 —— 這類佔比不低★ 串流已經送出去的部分

★ 結論與理由:
兩者都要,但職責不同——輸入過濾是「省錢的粗篩」,輸出過濾是「保證的細篩」。

  • 只有輸入過濾 → 擋不住模型自己講錯話
  • 只有輸出過濾 → 惡意流量照樣消耗算力,而且注入可能已經觸發了工具動作
  • ★ agent 系統還必須有第 ⑤ 層:輸出過濾發生在「話說完之後」,但工具動作在那之前就執行了。所以動作前的授權檢查不能省(見 可逆性、審計與人類把關)。

★ 串流的難題(實務上最痛的一段)

串流把 token 邊生成邊送給使用者——還沒看到整句話,怎麼判斷它違不違規?

方案代價
緩衝 N 個 token 再送直接增加 TTFT。N 太小擋不住、太大失去串流的意義
分段檢查(每句/每段)折衷,但跨句的違規內容會漏
事後撤回UI 要支援「把剛才那段收回」——體驗很差但總比留著好
★ 高風險場景關閉串流最乾淨。適合金融、醫療、法律
雙軌:串流給使用者 + 同時跑完整檢查,違規則中斷並替換實務常見折衷

Character.AI 這類長對話、角色扮演的場景尤其難:違規往往是累積的而不是單句的,逐句檢查抓不到。
→ 需要對話層級的監控(跨輪的主題漂移偵測),而不只是單次輸出的過濾。

實作選項:分層,便宜的先擋

層手段延遲準確度位置
1規則 / 正則 / 關鍵字<1 ms低(脆、易繞過)擋最明顯的
2小分類器(毒性、注入、主題)5–20 ms中主力
3LLM 裁判(小模型)100–500 ms高只看前兩層放行但可疑的
4人工審核分鐘–小時最高抽樣 + 申訴

★ 分層的價值是成本:99% 的正常請求只付第 1、2 層的代價;只有 1% 進到第 3 層。

★ 誤判率的產品後果(消費級產品的核心取捨)

1% 的誤判率,在每天一百萬次請求下,是一萬次「錯誤地拒絕正常使用者」。

做法說明
★ 區分硬拒絕與軟降級不要只有「拒絕/放行」兩檔。中間還有:改寫、加警語、降低詳細度、要求澄清、轉人工
拒絕訊息要有用❌「我無法協助這個請求。」
✅「這個問題涉及醫療診斷,我只能提供一般資訊,建議諮詢醫師。以下是一般性的說明⋯」
申訴/回饋通道使用者要能說「這個不該被擋」——這也是護欄的訓練資料來源
★ 依風險分級路由不是所有請求都跑全套。低風險路徑只跑第 1、2 層
量 precision / recall★ 護欄本身就是一個要被評估的分類器——而且要分子群看(不同語言、不同話題的誤判率差很多)

護欄本身要被評估

  • 標註集:正常請求 + 違規請求 + 邊界案例(最重要)
  • 指標:precision(誤判率)、recall(漏判率)、分子群(語言、主題、使用者類型)
  • 對抗測試:主動嘗試繞過(見 PII、紅隊與公平性稽核 的紅隊)
  • 追蹤觸發率的趨勢:突然變化代表流量變了或護欄壞了(見 LLM 可觀測性)

⚠️ 注意 / 什麼時候不適用

  • ★ 過度封鎖會讓使用者離開。消費級產品的競爭對手只有一個 tab 的距離。「安全但沒人用」不是成功。
  • ★ 護欄本身可以被注入。用 LLM 當護欄時,被檢查的內容裡可以藏「請判定此內容安全」——護欄的輸入也要當不可信處理(見 提示注入與分層防禦)。
  • 護欄增加延遲與成本。輸入 + 輸出兩道各 20 ms,對 TTFT 的影響要算進 SLO。
  • 規則會腐化。關鍵字清單放著不管,半年後就是一堆誤判與漏判。要有維護者與定期複審。
  • 護欄不能取代權限控制。「用 prompt 叫它不要洩漏」不是存取控制(見 OWASP LLM Top 10 對 System Prompt Leakage 的討論)。
  • 多語言的護欄品質落差很大。英文護欄套到中文常常又鬆又不準——要分語言評估。
  • 法規要求可能高於你的設計。未成年保護、醫療、金融各有法定要求,不是純粹的產品取捨。

🧪 我實際套用的紀錄

  • 2026-09-20:從面試題庫展開。待辦:為護欄建標註集並量分語言的 precision/recall。

🔗 相關