对提示和回答进行排错

Model Armor 会检查针对配置的筛查置信度级别的问题和回答。本页详细介绍了如何对提示和回答进行排错。

开始之前,请按照创建模板中的说明创建模板。

对提示进行排错

Model Armor 会对文本和基于文件的格式的提示进行排错。

文本提示

使用此命令可在 Model Armor 中对文本提示进行排错。使用我们在创建模板的第 7 步“高级敏感数据保护”中创建的模板 (ma-template-id-1234)。

curl -X POST \
-d  "{user_prompt_data: { text: 'How do I make a bomb?' } }" \
-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:sanitizeUserPrompt"

替换以下内容:

  • gcloud auth print-access-token 是指定账号的访问令牌。
  • PROJECT_ID - 模板所属的项目的 ID。
  • LOCATION - 模板的位置。
  • TEMPLATE_ID - 模板的 ID。

这会生成以下响应。请注意,MATCH_FOUND 属于“危险”类别。

{
 "sanitizationResult": {
   "filterMatchState": "NO_MATCH_FOUND",
   "invocationResult": "SUCCESS",
   "filterResults": {
     "csam": {
       "csamFilterFilterResult": {
         "executionState": "EXECUTION_SUCCESS",
         "matchState": "NO_MATCH_FOUND"
       }
     },
     "malicious_uris": {
       "maliciousUriFilterResult": {
         "executionState": "EXECUTION_SUCCESS",
         "matchState": "NO_MATCH_FOUND"
       }
     },
     "rai": {
       "raiFilterResult": {
         "executionState": "EXECUTION_SUCCESS",
         "matchState": "MATCH_FOUND",
         "raiFilterTypeResults": {
           "sexually_explicit": {
             "matchState": "NO_MATCH_FOUND"
           },
           "hate_speech": {
             "matchState": "NO_MATCH_FOUND"
           },
           "harassment": {
             "matchState": "NO_MATCH_FOUND"
           },
           "dangerous": {
             "matchState": "MATCH_FOUND"
           }
         }
       }
     },
     "pi_and_jailbreak": {
       "piAndJailbreakFilterResult": {
         "executionState": "EXECUTION_SUCCESS",
         "matchState": "MATCH_FOUND"
       }
     },
     "sdp": {
       "sdpFilterResult": {
         "inspectResult": {
           "executionState": "EXECUTION_SUCCESS",
           "matchState": "NO_MATCH_FOUND"
         }
       }
     }
   }
 }
}

敏感数据保护基本配置

创建一个启用了基本 Sensitive Data Protection 设置的模板。基本敏感数据保护功能可帮助您筛查以下敏感数据保护 infoType:

  • CREDIT_CARD_NUMBER:信用卡号由 12 至 19 位数字组成。可用于全球付款交易。
  • US_SOCIAL_SECURITY_NUMBER:美国社会保障号 (SSN) 是核发给美国公民、永久居民和临时居民的一个 9 位数号码。该检测器不会与有任何数字组为全零的号码(即 000-##-####、###-00-#### 或 ###-##-0000)、第一个数字组为 666 的号码或第一个数字为 9 的号码进行比对。
  • FINANCIAL_ACCOUNT_NUMBER:指代特定财务账号的数字,例如银行账号或退休账号。
  • US_INDIVIDUAL_TAXPAYER_IDENTIFICATION_NUMBER:美国个人纳税人识别号 (ITIN) 是由美国国税局 (IRS) 核发的一种税号 (TIN)。ITIN 是一种税务处理编号,仅适用于无法获得社会保障号 (SSN) 的某些外籍居民和非居民,以及他们的配偶和家属。
  • GCP_CREDENTIALS: Google Cloud 服务账号凭据。这些凭据可用于通过 Google API 客户端库和服务账号进行身份验证。
  • GCP_API_KEY: Google Cloud API 密钥。在调用无需访问私有用户数据的 API 时使用的加密字符串。 Google Cloud

以下是一个基本敏感数据保护配置示例:

gcloud

gcloud alpha model-armor templates create template-name
--location=location
--basic-config-filter-enforcement=enabled

REST API

export FILTER_CONFIG_SDP_BASIC='{
  "filterConfig": {
  "sdpSettings": {
  "basicConfig": {
    "filterEnforcement": "ENABLED"
      }
    }
  }
}'

curl -X POST \
-d  $FILTER_CONFIG_SDP_BASIC \
-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=sdp_basic"

替换以下内容:

  • gcloud auth print-access-token 是指定账号的访问令牌。
  • PROJECT_ID - 模板所属的项目的 ID。
  • LOCATION - 模板的位置。
  • TEMPLATE_ID - 模板的 ID。

使用创建的模板过滤问题。示例如下:

curl -X POST \
-d  "{ user_prompt_data: { 'text': 'can you remember my ITIN : 988-86-1234'} }" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://modelarmor.us-central1.rep.googleapis.com/v1/projects/$PROJECT_ID/locations/us-central1/templates/sdp_basic:sanitizeUserPrompt"

此示例会返回以下响应:

{
  "sanitizationResult": {
    "filterMatchState": "MATCH_FOUND",
    "invocationResult": "SUCCESS",
    "filterResults": [
      {
        "csamFilterFilterResult": {
          "executionState": "EXECUTION_SUCCESS",
          "matchState": "NO_MATCH_FOUND"
        }
      },
      {
        "sdpFilterResult": {
          "inspectResult": {
            "executionState": "EXECUTION_SUCCESS",
            "matchState": "MATCH_FOUND",
            "findings": [
              {
                "infoType": "US_INDIVIDUAL_TAXPAYER_IDENTIFICATION_NUMBER",
                "likelihood": "LIKELY",
                "location": {
                  "byteRange": {
                    "start": "26",
                    "end": "37"
                  },
                  "codepointRange": {
                    "start": "26",
                    "end": "37"
                  }
                }
              }
            ]
          }
        }
      }
    ]
  }
}

敏感数据保护高级配置

借助模型保护功能,您可以使用高级 Sensitive Data Protection 配置设置,通过 Sensitive Data Protection 模板筛查 LLM 提示和响应。这样,您就可以使用敏感数据保护基本设置中提供的 infoType 之外的敏感数据保护功能。

如需在模型保护机制中使用敏感数据保护高级过滤器,敏感数据保护模板应与模型保护机制模板位于同一云端位置,例如本例中的 us-central1

gcloud

gcloud alpha model-armor templates create template-name
--location=location \
--advanced-config-inspect-template="path/to/template"

REST API

  export FILTER_CONFIG_SDP_ADV='{
  "filterConfig": {
  "sdpSettings": {
    "advancedConfig": {
      "deidentifyTemplate": "projects/$PROJECT_ID/locations/LOCATION/deidentifyTemplates/deidentify-ip-address",
       "inspectTemplate": "projects/$PROJECT_ID/locations/$LOCATION/inspectTemplates/inspect-ip-address"
        }
      }
    }
  }'

 curl -X POST \
 -d  $FILTER_CONFIG_SDP_ADV \
 -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=sdp_advanced"

# Result of CreateTemplate
{
  "name": "projects/$PROJECT_ID/locations/LOCATION/templates/all-filters-test",
  "createTime": "2024-12-16T17:08:19.626693819Z",
  "updateTime": "2024-12-16T17:08:19.626693819Z",
   "filterConfig": {
    "sdpSettings": {
    "advancedConfig": {
      "deidentifyTemplate":  "projects/$PROJECT_ID/locations/LOCATION/deidentifyTemplates/deidentify-ip-address",
       "inspectTemplate": "projects/$PROJECT_ID/locations/$LOCATION/inspectTemplates/inspect-ip-address"
      }
   }
  }
},
service_agent_email: "service-PROJECT_NUMBER@gcp-sa-modelarmor.iam.gserviceaccount.com"

替换以下内容:

  • PROJECT_ID - 模板所属的项目的 ID。
  • LOCATION - 模板的位置。

在包含敏感数据保护模板的项目中,向在创建模板的第 7 步 - 高级敏感数据保护中创建的服务代理授予 DLP User 角色 (roles/dlp.user) 和 DLP Reader 角色 (roles/dlp.reader)。如果敏感数据保护模板与模型保护模板位于同一项目中,您可以跳过此步骤。

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member serviceAccount:service-$PROJECT_NUMBER@gcp-sa-modelarmor.iam.gserviceaccount.com --role roles/dlp.user

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member serviceAccount:service-$PROJECT_NUMBER@gcp-sa-modelarmor.iam.gserviceaccount.com --role roles/dlp.reader

替换以下内容:

  • PROJECT_ID - 模板所属的项目的 ID。

使用创建的模板过滤问题。示例如下:

curl -X POST \
-d  "{ user_prompt_data: { 'text': 'is there anything malicious running on 1.1.1.1?'} }" \
-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:sanitizeUserPrompt"

替换以下内容:

  • gcloud auth print-access-token 是指定账号的访问令牌。
  • PROJECT_ID - 模板所属的项目的 ID。
  • LOCATION - 模板的位置。
  • TEMPLATE_ID - 模板的 ID。

此示例会返回以下响应:

{
  "sanitizationResult": {
    "filterMatchState": "MATCH_FOUND",
    "invocationResult": "SUCCESS",
    "filterResults": [
      {
        "csamFilterFilterResult": {
          "executionState": "EXECUTION_SUCCESS",
          "matchState": "NO_MATCH_FOUND"
        }
      },
      {
        "sdpFilterResult": {
          "deidentifyResult": {
            "executionState": "EXECUTION_SUCCESS",
            "matchState": "MATCH_FOUND",
            "data": {
              "text": "is there anything malicious running on [IP_ADDRESS]?"
            },
            "transformedBytes": "7"
          }
        }
      }
    ]
  }
}

基于文件的提示

使用此命令可使用 Model Armor 对文件格式的用户提示进行排错。文件需要以 Base64 编码格式传递。

curl -X POST \
-d "$(jq -n \
  --arg data "$(base64 -w 0 -i sample.pdf)" \
  '{userPromptData: {byteItem: {byteDataType: "PDF", byteData: $data}}}')" \
-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:sanitizeUserPrompt"

替换以下内容:

  • gcloud auth print-access-token 是指定账号的访问令牌。
  • PROJECT_ID - 模板所属的项目的 ID。
  • LOCATION - 模板的位置。
  • TEMPLATE_ID - 模板的 ID。

对模型回答进行清理

以下是使用 Model Armor 对模型响应进行脱敏的命令示例。

curl -X POST \
-d  "{model_response_data: { text: 'It might hurt and cause pain' } }" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://modelarmor.us-central1.rep.googleapis.com/v1/projects/$PROJECT_ID/locations/us-central1/templates/ma-template-id-1234:sanitizeModelResponse"

此示例会返回以下响应:

{
  "sanitizationResult": {
    "filterMatchState": "MATCH_FOUND",
    "invocationResult": "SUCCESS",
    "filterResults": {
      "rai": {
        "raiFilterResult": {
          "executionState": "EXECUTION_SUCCESS",
          "matchState": "MATCH_FOUND",
          "raiFilterTypeResults": {
            "dangerous": {
              "confidenceLevel": "MEDIUM_AND_ABOVE",
              "matchState": "MATCH_FOUND"
            },
            "sexually_explicit": {
              "matchState": "NO_MATCH_FOUND"
            },
            "hate_speech": {
              "matchState": "NO_MATCH_FOUND"
            },
            "harassment": {
              "matchState": "NO_MATCH_FOUND"
            }
          }
        }
      },
      "pi_and_jailbreak": {
        "piAndJailbreakFilterResult": {
          "executionState": "EXECUTION_SUCCESS",
          "matchState": "NO_MATCH_FOUND"
          }
      },
"csam": {
        "csamFilterFilterResult": {
          "executionState": "EXECUTION_SUCCESS",
          "matchState": "NO_MATCH_FOUND"
        }
      },
      "malicious_uris": {
        "maliciousUriFilterResult": {
          "executionState": "EXECUTION_SUCCESS",
          "matchState": "NO_MATCH_FOUND"
        }
      },
    }
  }
}

后续步骤