您可以在 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 時所需的角色
如要啟用 API,您必須具備
serviceusage.services.enable權限。如果您建立了專案,可能已透過「擁有者」角色 (roles/owner) 取得這項權限。否則,您可以透過「服務使用管理員」角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色。gcloud services enable modelarmor.googleapis.com
使用 gcloud CLI 設定 API 端點覆寫
如果您使用 gcloud CLI 搭配 Model Armor,且想使用預設 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 會覆寫matchState,並將整個支援的篩選器類型 (包括RESPONSIBLE_AI的所有負責任的 AI 技術安全類別) 設為NO_MATCH_FOUND,而不是排除輸入內容中的個別片語或範圍。如果沒有其他有效篩選器偵測到違規行為,filterMatchState會傳回NO_MATCH_FOUND。如果排除規則覆寫篩選器matchState,Model Armor 就不會在 Cloud Logging 中記錄指標,也不會在清除回應中加入信號。 - 規則與完整輸入內容不符 (
MATCHING_SCOPE_FULL_MATCH):如果輸入內容除了設定的片語或模式外,還包含其他文字,規則就不會相符,篩選器會保留MATCH_FOUND。 - 輸入內容超過 0.5 MB:排除規則只會評估輸入文字的前 0.5 MB。如果輸入內容超過 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 要求中,將 filterRuleSettings 物件納入 filterConfig 內。
以下範例會建立範本,啟用提示詞注入和越獄偵測,以及負責任的 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. |
設定排除規則的最佳做法
請按照下列最佳做法,盡量減少誤判,同時維持範本的資安態勢:
- 將規則範圍縮小至特定情境:避免排除單一動詞或廣泛字詞 (例如
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 範本。