螢幕圖片

Model Armor 會篩選提示和回覆中的獨立圖片,以及嵌入支援 RTF 格式文件的圖片,協助保護生成式 AI 應用程式,防範圖片中嵌入的風險。

Model Armor 會使用下列方法篩選圖片:

規格和限制

使用 Model Armor 篩選圖片時,請留意下列規格和限制:

  • 支援的圖片格式:Model Armor 會篩選 JPEG、PNG 和 BMP 格式的獨立圖片。此外,系統也會從支援的 RTF 格式檔案中擷取及篩選內嵌圖片。
  • 大小限制:每張獨立圖片的大小不得超過 4 MB。RTF 格式檔案大小不得超過 4 MB,且最多只能包含 5 張內嵌圖片。如果超過上述任一限制,Model Armor 就會略過掃描整個檔案。詳情請參閱「檔案大小系統限制」和「篩選文件中的內嵌圖片」。
  • 獨立提示:使用獨立圖片呼叫 SanitizeUserPrompt 和 SanitizeModelResponse 方法時,Model Armor 會篩選每個要求中的單一圖片。不支援在單一要求中篩選多張獨立圖片。此外,Model Armor 不支援在單一要求中結合文字和圖片的獨立提示。不過,您可以同時啟用文字和圖片模態,篩選含有文字和圖片的 RTF 格式文件。
  • 去識別化:設定 Sensitive Data Protection 去識別化範本時,Model Armor 會遮蓋文字或獨立圖片,但不會同時遮蓋兩者。選取圖片模態 (MODALITY_IMAGE) 時,RTF 格式文件不支援去識別化。詳情請參閱「遮蓋獨立圖片中的機密資料」和「篩選文件中內嵌的圖片」。
  • 串流:Model Armor 串流方法僅支援文字輸入,不支援圖片或檔案。
  • 支援的整合功能:您可以直接呼叫 Model Armor REST API,或透過 Gemini Enterprise 整合功能篩選圖片。所有其他 Model Armor 整合功能只會掃描及清理文字。詳情請參閱「支援的模型」。
  • 適用地區:圖片篩選功能僅支援特定多區域。如果將含有圖片的提示傳送至 Model Armor 不支援圖片篩選功能的端點,回覆中的 invocationResult 欄位會顯示 FAILURE。如需支援圖片篩選功能的位置清單,請參閱「各區域支援的功能」。

圖片的詞元計算和定價

Model Armor 採用統一的權杖計價模式,圖片權杖的費率與文字權杖相同。

如果 Model Armor 在篩選處理前拒絕或略過輸入內容,例如空白輸入內容,或超過檔案大小或內嵌圖片限制的檔案和圖片,則不會產生費用。不過,如果輸入內容通過初步驗證,即使發生下列情況,系統仍會依據計算出的權杖數量向您收費:

  • 略過所有偵測工具:略過部分或所有設定的篩選器 (偵測工具),並傳回 EXECUTION_SKIPPED (例如偵測工具無法剖析 4 MB 限制內的圖片酬載,或略過某個模態的篩選器)。
  • 以 IMAGE 位元組資料類型包裝的非圖片檔案:傳送非圖片檔案 (例如 ZIP、CSV 或 Microsoft Word 文件) 時,byteDataType 設為 IMAGE (最多 4 MB)。即使篩選器傳回 EXECUTION_SKIPPED,Model Armor 仍會使用獨立圖片權杖計算方式,對要求計費。

Model Armor 會根據輸入類型和設定的模態,計算圖片和文件的權杖:

  • 獨立圖片:Model Armor 會將每張處理過的圖片 (最多 4 MB) 轉換為詞元,基本數量為每張圖片 5,000 個詞元,加上每 MB 圖片大小 1,000 個詞元。計算以大小為依據的權杖時,Model Armor 會將圖片大小無條件進位至下一個整數 MB:

    每張圖片的詞元數 = 5,000 + (1,000 × 圖片大小 (MB),無條件進位至下一個整數 MB)

    透過 OCR 從圖片擷取的文字會計入圖片符記,不會另外收取文字符記費用。

  • RTF 格式文件: 詞元計算方式取決於範本中設定的模態:

    • 文字模態 (MODALITY_TEXT):Model Armor 會根據從文件中擷取的文字計算詞元 (每個詞元約 4 個字元)。系統不會擷取內嵌圖片,也不會計費。
    • 圖片模態 (MODALITY_IMAGE):Model Armor 會使用圖片符記公式,個別計算每張處理過的內嵌圖片符記。文件文字不計費。
    • 文字和圖片模態 (MODALITY_TEXT 和 MODALITY_IMAGE):Model Armor 會將擷取的文件文字詞元,以及每個處理過的嵌入圖片詞元相加,計算出總詞元數。

下表列舉 Model Armor 如何計算處理後圖片的詞元:

圖片大小 計算時使用的大小 (四捨五入) 計算詞元 詞元總數
500 KB 1 MB 5,000 + (1 × 1,000) 6,000 個詞元
1.9 MB 2 MB 5,000 + (2 × 1,000) 7,000 個詞元
4 MB 4 MB 5,000 + (4 × 1,000) 9,000 個詞元

事前準備

篩選映像檔前,請先完成下列必要條件:

建立或更新範本,並啟用圖片模態

建立或更新 範本時,請選取要納入 MODALITY_IMAGE的 模態 (在 Google Cloud 控制台中選取「圖片」或「全部」,或在 使用 REST API 時,在 templateMetadata 中選取 "modalities": ["MODALITY_IMAGE", "MODALITY_TEXT"])。如未指定模態、將 modalities 欄位留空,或僅指定 MODALITY_TEXT,Model Armor 只會掃描文字,並針對掃描略過模態的篩選器傳回 EXECUTION_SKIPPED。

取得必要權限

確認您具備必要的 Identity and Access Management 角色,可清理提示和回覆 (例如 roles/modelarmor.user)。如果您在多個專案中使用進階 Sensitive Data Protection 模式,請將必要的 DLP 角色授予 Model Armor 服務代理。如需操作說明,請參閱「取得必要權限」。

清理獨立圖片

如要篩選使用者提示或模型回覆中的獨立圖片,請將 byteDataType 欄位設為 IMAGE,並在 byteData 欄位中,以支援的格式 (JPEG、PNG 或 BMP) 提供 base64 編碼圖片。

使用下列指令,清理含有圖片的提示:

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

更改下列內容:

  • PROJECT_ID:範本所在專案的 ID。
  • LOCATION:範本的位置。
  • TEMPLATE_ID:設為掃描圖片的範本 ID (MODALITY_IMAGE)。
  • IMAGE:支援格式的圖片檔路徑。

回應大致如下:

{
  "sanitizationResult": {
    "filterMatchState": "MATCH_FOUND",
    "invocationResult": "SUCCESS",
    "filterResults": {
      "csam": {
        "csamFilterFilterResult": {
          "executionState": "EXECUTION_SUCCESS",
          "matchState": "NO_MATCH_FOUND"
        }
      },
      "pi_and_jailbreak": {
        "piAndJailbreakFilterResult": {
          "executionState": "EXECUTION_SUCCESS",
          "matchState": "MATCH_FOUND",
          "confidenceLevel": "HIGH"
        }
      },
      "sdp": {
        "sdpFilterResult": {
          "inspectResult": {
            "executionState": "EXECUTION_SUCCESS",
            "matchState": "MATCH_FOUND"
          }
        }
      }
    }
  }
}

遮蓋獨立圖片中的機密資料

使用 Sensitive Data Protection 進階模式時,如果您在 Model Armor 範本中,同時設定 Sensitive Data Protection 檢查範本和 Sensitive Data Protection 去識別化範本,Model Armor 就會遮蓋獨立圖片中的機密發現項目。請務必在去識別化範本中設定圖片遮蓋。如要進一步瞭解如何在 Model Armor 中設定 Sensitive Data Protection,請參閱「調整 Sensitive Data Protection 設定」。如要瞭解去識別化限制,請參閱「規格和限制」和「篩選文件中的內嵌圖片」。

以下範例顯示啟用 Sensitive Data Protection 遮蓋功能的篩選器設定:

{
  "filterConfig": {
    "sdpSettings": {
      "advancedConfig": {
        "inspectTemplate": "projects/PROJECT_ID/locations/LOCATION/inspectTemplates/INSPECT_TEMPLATE_ID",
        "deidentifyTemplate": "projects/PROJECT_ID/locations/LOCATION/deidentifyTemplates/DEIDENTIFY_TEMPLATE_ID"
      }
    }
  }
}

更改下列內容:

  • PROJECT_ID:Sensitive Data Protection 範本所在專案的 ID。
  • LOCATION:範本的位置。
  • INSPECT_TEMPLATE_ID:檢查範本的 ID。
  • DEIDENTIFY_TEMPLATE_ID:去識別化範本的 ID。

使用已啟用圖片遮蓋功能的範本,對獨立圖片執行遮蓋作業時,回應會包含遮蓋後的圖片,以及各項發現項目的定界框座標:

{
  "sanitizationResult": {
    "filterMatchState": "MATCH_FOUND",
    "invocationResult": "SUCCESS",
    "filterResults": {
      "csam": {
        "csamFilterFilterResult": {
          "executionState": "EXECUTION_SUCCESS",
          "matchState": "NO_MATCH_FOUND"
        }
      },
      "sdp": {
        "sdpFilterResult": {
          "redactResult": {
            "executionState": "EXECUTION_SUCCESS",
            "matchState": "MATCH_FOUND",
            "redactedImage": "[REDACTED_IMAGE]",
            "findings": [
              {
                "infoType": "EMAIL_ADDRESS",
                "likelihood": "LIKELY",
                "location": {
                  "contentLocations": [
                    {
                      "imageFindingLocation": {
                        "boundingBoxes": {
                          "top": 16,
                          "left": 121,
                          "width": 620,
                          "height": 90
                        }
                      }
                    }
                  ]
                }
              }
            ]
          }
        }
      }
    }
  }
}

篩選文件中的嵌入圖片

在範本中啟用圖片模態 (MODALITY_IMAGE) 並清理 RTF 格式文件 (PDF、WORD_DOCUMENT、EXCEL_DOCUMENT 或 POWERPOINT_DOCUMENT) 時,Model Armor 會自動擷取並篩選文件中最多 5 張嵌入圖片。如果同時啟用 MODALITY_TEXT 和 MODALITY_IMAGE,Model Armor 會同時篩選文件文字和內嵌圖片。

無論是只啟用 MODALITY_IMAGE,還是同時啟用 MODALITY_IMAGE 和 MODALITY_TEXT,Model Armor 都會略過掃描整個文件 (包括文字和內嵌圖片),不會部分掃描。在下列情況下,系統會針對所有設定的篩選器 (包括檢查) 傳回 EXECUTION_SKIPPED,並傳回整體 filterMatchState 為 NO_MATCH_FOUND:

如需程式碼範例,瞭解如何使用 REST 和用戶端程式庫傳送檔案式提示,請參閱「檔案式提示」。

部分檔案檢查

Model Armor 只會在整個檔案的篩選器 (偵測工具) 層級傳回部分結果 (invocationResult: PARTIAL),而非每張圖片:

  • 單一圖片失敗 (略過整個檔案):如果檔案中部分嵌入圖片掃描成功,但有一或多張其他圖片無法擷取或掃描,Model Armor 會略過整個檔案。系統會針對所有設定的篩選器傳回 executionState: EXECUTION_SKIPPED,並傳回 NO_MATCH_FOUND 的整體 filterMatchState。
  • 偵測工具層級失敗 (部分結果):如果檔案中部分設定的篩選器成功,但一或多個其他篩選器略過整個檔案 (例如偵測工具逾時),Model Armor 會傳回部分結果,並包含下列欄位:
    • 叫用結果:invocationResult 欄位設為 PARTIAL (而非 SUCCESS),表示系統略過檔案的一或多個設定篩選器,但其他篩選器已完成檢查。
    • 篩選器執行狀態:檔案報表略過的篩選器 executionState: EXECUTION_SKIPPED。篩選器已完成檔案報告 executionState: EXECUTION_SUCCESS 的檢查。
    • 比對狀態:filterMatchState 欄位會反映已完成檢查的篩選器結果。如果任何已完成的篩選器偵測到違規,filterMatchState 會設為 MATCH_FOUND。如果完成的篩選器未偵測到任何違規事項,filterMatchState 會設為 NO_MATCH_FOUND。

部分檢查的安全性考量

從安全性的角度來看,invocationResult 值為 PARTIAL 表示一或多個設定的篩選器無法評估檔案。檔案中可能仍有潛在安全性威脅,或違反政策。

根據預設,如果完成檢查的篩選器未偵測到違反政策,filterMatchState 會是 NO_MATCH_FOUND。如果應用程式要求所有設定的篩選器都必須完成檢查,才能將提示傳送至 AI 模型,請檢查回應中的 invocationResult 欄位。如果值為 PARTIAL,請根據組織的風險承受度,設定應用程式邏輯來處理要求,例如拒絕提示或轉送提示進行二次審查。

部分檢查回應範例

以下範例顯示的回應中,檔案略過兒少性虐待內容 (CSAM) 篩選器,但其他設定的篩選器已完成檢查。Model Armor 會傳回 PARTIAL 的 invocationResult、CSAM 篩選器的 EXECUTION_SKIPPED 狀態,以及其餘篩選器的 EXECUTION_SUCCESS:

{
  "sanitizationResult": {
    "filterMatchState": "NO_MATCH_FOUND",
    "invocationResult": "PARTIAL",
    "filterResults": {
      "csam": {
        "csamFilterFilterResult": {
          "executionState": "EXECUTION_SKIPPED",
          "matchState": "NO_MATCH_FOUND"
        }
      },
      "pi_and_jailbreak": {
        "piAndJailbreakFilterResult": {
          "executionState": "EXECUTION_SUCCESS",
          "matchState": "NO_MATCH_FOUND"
        }
      },
      "sdp": {
        "sdpFilterResult": {
          "inspectResult": {
            "executionState": "EXECUTION_SUCCESS",
            "matchState": "NO_MATCH_FOUND"
          }
        }
      }
    }
  }
}

後續步驟