您可以在 Model Armor 中配置特定于模板的排除规则,以减少误报。排除规则是特定于模板的规则,其中包含要从检测中排除的正则表达式或短语。
支持的过滤条件
您可以针对以下过滤器使用排除规则:
- 提示注入和越狱检测(
PROMPT_INJECTION_AND_JAILBREAK) - Responsible AI 安全过滤条件 (
RESPONSIBLE_AI)
何时使用排除规则
如果您需要针对特定工作负载抑制已知的误报检测结果,但又不想完全停用过滤条件,请使用特定于模板的排除规则:
- 特定于网域或技术领域的术语:您的应用会处理与Responsible AI 安全类别重叠的专业词汇,例如系统管理命令 (
kill process、abort transaction)、安全测试术语 (penetration testing)、科学术语 (blast search) 或行业用语。 - 良性的操作或格式设置指令:您的用户或提示模板包含使用祈使动词(例如
"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)
|
您的应用使用预定义的提示选项(例如界面快速回复按钮或预设命令),其中整个输入内容与已知短语匹配,并且您希望防止其他未经筛选的文本绕过过滤器。如需详细了解字典匹配行为,请参阅字典规则和正则表达式规则。 |
字典包含短语 匹配以下项:
不匹配:
|
具有部分匹配的正则表达式规则 (MATCHING_SCOPE_PARTIAL_MATCH)
|
您需要排除较大提示或回答中的结构化模式、动态标识符或特定动词和名词组合。 如需了解详情,请参阅正则表达式排除模式示例。 |
正则表达式模式:
匹配以下项:
不匹配:
|
具有完全匹配的正则表达式规则 (MATCHING_SCOPE_FULL_MATCH)
|
整个输入载荷遵循严格的结构格式(例如自动化测试标识符或结构化命令)。 |
正则表达式模式:
匹配以下项:
不匹配:
|
使用单区域或多区域端点
使用 Model Armor 模板时,您必须使用与模板位置匹配的区域级或多区域级端点 (modelarmor.LOCATION.rep.googleapis.com)。
全球端点 (modelarmor.googleapis.com) 不支持管理 Model Armor 模板,也不支持清理提示和回答。
准备工作
在开始之前,请完成以下任务。
获取所需的权限
如需获得在 Model Armor 模板中配置排除规则所需的权限,请让您的管理员为您授予包含 Model Armor 模板的 Model Armor 项目的 Model Armor Admin (roles/modelarmor.admin) IAM 角色。
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
启用 API
您必须先启用 Model Armor API,然后才能使用 Model Armor。
控制台
gcloud
在开始之前,请使用 Google Cloud CLI 和 Model Armor API 按照以下步骤操作:
安装 Google Cloud CLI,然后 使用联合身份登录 gcloud CLI。 登录后,运行以下命令来初始化 Google Cloud CLI:
gcloud init启用 Model Armor API(如果尚未启用):
启用 API 所需的角色
如需启用 API,您需要拥有
serviceusage.services.enable权限。如果您创建了项目,则可能已经通过 Owner 角色 (roles/owner) 拥有此权限。否则,您可以通过 Service Usage Admin 角色 (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) 或 Responsible AI (RESPONSIBLE_AI) 过滤条件识别出潜在匹配项时,Model Armor 都会在提示和模型回答清理期间评估这些规则:
- 规则与输入内容匹配:如果排除规则与子字符串(
MATCHING_SCOPE_PARTIAL_MATCH,默认)或从头到尾的整个输入内容(MATCHING_SCOPE_FULL_MATCH)匹配,Model Armor 会替换matchState并将其设置为NO_MATCH_FOUND,以用于整个受支持的过滤条件类型(包括RESPONSIBLE_AI的所有 Responsible AI 安全类别),而不是排除输入内容中的个别短语或范围。如果没有其他有效过滤条件检测到违规行为,则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。如需启用 Responsible AI 安全过滤条件 (RESPONSIBLE_AI),请在raiSettings.raiFilters中配置至少一个 Responsible AI 安全类别。 - Model Armor 不支持流式 API 或下限设置中的排除规则。
- Model Armor 会先根据原始输入文本评估排除规则,然后再执行去标识化或翻译等文本转换。排除规则不支持多语言检测或自动翻译;如需排除多种语言的内容,请为每种目标语言添加特定于语言的短语或正则表达式模式。
- 排除规则对非拉丁文字语言和多字节 UTF-8 字符的支持有限。特别是,对于使用组合标记的文字(例如印度文字)或字词之间没有空格的文字(例如中文和日文),字典规则 (
wordList) 可能无法按预期匹配。完全匹配规则 (MATCHING_SCOPE_FULL_MATCH) 不匹配包含多字节 UTF-8 字符的输入。排除非拉丁文字的内容或包含多字节字符的输入内容时,请使用包含MATCHING_SCOPE_PARTIAL_MATCH的正则表达式规则 (regex)。 - 排除规则受系统限制的约束。如需了解详情,请参阅排除规则系统限制。
创建包含排除规则的模板
如需创建包含排除规则的模板,请在 POST 请求中将 filterRuleSettings 对象包含在 filterConfig 中。
以下示例创建了一个模板,该模板可启用提示注入和越狱检测以及 Responsible AI 安全过滤条件,并配置了两个具有部分匹配 (MATCHING_SCOPE_PARTIAL_MATCH) 功能的排除规则:
- 提示注入和越狱检测 (
PROMPT_INJECTION_AND_JAILBREAK):使用字典规则将包含指定短语(例如ignore case when sorting this list或ignore empty rows)的输入从提示注入和越狱检测中排除。 - Responsible AI (
RESPONSIBLE_AI):使用正则表达式规则从 Responsible 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:要从 Responsible 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.
|
Responsible AI 安全过滤条件示例
技术文档、系统管理命令和常用表达方式通常包含与 Responsible AI 安全类别重叠的字词。为了减少较大提示或回答中的误报,请将字词边界 (\\b)、非捕获组 ((?:...)) 和不区分大小写标志 ((?i)) 与 MATCHING_SCOPE_PARTIAL_MATCH 结合使用。
下表提供了部分匹配正则表达式模式(带有 JSON 转义反斜杠)的示例,以及针对常见 Responsible AI 假正例场景的提示示例。
| 风险类别 | 触发词 | 假正例场景 | 部分匹配正则表达式模式示例 | 提示示例 |
|---|---|---|---|---|
| 暴力或伤害 | kill |
进程终止、电气或 HVAC 开关以及常用惯用语 |
(?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:排除预定义的界面提示、预设命令或自动化测试载荷时,请将matchingScope设置为MATCHING_SCOPE_FULL_MATCH(或使用^和$锚定正则表达式)。完全匹配范围可防止用户在排除的短语中附加对抗性指令,从而绕过检测。 - 为原始未转换的文本编写规则:Model Armor 会在去标识化或翻译之前评估排除规则。确保您的模式与去标识化之前的原始格式相匹配,并为应用支持的每种语言添加特定于语言的短语或正则表达式模式。
- 升级过滤条件后,检查并停用临时规则:将模板升级到较新的过滤条件版本后,请重新评估误报测试用例,并移除已通过更新的检测模型解决的排除规则。
后续步骤
- 查看如何使用排除规则清理提示和清理模型回答的示例。
- 查看排除规则系统限制。
- 了解如何创建和管理 Model Armor 模板。