SanitizeModelResponse 政策

本頁適用於 ApigeeApigee Hybrid

查看 Apigee Edge 說明文件。

「SanitizeModelResponse」政策會清理生成式 AI 模型的回覆,保護 AI 用戶端免於接觸有害或令人反感的內容。這項政策會使用 Model Armor 評估模型回覆是否含有有害或令人反感的內容,並透過 Apigee 為 AI 用戶端和工作負載提供原生保護機制。Model Armor 是 Google Cloud 一項提供 AI 安全性和安全措施的服務,可降低大型語言模型 (LLM) 相關風險。

這項政策會與 SanitizeModelResponse 政策搭配使用。

這項政策是可擴充的政策,視您的 Apigee 授權而定,使用這項政策可能會產生費用或使用量影響。如要瞭解政策類型和使用相關性,請參閱「政策類型」。

事前準備

使用 SanitizeModelResponse 政策前,您必須先完成下列工作:

  • 建立 Model Armor 範本。您必須先完成這個步驟,才能建立「SanitizeModelResponse」政策。
  • 設定 Model Armor 服務的 API 端點。

必要的角色

如要取得適用 SanitizeModelResponse 政策所需的權限,請要求管理員在您用來部署 Apigee Proxy 的服務帳戶上,授予下列 IAM 角色:

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

您或許還可透過自訂角色或其他預先定義的角色取得必要權限。

啟用 API

Enable the Model Armor APIs.

Enable the APIs

<SanitizeModelResponse> 元素

定義 SanitizeModelResponse 政策。

預設值 請參閱下方的「Default Policy」分頁
是否必要? 必填
類型 複雜物件
上層元素 N/A
子元素 <DisplayName>
<IgnoreUnresolvedVariables>
<TemplateName>
<UserPromptSource>
<LLMResponseSource>

<SanitizeModelResponse> 元素使用以下語法:

語法

<SanitizeModelResponse async="false" continueOnError="false" enabled="true" name="sanitize-response">
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <DisplayName>sanitize-response-sample</DisplayName>
  <ModelArmor>
    <TemplateName>projects/{project}/locations/{location}/templates/{template-name}</TemplateName>
  </ModelArmor>
  <UserPromptSource>{jsonPath('$.contents[-1].parts[-1].text',request.content,true)}</UserPromptSource>
  <LLMResponseSource>{jsonPath($.candidates[-1].content.parts,response.content,true)}</LLMResponseSource>
</SanitizeModelResponse>

預設政策

以下範例說明在 Apigee UI 中將 SanitizeModelResponse 政策新增至要求流程時的預設設定:

<SanitizeModelResponse async="false" continueOnError="false" enabled="true" name="sanitize-response">
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <DisplayName>sanitize-response-sample</DisplayName>
  <ModelArmor>
    <TemplateName>projects/{project}/locations/{location}/templates/{template-name}</TemplateName>
  </ModelArmor>
  <UserPromptSource>{jsonPath('$.contents[-1].parts[-1].text',request.content,true)}</UserPromptSource>
  <LLMResponseSource>{jsonPath($.candidates[-1].content.parts,response.content,true)}</LLMResponseSource>
</SanitizeModelResponse>

使用 Apigee UI 插入新的 SanitizeModelResponse 政策時,範本會包含所有可能作業的 Stub。請參閱下方資訊,瞭解必要元素。

這個元素包含下列所有政策都適用的屬性:

屬性 預設 是否必要? 說明
name 不適用 必要

政策的內部名稱。name 屬性的值可以包含英文字母、數字、空格、連字號、底線和句號。這個值不得超過 255 個半形字元。

您可以選擇使用 <DisplayName> 元素,在管理 UI 代理程式編輯器中為政策加上不同、自然語言的名稱。

continueOnError false 選用 將其設為 false,即可在政策失敗時傳回錯誤。這是大多數政策的預期行為。將其設為 true,即使政策失敗,流程執行作業仍會繼續進行。另請參閱:
enabled 選用 設為 true 即可強制執行政策。設為 false 即可關閉政策。即使政策仍附加至流程,系統也不會強制執行這項政策。
async   false 已淘汰 此屬性已淘汰。

下表概略說明 <SanitizeModelResponse> 的子元素:

子元素 是否必要 說明
<DisplayName> 選用 政策名稱。

<IgnoreUnresolvedVariables> 選用 指定如果用於範本名稱或 Model Armor 酬載的變數未解析,是否停止處理。
<TemplateName> 必填 用於清理 LLM 回覆的 Model Armor 範本。

您可以使用下列 Apigee 流程變數建立範本:

projects/{organization.name}/locations/{system.region.name}/templates/{id}

<UserPromptSource> 必填 要擷取使用者提示文字的酬載位置。系統僅支援字串文字值。

這個欄位支援 Apigee 訊息範本語法,包括使用 變數JSON 路徑函式。

例如:

{jsonpath('$.contents[-1].parts[-1].text',request.content,false)}
<LLMResponseSource> 必填 要擷取的 LLM 回應文字酬載位置。系統僅支援字串文字值。

這個欄位支援 Apigee 訊息範本語法,包括使用 變數JSON 路徑函式。

例如:

{jsonpath('$.input.prompt.text',request.content,false)}

子元素參照

本節將說明 <SanitizeModelResponse> 的子元素。

<DisplayName>

除了 name 屬性之外,您也可以在管理 UI 代理程式編輯器中使用其他更自然的名稱標記政策。

<DisplayName> 元素適用於所有政策。

預設值 不適用
是否必要? (非必要) 如果省略 <DisplayName>,系統會使用政策的 name 屬性值。
類型 字串
上層元素 <PolicyElement>
子元素

<DisplayName> 元素使用以下語法:

語法

<PolicyElement>
  <DisplayName>POLICY_DISPLAY_NAME</DisplayName>
  ...
</PolicyElement>

範例

<PolicyElement>
  <DisplayName>My Validation Policy</DisplayName>
</PolicyElement>

<DisplayName> 元素沒有屬性或子項元素。

<IgnoreUnresolvedVariables>

判斷在變數未解析時是否停止處理。將其設為 true 可忽略未解析的變數,並繼續處理。

預設值
是否必要? 選用
類型 布林值
上層元素 <SanitizeModelResponse>
子元素

<TemplateName>

Model Armor 範本。

預設值 不適用
是否必要? 必填
類型 字串
上層元素 <SanitizeModelResponse>
子元素

<TemplateName> 元素使用以下語法:

語法

<ModelArmor>
  <TemplateName>projects/{project}/locations/{location}/templates/{template-name}</TemplateName>
</ModelArmor>

範例

本例使用 Apigee 流程變數來填入必要資訊。

<ModelArmor>
  <TemplateName>projects/{organization.name}/locations/{system.region.name}/templates/{id}</TemplateName>
</ModelArmor>

<UserPromptSource>

要擷取使用者提示文字的酬載位置。系統僅支援字串文字值。

這個欄位支援 Apigee 訊息範本語法,包括使用 變數JSON 路徑函式。例如:

{jsonpath('$.input.prompt.text',request.content,false)}
預設值 {jsonPath($.contents[-1].parts[-1].text,request.content,true)}
是否必要? 必填
類型 字串
上層元素 <SanitizeModelResponse>
子元素

<LLMResponseSource>

要擷取的 LLM 回應有效載荷位置。系統僅支援字串文字值。

這個欄位支援 Apigee 訊息範本語法,包括使用 變數JSON 路徑函式。例如:

{jsonpath('$.input.prompt.text',request.content,false)}
預設值 {jsonPath($.candidates[-1].content.parts,response.content,true)}
是否必要? 必填
類型 字串
上層元素 <SanitizeModelResponse>
子元素

流程變數

您可以使用流程變數,根據 HTTP 標頭或訊息內容,或是流程中可用的內容,設定政策和流程的動態執行階段行為。如要進一步瞭解流程變數,請參閱「流程變數參考資料」。

政策可以在執行期間設定這些唯讀變數。

變數名稱 說明
SanitizeModelResponse.POLICY_NAME.templateUsed 指定要使用的模型防護範本。例如: projects/myproject/locations/us-west1/templates/mytemplate
SanitizeModelResponse.POLICY_NAME.userPrompt 指定呼叫 Model Armor 時用於清除內容的提示內容。
SanitizeModelResponse.POLICY_NAME.modelResponse 指定 LLM 回應內容,用於呼叫 Model Armor 來清理內容。
SanitizeModelResponse.POLICY_NAME.responseFromModelArmor 指定 Model Armor 的 JSON 回應。Model Armor。
SanitizeModelResponse.POLICY_NAME.filterMatchState 指定是否已比對篩選器。有效值包括 MATCH_FOUNDNO_MATCH_FOUND
SanitizeModelResponse.POLICY_NAME.invocationResult 此欄位會指出叫用作業的結果,不受比對狀態影響。可能包含下列內容:
  • 成功:所有篩選器都已順利執行。
  • 部分:部分篩選器遭到略過或執行失敗。
  • 失敗:所有篩選器都已略過或執行失敗。
SanitizeModelResponse.POLICY_NAME.raiFilterResult.executionState RAI 篩選器執行結果。有效值包括 EXECUTION_SUCCESSEXECUTION_SKIPPED
SanitizeModelResponse.POLICY_NAME.raiFilterResult.matchState RAI 篩選器比對狀態。有效值包括 MATCH_FOUNDNO_MATCH_FOUND
SanitizeModelResponse.POLICY_NAME.sdpFilterResult.inspectResult.executionState SDP 篩選器檢查結果執行狀態。有效值包括 EXECUTION_SUCCESSEXECUTION_SKIPPED
SanitizeModelResponse.POLICY_NAME.sdpFilterResult.inspectResult.matchState SDP 篩選器檢查結果比對狀態。有效值包括 MATCH_FOUNDNO_MATCH_FOUND
SanitizeModelResponse.POLICY_NAME.sdpFilterResult.deidentifyResult.executionState SDP 篩選器可辨識結果執行狀態。有效值包括 EXECUTION_SUCCESSEXECUTION_SKIPPED
SanitizeModelResponse.POLICY_NAME.sdpFilterResult.deidentifyResult.matchState SDP 篩選器可識別結果比對狀態。有效值包括 MATCH_FOUNDNO_MATCH_FOUND
SanitizeModelResponse.POLICY_NAME.piAndJailbreakFilterResult.executionState 提示注入和越獄篩選器結果執行狀態。有效值包括 EXECUTION_SUCCESSEXECUTION_SKIPPED
SanitizeModelResponse.POLICY_NAME.piAndJailbreakFilterResult.matchState 提示插入和越獄篩選器結果符合狀態。有效值包括 MATCH_FOUNDNO_MATCH_FOUND
SanitizeModelResponse.POLICY_NAME.csamFilterFilterResult.executionState CSAM 篩選器執行狀態。有效值包括 EXECUTION_SUCCESSEXECUTION_SKIPPED
SanitizeModelResponse.POLICY_NAME.csamFilterFilterResult.matchState CSAM 篩選器比對狀態。有效值包括 MATCH_FOUNDNO_MATCH_FOUND
SanitizeModelResponse.POLICY_NAME.maliciousUriFilterResult.executionState 惡意 URI 篩選器執行狀態。有效值包括 EXECUTION_SUCCESSEXECUTION_SKIPPED
SanitizeModelResponse.POLICY_NAME.maliciousUriFilterResult.matchState 惡意 URI 篩選器比對狀態。有效值包括 MATCH_FOUNDNO_MATCH_FOUND
SanitizeModelResponse.POLICY_NAME.sanitizationMetadata.errorCode 如果 Model Armor 回應中包含自訂覆寫錯誤代碼,就會顯示這項資訊。
SanitizeModelResponse.POLICY_NAME.sanitizationMetadata.errorMessage 如果 Model Armor 回應中包含自訂覆寫錯誤代碼,就會顯示這項資訊。
SanitizeModelResponse.POLICY_NAME.csamFilterMatched/code> 布林值,表示 CSAM 篩選器是否相符。
SanitizeModelResponse.POLICY_NAME.maliciousURIs 惡意 URI 篩選器偵測到的惡意 URI 附加清單。
SanitizeModelResponse.POLICY_NAME.maliciousURIsDetected 布林值,指出惡意 URI 篩選器是否相符。
SanitizeModelResponse.POLICY_NAME.matchesFound 布林值,表示是否有任何篩選條件相符。
SanitizeModelResponse.POLICY_NAME.promptInjectionDetected 布林值,指出提示資料插入篩選器是否相符。
SanitizeModelResponse.POLICY_NAME.promptInjectionConfidence 提示插入偵測的可信度等級。
SanitizeModelResponse.POLICY_NAME.raiMatchesFound 布林值,指出 RAI 篩選器是否符合條件。
SanitizeModelResponse.POLICY_NAME.requestSentToModelArmor 布林值,指出是否已將要求傳送至 Model Armor。
SanitizeModelResponse.POLICY_NAME.sanitizeOperation 指定政策執行的作業。有效值包括 SANITIZE_USER_PROMPTSANITIZE_MODEL_RESPONSE

錯誤參考資料

本節說明傳回的錯誤代碼和錯誤訊息,以及 Apigee 針對 <SanitizeModelResponse> 政策設定的錯誤變數。如果您要開發錯誤處理錯誤規則,就必須瞭解這項資訊。如需更多資訊,請參閱「關於政策錯誤的相關資訊」和「處理錯誤」。

執行階段錯誤

錯誤代碼 HTTP 狀態 原因
steps.sanitize.model.response.FilterMatched 400 如果使用者提示未通過 Model Armor 範本檢查,就會發生此錯誤。
steps.sanitize.model.response.SanitizationResponseParsingFailed 500 如果無法剖析 Model Armor 回應,就會發生此錯誤。
steps.sanitize.model.response.FailedToExtractUserPrompt 500 如果系統無法自動擷取使用者提示的預設值,就會發生這個錯誤。
steps.sanitize.model.response.FailedToExtractLLMResponse 500 如果預設值的自動模型回應擷取作業失敗,就會發生這個錯誤。
steps.sanitize.model.response.InternalError 500 如果發生內部伺服器錯誤,就會發生這個錯誤。
steps.sanitize.model.response.ModelArmorTemplateNameExtractionFailed 500 如果無法解析範本名稱,就會發生這個錯誤。
steps.sanitize.model.response.AuthenticationFailure 500 如果服務帳戶沒有呼叫 Model Armor API 的權限,就會發生這個錯誤。
steps.sanitize.model.response.ModelArmorAPIFailed 500 如果 Model Armor API 擲回錯誤,就會發生此錯誤。
steps.sanitize.model.response.ModelArmorCalloutError 500 如果 Model Armor API 呼叫失敗,就會發生這個錯誤。
steps.sanitize.modelarmor.ServiceUnavailable 500 如果無法使用 Model Armor 服務,就會發生這項錯誤。

部署錯誤

部署含有這項政策的 Proxy 時,可能會發生這些錯誤。

錯誤名稱 原因
The ModelArmor/TemplateName element is required. 如果 <ModelArmor> 中沒有 <TemplateName> 元素,就會發生這個錯誤。
The TemplateName element value is required. 如果 <TemplateName> 值為空白,就會發生這個錯誤。

錯誤變數

當這項政策在執行階段觸發錯誤時,系統就會設定這些變數。詳情請參閱「關於政策錯誤的相關資訊」。

變數 地點 範例
fault.name="FAULT_NAME" FAULT_NAME 是錯誤名稱,如上方「執行階段錯誤」表格所列。錯誤名稱是錯誤代碼的最後一個部分。 fault.name Matches "UnresolvedVariable"
SanitizeModelResponse.POLICY_NAME.failed POLICY_NAME 是使用者指定的政策名稱,該政策會擲回錯誤。 SanitizeModelResponse.sanitize-response.failed = true

錯誤回應範例

{
  "fault": {
    "faultstring": "SanitizeModelResponse[sanitize-response]: unable to resolve variable [variable_name]",
    "detail": {
      "errorcode": "steps.sanitizemodelresponse.UnresolvedVariable"
    }
  }
}

錯誤規則範例

<FaultRule name="SanitizeModelResponse Faults">
    <Step>
        <Name>SMR-CustomSetVariableErrorResponse</Name>
        <Condition>(fault.name = "SetVariableFailed")</Condition>
    </Step>
    <Condition>(sanitizemodelresponse.failed = true)</Condition>
</FaultRule>

Model Armor 範本錯誤代碼和錯誤訊息

Model Armor 範本可覆寫 SanitizeModelResponse 政策 API 要求所擲回的錯誤代碼和錯誤訊息。如果使用者設定覆寫值,則 Model Armor 錯誤代碼和錯誤訊息會填入流程變數。

舉例來說,回應中含有 Model Armor 錯誤代碼和訊息,可能會如下所示:

{
"sanitizationResult": {
  "filterMatchState": "MATCH_FOUND",
  "filterResults": {...},
  "sanitizationMetadata": {
    "errorCode": "890",
    "errorMessage": "get out"
  },
  "invocationResult": "SUCCESS"
  }
}

結構定義

每個政策類型都由 XML 架構 (.xsd) 定義。如需參考,請前往 GitHub 查看政策架構