安全性和內容篩選器

Google 的生成式 AI 模型 (如 Gemini 2.0 Flash) 一律優先考量安全。不過,Gemini 仍有可能生成有害的回覆, 特別是明確提示時。為進一步提升安全性及減少濫用情形,您可以設定內容篩選器,封鎖可能有害的回覆。

本頁面說明各類安全和內容篩選器,並概述重要的安全概念。對於可設定的內容篩選器,這項功能會顯示如何設定各類別的封鎖門檻,藉此控管系統封鎖提示和回覆的頻率。

安全和內容篩選器可做為屏障,防止模型輸出有害內容,但不會直接影響模型的行為。如要進一步瞭解模型可控性,請參閱安全性的系統指令

不安全的提示

Vertex AI 中的 Gemini API 會提供下列其中一個 enum 程式碼,說明提示遭拒的原因:

列舉 篩選器類型 說明
PROHIBITED_CONTENT 無法設定的安全篩選機制 提示因含有禁止內容 (通常是兒少性虐待內容) 而遭到封鎖。
BLOCKED_REASON_UNSPECIFIED 不適用 提示遭到封鎖,原因不明。
OTHER 不適用 這個列舉是指封鎖提示的所有其他原因。請注意,Vertex AI 的 Gemini API 不支援所有語言。如需支援的語言清單,請參閱「Gemini 支援的語言」。

詳情請參閱「BlockedReason」。

以下是 Vertex AI 中 Gemini API 的輸出內容範例,提示因含有 PROHIBITED_CONTENT 而遭到封鎖:

{
  "promptFeedback": {
    "blockReason": "PROHIBITED_CONTENT"
  },
  "usageMetadata": {
    "promptTokenCount": 7,
    "totalTokenCount": 7
  }
}

不安全的回覆

下列篩選器可偵測並封鎖可能不安全的回覆:

  • 無法設定的安全篩選機制,可封鎖兒少性虐待內容 (CSAM) 和個人識別資訊 (PII)。
  • 可設定的內容篩選器:根據有害類別清單和使用者設定的封鎖門檻,封鎖不安全的內容。您可以根據使用情境和業務,為每種危害設定適當的封鎖門檻。詳情請參閱「可設定的內容篩選器」。
  • 引文篩選器:提供來源資料的引文。 詳情請參閱「引用篩選器」。

大型語言模型會以稱為「權杖」的文字單位生成回覆。模型達到自然停止點,或其中一個篩選器封鎖了回應,就會停止生成權杖。Vertex AI 中的 Gemini API 會提供下列 enum 程式碼之一,說明權杖生成作業停止的原因:

列舉 篩選器類型 說明
STOP 不適用 這個列舉表示模型已達到自然停止點或提供的停止序列。
MAX_TOKENS 不適用 模型已達到要求中指定的權杖數量上限,因此停止生成權杖。
SAFETY 可設定的內容篩選器 由於系統將回覆標示為有害內容,因此已停止產生權杖。
RECITATION 引用內容篩選器 由於可能含有引用內容,權杖生成作業已停止。
SPII 無法設定的安全篩選機制 由於回應遭標示為含有具敏感性的個人識別資訊 (SPII) 內容,因此系統已停止產生權杖。
PROHIBITED_CONTENT 無法設定的安全篩選機制 由於回應含有禁止內容 (通常是兒少性虐待內容),因此系統停止生成權杖。
FINISH_REASON_UNSPECIFIED 不適用 完成原因不明。
OTHER 不適用 這個列舉是指停止產生權杖的所有其他原因。請注意,並非所有語言都支援產生權杖。如需支援的語言清單,請參閱「Gemini 支援的語言」。

詳情請參閱「FinishReason」。

如果篩選器封鎖回應,系統會將回應的 Candidate.content 欄位設為空白。不會向模型提供任何意見回饋。

可設定的內容篩選器

內容篩選器會根據危害清單評估內容,內容篩選器會根據內容的有害機率,以及有害內容的嚴重程度,為每個有害類別指派一個分數。

可設定的內容篩選器沒有獨立於模型版本的版本控管功能。Google 不會為先前發布的模型版本更新可設定的內容篩選器。不過,這項設定可能會更新模型日後版本的可設定內容篩選器。

有害類別

內容篩選器會根據下列危害類別評估內容:

危害類別 定義
仇恨言論 針對特定身分和/或受保護特質發表負面或有害言論。
騷擾 針對他人發表含有威脅、恐嚇、霸凌、辱罵或惡意意圖的言論。
情色露骨內容 提及性行為或其他猥褻情事的內容。
危險內容 宣傳有害商品、服務與活動,或是提供接觸管道。

比較機率分數和嚴重程度分數

機率安全分數反映模型回覆與相應危害相關聯的可能性。並提供 0.01.0 之間的信賴分數 (四捨五入至小數點後一位)。可信度分數會離散化為四個可信度等級:NEGLIGIBLELOWMEDIUMHIGH

嚴重程度分數反映模型回覆可能造成的危害程度。並有相關聯的嚴重程度分數,範圍從 0.01.0,四捨五入到小數點後一位。嚴重程度分數會離散化為四個等級:NEGLIGIBLELOWMEDIUMHIGH

內容的機率分數可能偏低,但嚴重程度分數偏高,也可能機率分數偏高,但嚴重程度分數偏低。

如何設定內容篩選器

您可以使用 Vertex AI 中的 Gemini API 或 Google Cloud 控制台,設定內容篩選器。

Vertex AI 中的 Gemini API

Vertex AI 中的 Gemini API 提供兩種「有害內容封鎖」方法:

  • 嚴重程度:這個方法會同時使用機率和嚴重程度分數。
  • 機率:這個方法只會使用機率分數。

預設方法為 SEVERITY。如果是 gemini-1.5-flashgemini-1.5-pro 之前的機型,預設方法為 PROBABILITY。詳情請參閱 HarmBlockMethod API 參考資料

Vertex AI 中的 Gemini API 提供下列「有害內容封鎖」門檻:

  • BLOCK_LOW_AND_ABOVE:當機率分數或嚴重程度分數為 LOWMEDIUMHIGH 時封鎖。
  • BLOCK_MEDIUM_AND_ABOVE:當機率分數或嚴重程度分數為 MEDIUMHIGH 時封鎖。
  • BLOCK_ONLY_HIGH:當機率分數或嚴重程度分數為 HIGH 時封鎖。
  • HARM_BLOCK_THRESHOLD_UNSPECIFIED:使用預設門檻封鎖。
  • OFF:不會自動封鎖回覆,也不會傳回中繼資料。 對於 gemini-2.0-flash-001 和後續模型,OFF 是預設值。
  • BLOCK_NONE:「BLOCK_NONE」設定會移除自動封鎖回覆功能。而是可以根據傳回的分數,自行設定內容規範。這是受限欄位,並非所有 GA 模式版本的使用者都能存取。

舉例來說,下列 Python 程式碼示範如何將危險內容類別的有害內容封鎖門檻設為 BLOCK_ONLY_HIGH

generative_models.SafetySetting(
  category=generative_models.HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,
  threshold=generative_models.HarmBlockThreshold.BLOCK_ONLY_HIGH,
),

系統會封鎖大部分歸類為危險內容的內容。 詳情請參閱 HarmBlockThreshold API 參考資料

如需 Python、Node.js、Java、Go、C# 和 REST 的端對端範例,請參閱「內容篩選器設定範例」。

Google Cloud 控制台

您可以在 Google Cloud 控制台中設定每個內容屬性的門檻。 內容篩選器只會使用機率分數。無法使用嚴重程度分數。

Google Cloud 控制台提供下列門檻值:

  • 關閉 (預設):不會自動封鎖回覆。
  • 封鎖少數內容:當機率分數為 HIGH 時封鎖。
  • 封鎖部分內容:當機率分數為 MEDIUMHIGH 時封鎖。
  • 封鎖多數:當機率分數為 LOWMEDIUMHIGH 時封鎖。

舉例來說,如果將「危險內容」類別的封鎖設定設為「封鎖少量」,系統就會封鎖危險內容機率高的內容。機率較低的字詞則可使用。預設門檻為 Block some

如要設定門檻,請按照下列步驟操作:

  1. 在 Google Cloud 控制台的 Vertex AI 專區中,前往「Vertex AI Studio」頁面。

    前往 Vertex AI Studio

  2. 在「建立新提示」下方,按一下任一按鈕,開啟提示設計頁面。

  3. 按一下「安全設定」

    系統會開啟「安全設定」對話方塊視窗。

  4. 為每個危害類別設定所需門檻值。

  5. 按一下 [儲存]

可設定的內容篩選器封鎖回覆時的輸出範例

以下是 Vertex AI 中 Gemini API 的輸出內容範例,顯示可設定的內容篩選器因偵測到危險內容而封鎖回覆:

{
  "candidates": [{
    "finishReason": "SAFETY",
    "safetyRatings": [{
      "category": "HARM_CATEGORY_HATE_SPEECH",
      "probability": "NEGLIGIBLE",
      "probabilityScore": 0.11027937,
      "severity": "HARM_SEVERITY_LOW",
      "severityScore": 0.28487435
    }, {
      "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
      "probability": "HIGH",
      "blocked": true,
      "probabilityScore": 0.95422274,
      "severity": "HARM_SEVERITY_MEDIUM",
      "severityScore": 0.43398145
    }, {
      "category": "HARM_CATEGORY_HARASSMENT",
      "probability": "NEGLIGIBLE",
      "probabilityScore": 0.11085559,
      "severity": "HARM_SEVERITY_NEGLIGIBLE",
      "severityScore": 0.19027223
    }, {
      "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
      "probability": "NEGLIGIBLE",
      "probabilityScore": 0.22901751,
      "severity": "HARM_SEVERITY_NEGLIGIBLE",
      "severityScore": 0.09089675
    }]
  }],
  "usageMetadata": {
    "promptTokenCount": 38,
    "totalTokenCount": 38
  }
}

內容篩選器設定範例

以下範例說明如何使用 Vertex AI 中的 Gemini API 設定內容篩選器:

Gen AI SDK for Python

安裝

pip install --upgrade google-genai

詳情請參閱 SDK 參考說明文件

設定環境變數,透過 Vertex AI 使用 Gen AI SDK:

# Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values
# with appropriate values for your project.
export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT
export GOOGLE_CLOUD_LOCATION=global
export GOOGLE_GENAI_USE_VERTEXAI=True

from google import genai
from google.genai.types import (
    GenerateContentConfig,
    HarmCategory,
    HarmBlockThreshold,
    HttpOptions,
    SafetySetting,
)

client = genai.Client(http_options=HttpOptions(api_version="v1"))

system_instruction = "Be as mean as possible."

prompt = """
    Write a list of 5 disrespectful things that I might say to the universe after stubbing my toe in the dark.
"""

safety_settings = [
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_HARASSMENT,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_HATE_SPEECH,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
]

response = client.models.generate_content(
    model="gemini-2.5-flash",
    contents=prompt,
    config=GenerateContentConfig(
        system_instruction=system_instruction,
        safety_settings=safety_settings,
    ),
)

# Response will be `None` if it is blocked.
print(response.text)
# Example response:
#     None

# Finish Reason will be `SAFETY` if it is blocked.
print(response.candidates[0].finish_reason)
# Example response:
#     FinishReason.SAFETY

# For details on all the fields in the response
for each in response.candidates[0].safety_ratings:
    print('\nCategory: ', str(each.category))
    print('Is Blocked:', True if each.blocked else False)
    print('Probability: ', each.probability)
    print('Probability Score: ', each.probability_score)
    print('Severity:', each.severity)
    print('Severity Score:', each.severity_score)
# Example response:
#
#     Category:  HarmCategory.HARM_CATEGORY_HATE_SPEECH
#     Is Blocked: False
#     Probability:  HarmProbability.NEGLIGIBLE
#     Probability Score:  2.547714e-05
#     Severity: HarmSeverity.HARM_SEVERITY_NEGLIGIBLE
#     Severity Score: None
#
#     Category:  HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT
#     Is Blocked: False
#     Probability:  HarmProbability.NEGLIGIBLE
#     Probability Score:  3.6103818e-06
#     Severity: HarmSeverity.HARM_SEVERITY_NEGLIGIBLE
#     Severity Score: None
#
#     Category:  HarmCategory.HARM_CATEGORY_HARASSMENT
#     Is Blocked: True
#     Probability:  HarmProbability.MEDIUM
#     Probability Score:  0.71599233
#     Severity: HarmSeverity.HARM_SEVERITY_MEDIUM
#     Severity Score: 0.30782545
#
#     Category:  HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT
#     Is Blocked: False
#     Probability:  HarmProbability.NEGLIGIBLE
#     Probability Score:  1.5624657e-05
#     Severity: HarmSeverity.HARM_SEVERITY_NEGLIGIBLE
#     Severity Score: None

REST

設定環境後,即可使用 REST 測試文字提示。下列範例會將要求傳送至發布商模型端點。

使用任何要求資料之前,請先替換以下項目:

  • LOCATION:處理要求的區域。可用的選項包括:

    按一下即可展開可用地區的部分清單

    • us-central1
    • us-west4
    • northamerica-northeast1
    • us-east4
    • us-west1
    • asia-northeast3
    • asia-southeast1
    • asia-northeast1
  • PROJECT_ID:您的專案 ID
  • MODEL_ID:您要使用的多模態模型 ID,例如 gemini-2.0-flash
  • ROLE: 與內容相關聯的對話角色。即使是單輪對話,也必須指定角色。可接受的值包括:
    • USER:指定您傳送的內容。
    • MODEL:指定模型的回覆。
  • TEXT: 提示中要加入的文字指令。
  • SAFETY_CATEGORY: 要設定門檻的安全類別。可接受的值包括:

    按一下即可展開安全類別

    • HARM_CATEGORY_SEXUALLY_EXPLICIT
    • HARM_CATEGORY_HATE_SPEECH
    • HARM_CATEGORY_HARASSMENT
    • HARM_CATEGORY_DANGEROUS_CONTENT
  • THRESHOLD: 根據機率封鎖可能屬於指定安全類別的回應。可接受的值包括:

    按一下即可展開封鎖門檻

    • BLOCK_NONE
    • BLOCK_ONLY_HIGH
    • BLOCK_MEDIUM_AND_ABOVE (預設)
    • BLOCK_LOW_AND_ABOVE
    BLOCK_LOW_AND_ABOVE 會封鎖最多內容,而 BLOCK_ONLY_HIGH 則會封鎖最少內容。

HTTP 方法和網址:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:streamGenerateContent

JSON 要求主體:

{
  "contents": {
    "role": "ROLE",
    "parts": { "text": "TEXT" }
  },
  "safetySettings": {
    "category": "SAFETY_CATEGORY",
    "threshold": "THRESHOLD"
  },
}

如要傳送要求,請選擇以下其中一個選項:

curl

將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:streamGenerateContent"

PowerShell

將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:streamGenerateContent" | Select-Object -Expand Content

您應該會收到類似如下的 JSON 回應。

curl 指令範例

LOCATION="us-central1"
MODEL_ID="gemini-2.0-flash"
PROJECT_ID="test-project"

curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/publishers/google/models/${MODEL_ID}:streamGenerateContent -d \
$'{
  "contents": {
    "role": "user",
    "parts": { "text": "Hello!" }
  },
  "safety_settings": [
    {
      "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
      "threshold": "OFF"
    },
    {
      "category": "HARM_CATEGORY_HATE_SPEECH",
      "threshold": "BLOCK_LOW_AND_ABOVE"
    },
    {
      "category": "HARM_CATEGORY_HARASSMENT",
      "threshold": "BLOCK_MEDIUM_AND_ABOVE"
    },
    {
      "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
      "threshold": "BLOCK_ONLY_HIGH"
    }
  ]
}'

引用內容篩選器

Vertex AI 的生成式程式碼功能旨在產生原創內容。Gemini 的設計宗旨是盡量避免完整複製現有內容。如果 Gemini 功能大量引用網頁內容,系統會註明出處頁面。

有時相同內容可能會出現在多個網頁中,Gemini 會引用最熱門的來源。如果引用來源為程式碼存放區,引文中也可能會註明適用的開放原始碼授權。您有責任遵守任何授權規定。

如要瞭解引用篩選器的中繼資料,請參閱 Citation API 參考資料

公民誠信篩選器

公民誠信篩選器會偵測並封鎖提及或與政治選舉和候選人相關的提示。這項篩選器預設為停用。如要啟用這項功能,請將 CIVIC_INTEGRITY 的封鎖門檻設為下列任一值。指定哪個值都沒關係。

  • BLOCK_LOW_AND_ABOVE
  • BLOCK_MEDIUM_AND_ABOVE
  • BLOCK_ONLY_HIGH

下列 Python 程式碼顯示如何開啟公民誠信篩選器:

  generative_models.SafetySetting(
      category=generative_models.HarmCategory.CIVIC_INTEGRITY,
      threshold=generative_models.HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
  ),

如要進一步瞭解公民誠信篩選器,請與您的 Google Cloud代表聯絡。

最佳做法

內容篩選器有助於防範不安全的內容,但有時可能會封鎖良性內容,或遺漏有害內容。即使沒有篩選器,Gemini 2.0 Flash 等進階模型也能生成安全的回覆。測試不同的篩選設定,在安全和允許適當內容之間取得平衡。

後續步驟