您可以在 Model Armor 中設定範本專屬的排除規則,減少誤判情形。排除規則是範本專屬規則,包含要從偵測中排除的規則運算式或詞組。
支援的篩選器
您可以對下列篩選器使用排除規則:
- 提示詞注入和越獄偵測
(
PROMPT_INJECTION_AND_JAILBREAK) - 負責任的 AI 安全性篩選器
(
RESPONSIBLE_AI)
排除規則的使用時機
如要隱藏特定工作負載的已知偽陽性偵測結果,但不想完全停用篩選器,請使用範本專屬排除規則:
- 特定領域或技術術語:應用程式處理的專業詞彙,例如系統管理指令 (
kill process、abort transaction)、安全性測試術語 (penetration testing)、科學術語 (blast search) 或產業慣用語,與負責任 AI 安全類別重疊。 - 良性操作或格式設定指令:使用者或提示詞範本包含合法指令,其中使用祈使動詞 (例如
"ignore case when sorting this list"、"ignore empty rows"或"Summarize my inbox and ignore the emails from the marketing vendor."),導致提示詞注入和越獄偵測功能產生偽陽性。 - 在等待模型更新時,採取針對性緩解措施:您需要立即採取應變措施,解決特定應用程式工作流程中已驗證的偽陽性問題,同時讓篩選器對所有其他輸入內容保持啟用狀態。
下表說明何時應使用各個規則類型和比對範圍組合。如要進一步瞭解字典和規則運算式比對的運作方式,請參閱「字典和規則運算式規則」和「比對運作方式」。
| 規則設定 | 使用時機 | 範例 |
|---|---|---|
部分相符的字典規則 (MATCHING_SCOPE_PARTIAL_MATCH) |
您有一份固定的靜態字詞或詞組清單,這些字詞或詞組可能出現在提示或回覆中的任何位置。如要進一步瞭解字典比對行為,請參閱「字典和規則運算式規則」。 |
字典包含詞組「 符合:
不相符:
|
完全相符的字典規則 (MATCHING_SCOPE_FULL_MATCH) |
應用程式使用預先定義的提示選項 (例如 UI 快速回覆按鈕或罐頭指令),其中整個輸入內容與已知詞組相符,且您想防止其他未經篩選的文字繞過篩選器。如要進一步瞭解字典比對行為,請參閱「字典和規則運算式規則」。 |
字典包含詞組「 符合:
不相符:
|
部分相符的規則運算式規則 (MATCHING_SCOPE_PARTIAL_MATCH) |
您需要排除較大提示或回覆中的結構化模式、動態 ID 或特定動詞和名詞組合。詳情請參閱「規則運算式排除模式範例」。 |
規則運算式模式: 符合:
不相符:
|
完全相符的規則運算式規則 (MATCHING_SCOPE_FULL_MATCH) |
整個輸入酬載遵循嚴格的結構格式 (例如自動化測試 ID 或結構化指令)。 |
規則運算式模式: 符合:
不相符:
|
使用區域或多區域端點
使用 Model Armor 範本時,必須使用與範本位置相符的區域或多區域端點 (modelarmor.LOCATION.rep.googleapis.com)。如要瞭解各區域或多區域如何強制執行資料落地,請參閱「強制執行範本資料落地」。
全域端點 (modelarmor.googleapis.com) 不支援管理 Model Armor 範本,或清理提示和回覆。
事前準備
開始前,請先完成下列工作。
取得必要權限
如要取得在 Model Armor 範本中設定排除規則所需的權限,請要求管理員在包含 Model Armor 範本的 Model Armor 專案中,授予您 Model Armor 管理員 (roles/modelarmor.admin) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
啟用 API
您必須先啟用 Model Armor API,才能使用 Model Armor。
控制台
gcloud
開始之前,請按照下列步驟,搭配使用 Google Cloud CLI 和 Model Armor API:
在 Google Cloud 控制台啟用 Cloud Shell。
Google Cloud 控制台底部會開啟 Cloud Shell 工作階段,並顯示指令列提示。Cloud Shell 是已安裝 Google Cloud CLI 的殼層環境,並已設定適用於您目前專案的值。工作階段可能要幾秒鐘的時間才能初始化。
啟用 Model Armor API (如果尚未啟用):
啟用 API 所需的角色
您必須具備
serviceusage.services.enable權限,才能啟用 API。如果您建立了專案,可能已透過「擁有者」角色 (roles/owner) 取得這項權限。否則,您可以透過「Service Usage 管理員」角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色。gcloud services enable modelarmor.googleapis.com
使用 gcloud CLI 設定 API 端點覆寫
只有在搭配 Model Armor 使用 gcloud CLI,且想使用預設 us 多區域以外的區域或多區域時,才需要執行這個步驟。您必須手動設定 API 端點覆寫,確保 gcloud CLI 正確將要求轉送至 Model Armor 服務。
執行下列指令,設定 Model Armor 服務的 API 端點。
gcloud config set api_endpoint_overrides/modelarmor "https://modelarmor.LOCATION.rep.googleapis.com/"
將 LOCATION 替換為要使用 Model Armor 的區域或多區域。
排除規則的運作方式
您可以使用 Model Armor API 設定排除規則。
字典和規則運算式規則
您可以在 Model Armor 範本中定義兩種排除規則:
- 字典規則:指定要排除的字詞或詞組清單 (
wordList,每個字典最多 128 KB)。字典必須至少包含一個詞組,且每個詞組至少須包含兩個字母或數字字元。字典比對的運作方式如下:- 不區分大小寫:字典字詞和詞組不區分大小寫。
- 非英數字元:掃描相符項目時,Unicode 基本多語言平面中,字母和數字以外的所有字元都會替換為空白字元。舉例來說,字典詞組
Sam Johnson會比對sam johnson、Sam, Johnson和Sam (Johnson)。如果字典詞組包含許多非字母或數字的字元,可能會產生非預期的比對結果,因為這些字元會被視為空白字元。 - 字元邊界:相符項目周圍的字元類型,必須與字典字詞中相鄰字元的類型不同。字母必須與非字母相鄰,數字必須與非數字相鄰。舉例來說,字典字詞
jen與jen123的前三個字母相符,但與jennifer不符。
- 規則運算式規則:指定規則運算式模式 (最多 1,000 個字元),用於比對及排除。規則運算式比對預設會區分大小寫。如要執行不區分大小寫的比對,請在模式中加入
(?i)旗標。例如,(?i)kill process [0-9]+可同時符合kill process 1234和Kill Process 1234。
比對運作原理
每項排除規則都支援 matchingScope 欄位,用於指定 Model Armor 如何根據規則比對輸入內容:
- 部分相符 (
MATCHING_SCOPE_PARTIAL_MATCH,預設):- 字典規則:如果字典中的字詞或詞組與輸入內容中的子字串相符,則視為相符,但須遵守字典字元邊界規則。舉例來說,字典詞組
ignore empty rows與ignore empty rows、ignore EMPTY-rows和Please ignore empty rows and summarize this table相符,但與ignore rows或ignore the empty rows不符。 - 規則運算式規則:如果輸入內容中的任何子字串符合規則運算式模式,即視為相符。
- 字典規則:如果字典中的字詞或詞組與輸入內容中的子字串相符,則視為相符,但須遵守字典字元邊界規則。舉例來說,字典詞組
- 完全相符 (
MATCHING_SCOPE_FULL_MATCH):- 字典規則:只有在字典項目涵蓋整個輸入內容時,才會比對成功。舉例來說,字典詞組
ignore empty rows與ignore empty rows和ignore EMPTY-rows相符,但與please ignore empty rows或ignore rows不符。 - 規則運算式規則:只有在規則運算式模式與整個輸入內容相符時,才會比對成功。
- 字典規則:只有在字典項目涵蓋整個輸入內容時,才會比對成功。舉例來說,字典詞組
清理期間覆寫排除規則
如果範本包含排除規則,每當提示詞注入和越獄偵測 (PROMPT_INJECTION_AND_JAILBREAK) 或負責任的 AI 技術 (RESPONSIBLE_AI) 篩選器識別出潛在相符項目時,Model Armor 會在提示詞和模型回覆清理期間評估這些規則:
- 規則與輸入內容相符:如果排除規則與子字串 (
MATCHING_SCOPE_PARTIAL_MATCH,預設) 或從頭到尾的整個輸入內容 (MATCHING_SCOPE_FULL_MATCH) 相符,Model Armor 會覆寫MATCH_FOUND或EXECUTION_SKIPPED篩選器結果,並將整個支援的篩選器類型 (包括RESPONSIBLE_AI的所有負責任 AI 安全類別) 的matchState設為NO_MATCH_FOUND,而不是排除輸入內容中的個別詞組或範圍。在清理回應中,如果未偵測到惡意內容,或排除規則覆寫篩選結果,filterMatchState會是NO_MATCH_FOUND。如要疑難排解,請在範本中啟用清理作業 (logSanitizeOperations) 的 Cloud Logging,並篩選modelarmor.googleapis.com/exclusion_rule_overridden_filters或modelarmor.googleapis.com/exclusion_rule_skipped_filters標籤。當排除規則覆寫篩選結果,或篩選器的executionState為EXECUTION_SKIPPED時,Model Armor 會記錄這些標籤。詳情請參閱「查看排除規則記錄」。 - 規則與完整輸入內容 (
MATCHING_SCOPE_FULL_MATCH) 不符:如果輸入內容包含設定詞組或模式以外的其他文字,規則就不會比對,篩選器會保留MATCH_FOUND。 - 輸入內容超過 130,000 個詞元 (0.5 MB):排除規則只會評估輸入文字的前 130,000 個詞元 (0.5 MB)。0.5 MB 的酬載約可支援 130,000 個英文文字詞元 (每個詞元約 4 個字元)。對於非英文文字,支援的詞元數量可能會因語言而異,因為非英文字元每個字元需要更多位元組。如果輸入內容超過 130,000 個詞元 (0.5 MB),且篩選器在初始掃描部分以外偵測到相符項目,篩選器會傳回
EXECUTION_SKIPPED。如要進一步瞭解messageItems值和酬載限制,請參閱「排除規則系統限制」。
如需使用排除規則清理提示和模型回覆的範例,請參閱「使用排除規則清理提示」和「使用排除規則清理回覆」。
注意事項
設定排除規則時,請考量下列事項:
- 排除規則只會套用至定義規則的範本。您無法在範本之間共用排除規則。
- 只有在範本中啟用支援的篩選器類型時,才能為該篩選器設定排除規則。如要偵測提示詞注入和越獄 (
PROMPT_INJECTION_AND_JAILBREAK),請在piAndJailbreakFilterSettings中將filterEnforcement設為ENABLED。如要啟用負責任的 AI 安全性篩選器 (RESPONSIBLE_AI),請在raiSettings.raiFilters中設定至少一個負責任的 AI 安全性類別。 - Model Armor 不支援串流 API 或底限設定中的排除規則。
- Model Armor 會先根據原始輸入文字評估排除規則,再執行去識別化或翻譯等文字轉換作業。排除規則不支援多語言偵測或自動翻譯。如要排除多種語言的內容,請為每種目標語言新增特定語言的詞組或規則運算式模式。
- 排除規則對非拉丁字母語言和多位元組 UTF-8 字元的支援有限。尤其是字典規則 (
wordList),對於使用組合標記的文字 (例如印度文字) 或字詞之間沒有空格的文字 (例如中文和日文),可能無法如預期比對。完全比對規則 (MATCHING_SCOPE_FULL_MATCH) 不會比對包含多位元組 UTF-8 字元的輸入內容。如要排除非拉丁字母或多位元組字元的內容,請使用規則運算式規則 (regex) 搭配MATCHING_SCOPE_PARTIAL_MATCH。 - 排除規則須遵守系統限制。詳情請參閱「排除規則系統限制」。
建立含有排除規則的範本
如要建立含有排除規則的範本,請在 POST 要求的 filterConfig 中加入 filterRuleSettings 物件。
下列範例會建立範本,啟用提示詞注入和越獄偵測,以及負責任的 AI 安全性篩選器,並設定兩項部分比對 (MATCHING_SCOPE_PARTIAL_MATCH) 的排除規則:
- 提示詞注入和越獄偵測 (
PROMPT_INJECTION_AND_JAILBREAK):使用字典規則,從提示詞注入和越獄偵測中排除含有指定詞組 (例如ignore case when sorting this list或ignore empty rows) 的輸入內容。 - 負責任的 AI (
RESPONSIBLE_AI):使用規則運算式規則,從負責任的 AI 安全偵測中排除符合指定模式 (例如(?i)kill process [0-9]+) 的輸入內容。
export TEMPLATE_WITH_EXCLUSIONS='{
"filterConfig": {
"piAndJailbreakFilterSettings": {
"filterEnforcement": "ENABLED",
"confidenceLevel": "LOW_AND_ABOVE"
},
"raiSettings": {
"raiFilters": [
{
"filterType": "DANGEROUS",
"confidenceLevel": "LOW_AND_ABOVE"
},
{
"filterType": "HARASSMENT",
"confidenceLevel": "LOW_AND_ABOVE"
},
{
"filterType": "HATE_SPEECH",
"confidenceLevel": "LOW_AND_ABOVE"
},
{
"filterType": "SEXUALLY_EXPLICIT",
"confidenceLevel": "LOW_AND_ABOVE"
}
]
},
"filterRuleSettings": {
"ruleSets": [
{
"filterTypes": [
"PROMPT_INJECTION_AND_JAILBREAK"
],
"rules": [
{
"exclusionRule": {
"dictionary": {
"wordList": {
"words": [
"EXCLUDED_PHRASE_1",
"EXCLUDED_PHRASE_2"
]
}
},
"matchingScope": "MATCHING_SCOPE_PARTIAL_MATCH"
}
}
]
},
{
"filterTypes": [
"RESPONSIBLE_AI"
],
"rules": [
{
"exclusionRule": {
"regex": {
"pattern": "EXCLUDED_REGEX_PATTERN"
},
"matchingScope": "MATCHING_SCOPE_PARTIAL_MATCH"
}
}
]
}
]
}
}
}'
curl -X POST \
-d "$TEMPLATE_WITH_EXCLUSIONS" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://modelarmor.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/templates?template_id=TEMPLATE_ID"
更改下列內容:
EXCLUDED_PHRASE_1和EXCLUDED_PHRASE_2:要從提示詞注入和越獄偵測中排除的字典字詞或詞組,例如ignore case when sorting this list和ignore empty rows。EXCLUDED_REGEX_PATTERN:要從負責任 AI 安全偵測中排除的規則運算式模式,例如(?i)kill process [0-9]+。PROJECT_ID:範本所屬專案的 ID。LOCATION:範本的位置。TEMPLATE_ID:範本 ID。
這個指令會傳回類似以下的回應:
{
"filterConfig": {
"raiSettings": {
"raiFilters": [
{
"filterType": "DANGEROUS",
"confidenceLevel": "LOW_AND_ABOVE"
},
{
"filterType": "HARASSMENT",
"confidenceLevel": "LOW_AND_ABOVE"
},
{
"filterType": "HATE_SPEECH",
"confidenceLevel": "LOW_AND_ABOVE"
},
{
"filterType": "SEXUALLY_EXPLICIT",
"confidenceLevel": "LOW_AND_ABOVE"
}
]
},
"piAndJailbreakFilterSettings": {
"filterEnforcement": "ENABLED",
"confidenceLevel": "LOW_AND_ABOVE"
},
"filterRuleSettings": {
"ruleSets": [
{
"filterTypes": [
"PROMPT_INJECTION_AND_JAILBREAK"
],
"rules": [
{
"exclusionRule": {
"dictionary": {
"wordList": {
"words": [
"ignore case when sorting this list",
"ignore empty rows"
]
}
},
"matchingScope": "MATCHING_SCOPE_PARTIAL_MATCH"
}
}
]
},
{
"filterTypes": [
"RESPONSIBLE_AI"
],
"rules": [
{
"exclusionRule": {
"regex": {
"pattern": "(?i)kill process [0-9]+"
},
"matchingScope": "MATCHING_SCOPE_PARTIAL_MATCH"
}
}
]
}
]
}
},
"templateMetadata": {
"dataResidencyCompliant": true
}
}
更新範本中的排除規則
如要更新現有範本中的排除規則,請傳送 PATCH 要求,並將 updateMask 設為 filterConfig.filterRuleSettings。由於更新會取代整個 filterRuleSettings 欄位,因此請一併納入要保留的所有規則和修改內容。
以下範例會更新前一個範例中的排除規則,方法是在 PROMPT_INJECTION_AND_JAILBREAK 規則集中新增規則運算式規則,並移除 RESPONSIBLE_AI 規則集:
export EXCLUSION_RULES_UPDATE='{
"filterConfig": {
"filterRuleSettings": {
"ruleSets": [
{
"filterTypes": [
"PROMPT_INJECTION_AND_JAILBREAK"
],
"rules": [
{
"exclusionRule": {
"dictionary": {
"wordList": {
"words": [
"EXCLUDED_PHRASE_1",
"EXCLUDED_PHRASE_2"
]
}
},
"matchingScope": "MATCHING_SCOPE_PARTIAL_MATCH"
}
},
{
"exclusionRule": {
"regex": {
"pattern": "EXCLUDED_REGEX_PATTERN"
},
"matchingScope": "MATCHING_SCOPE_FULL_MATCH"
}
}
]
}
]
}
}
}'
curl -X PATCH \
-d "$EXCLUSION_RULES_UPDATE" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://modelarmor.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID?updateMask=filterConfig.filterRuleSettings"
更改下列內容:
EXCLUDED_PHRASE_1和EXCLUDED_PHRASE_2:要從提示詞注入和越獄偵測中排除的字典字詞或詞組,例如ignore case when sorting this list和ignore empty rows。EXCLUDED_REGEX_PATTERN:要從提示詞注入和越獄偵測中排除的規則運算式模式,例如(?i)\\b(?:ignore\\s+(?:the\\s+)?(?:emails?|spams?|warnings?|drafts?|typos?|duplicates?|noise))\\b。PROJECT_ID:範本所屬專案的 ID。LOCATION:範本的位置。TEMPLATE_ID:範本 ID。
規則運算式排除模式範例
編寫規則運算式排除規則時,請將模式範圍限定在特定網域詞彙或目標名詞,讓 Model Armor 排除已知的偽陽性,同時不忽略真正的安全或安全性違規事項。在 JSON 要求主體 ("pattern") 中傳遞規則運算式模式時,請在每個反斜線後方加上第二個反斜線 (例如使用 \\b 和 \\s)。
提示詞注入和越獄偵測範例
ignore、disregard、bypass 或 override 等祈使動詞,經常出現在對抗性提示詞注入,以及電子郵件分類、資料格式、錯誤處理或系統設定等合法指令中。為避免排除廣泛類別的提示,請將字詞邊界 (\\b)、非擷取群組 ((?:...)) 和不區分大小寫標記 ((?i)) 與 MATCHING_SCOPE_PARTIAL_MATCH 結合,將規則運算式錨定至特定作業目標名詞。
下表提供部分比對規則運算式模式範例 (包含 JSON 逸出反斜線),以及常見提示詞注入和越獄偽陽性情境的提示詞範例。
| 指令類別 | 觸發字詞 | 誤判情況 | 部分比對規則運算式模式範例 | 提示詞範例 |
|---|---|---|---|---|
| 內容分類和篩選 | ignore、disregard |
電子郵件分類、錯誤處理和草稿審查 |
(?i)\\b(?:ignore\\s+(?:the\\s+)?(?:emails?|spams?|warnings?|drafts?|typos?|duplicates?|noise))\\b
|
Summarize my inbox and ignore the emails from the marketing vendor.
|
負責任的 AI 技術安全篩選器範例
技術文件、系統管理指令和常見慣用語,往往含有與負責任 AI 安全類別重疊的字詞。如要減少較長提示或回覆中的偽陽性,請將字詞邊界 (\\b)、非擷取群組 ((?:...)) 和不區分大小寫標記 ((?i)) 與 MATCHING_SCOPE_PARTIAL_MATCH 結合。
下表提供部分比對規則運算式模式範例 (包含 JSON 逸出反斜線),以及常見負責任 AI 偽陽性情境的提示範例。
| 風險類別 | 觸發字詞 | 誤判情況 | 部分比對規則運算式模式範例 | 提示詞範例 |
|---|---|---|---|---|
| 暴力或傷害 | kill |
終止程序、電氣或空調開關,以及常見慣用語 |
(?i)\\b(?:kill\\s+(?:-9|all|process(?:es)?|switch(?:es)?|jobs?|pods?|sessions?|bill|lights?)|time\\s+to\\s+kill|dressed\\s+to\\s+kill)\\b
|
Please kill all pods in the namespace. |
| 惡意或令人反感的用語 | abort、terminate |
資料庫交易、任務生命週期,以及僱用或合約條款 |
(?i)\\b(?:abort\\s+(?:transactions?|missions?|requests?|connections?|retry|retries)|terminate\\s+(?:contracts?|sessions?|threads?|instances?|connections?))\\b
|
Abort retry. |
| 網域字詞中的子字串相符 | 重疊的字元子字串 | 學術用語、植物學、鳥類學、航空和專有名詞 |
(?i)\\b(?:class(?:room|ic)?|assess(?:ment)?|associate|passive|peacock|cockpit|cocktail|dickens)\\b
|
I love reading Dickens. |
| 武器或爆裂物 | bomb、blast、detonate |
生物資訊、娛樂用語,以及工業設備或清潔 |
(?i)\\b(?:blast\\s+(?:search|alignment|radius|furnace)|box\\s+office\\s+bomb|had\\s+a\\s+blast)\\b
|
Run a blast search on the genetic sequence. |
查看排除規則記錄
如要記錄排除規則評估結果,請在範本中設定記錄時,將 logSanitizeOperations 設為 true。啟用記錄功能後,Model Armor 會將受監控資源 modelarmor.googleapis.com/SanitizeOperation 的 SanitizeOperationLogEntry 記錄項目寫入 Cloud Logging。
如要進一步瞭解如何啟用及查詢清理記錄,請參閱「設定記錄」。
設定排除規則的最佳做法
請遵循下列最佳做法,盡可能減少誤判,同時不削弱範本的資安態勢:
- 將規則範圍縮小至特定情境:避免排除單一動詞或廣泛字詞 (例如
ignore、kill或abort),或使用不受限制的萬用字元 (例如.*ignore.*)。由於只要子字串相符,MATCHING_SCOPE_PARTIAL_MATCH就會將整個篩選器的matchState覆寫為NO_MATCH_FOUND,因此過於廣泛的規則可能會遮蓋同一提示或回覆中其他地方的實際違規行為。請務必將觸發動詞與特定目標名詞配對 (例如ignore case when sorting this list或(?i)kill process [0-9]+)。 - 使用字詞邊界並整合模式:在規則運算式規則中,使用字詞邊界 (
\b) 可避免在不相關的字詞中意外比對到子字串。使用非擷取群組 ((?:...)) 和交替 (|),將相關詞組整合為單一規則運算式,以符合每個規則集最多 10 條規則的系統限制。 - 建議使用
MATCHING_SCOPE_FULL_MATCH處理可預測的輸入內容:排除預先定義的 UI 提示、罐頭指令或自動測試酬載時,請將matchingScope設為MATCHING_SCOPE_FULL_MATCH(或使用^和$錨定規則運算式)。完整比對範圍可防止使用者在排除的詞組中附加對抗性指令,藉此規避偵測。 - 針對未經轉換的原始文字編寫規則:Model Armor 會在去識別化或翻譯前評估排除規則。請確保模式與去識別化前的原始格式相符,並為應用程式支援的每種語言新增特定語言詞組或規則運算式模式。
- 篩選器升級後,請檢查並停用臨時規則:將範本升級至較新的篩選器版本時,請重新評估偽陽性測試案例,並移除已由更新偵測模型解決的排除規則。
後續步驟
- 查看範例,瞭解如何使用排除規則清理提示和清理模型回覆。
- 查看排除規則系統限制。
- 瞭解如何設定 Model Armor 的記錄功能。
- 瞭解如何建立及管理 Model Armor 範本。