Google の生成 AI モデル(Gemini 2.5 Flash など)は、安全性を重視して設計されています。ただし、プロンプトに露骨な表現が含まれていると、有害な回答を生成する可能性があります。安全性をさらに強化し、不正使用を最小限に抑えるには、有害な可能性のある回答をブロックするようにコンテンツ フィルタを構成します。
このページでは、このような安全フィルタとコンテンツ フィルタのタイプと、安全性に関する重要なコンセプトについて説明します。構成可能なコンテンツ フィルタについて、有害カテゴリのブロックしきい値を構成してプロンプトとレスポンスがブロックされる頻度を制御する方法について説明します。
安全フィルタとコンテンツ フィルタは障壁として機能し、有害な出力を防ぎますが、モデルの動作に直接影響することはありません。モデルの操縦性の詳細については、安全性のためのシステム指示をご覧ください。
安全でないプロンプト
Vertex AI の Gemini API は、プロンプトが拒否された理由を説明する次のいずれかの enum
コードを返します。
列挙型 | フィルタの種類 | 説明 |
---|---|---|
PROHIBITED_CONTENT |
構成不可の安全フィルタ | 禁止されているコンテンツ(通常は CSAM)が含まれていると報告されたため、プロンプトがブロックされました。 |
BLOCKED_REASON_UNSPECIFIED |
なし | プロンプトをブロックする理由が指定されていません。 |
OTHER |
なし | この列挙型は、プロンプトをブロックするその他のすべての理由を指します。Vertex AI の Gemini API は、すべての言語をサポートしているわけではありません。サポートされている言語の一覧については、Gemini の言語サポートをご覧ください。 |
詳細については、BlockedReason をご覧ください。
PROHIBITED_CONTENT
が含まれているためにプロンプトがブロックされた場合、Vertex AI の Gemini API は次のような出力を生成します。
{
"promptFeedback": {
"blockReason": "PROHIBITED_CONTENT"
},
"usageMetadata": {
"promptTokenCount": 7,
"totalTokenCount": 7
}
}
安全でない回答
次のフィルタを使用すると、安全でない可能性のある回答を検出してブロックできます。
- 構成不可の安全フィルタ: 児童性的虐待のコンテンツ(CSAM)と個人を特定できる情報(PII)をブロックします。
- 構成可能なコンテンツ フィルタ: 有害カテゴリのリストと、ユーザーが構成したブロックしきい値に基づいて、安全でないコンテンツをブロックします。これらの有害コンテンツのブロックしきい値は、ユースケースとビジネスに応じて構成できます。詳細については、構成可能なコンテンツ フィルタをご覧ください。
- 引用フィルタ: ソース資料の引用を提供します。詳細については、引用フィルタをご覧ください。
LLM は、トークンと呼ばれるテキスト単位で回答を生成します。モデルは、自然な停止点に達するか、フィルタのいずれかで回答がブロックされると、トークンの生成を停止します。Vertex AI の Gemini API は、トークン生成が停止した理由を説明する次のいずれかの enum
コードを提供します。
列挙型 | フィルタの種類 | 説明 |
---|---|---|
STOP |
なし | この列挙型は、モデルが自然な停止点または指定された停止シーケンスに達したことを示します。 |
MAX_TOKENS |
なし | モデルがリクエストで指定されたトークンの最大数に達したため、トークンの生成が停止されました。 |
SAFETY |
構成可能なコンテンツ フィルタ | 有害なコンテンツが含まれており、レスポンスにフラグが付けられたため、トークンの生成が停止されました。 |
RECITATION |
引用フィルタ | 列挙の可能性があるため、トークンの生成が停止されました。 |
SPII |
構成不可の安全フィルタ | レスポンスに個人を特定できる機密情報(SPII)のコンテンツが含まれているため、トークンの生成が停止されました。 |
PROHIBITED_CONTENT |
構成不可の安全フィルタ | 禁止されているコンテンツ(通常は CSAM)が含まれており、レスポンスにフラグが付けられたため、トークンの生成が停止されました。 |
FINISH_REASON_UNSPECIFIED |
なし | 終了の理由は指定されていません。 |
OTHER |
なし | この列挙型は、トークンの生成を停止するその他のすべての理由を指します。トークンの生成は、すべての言語でサポートされているわけではありません。サポートされている言語の一覧については、Gemini の言語サポートをご覧ください。 |
詳細については、FinishReason をご覧ください。
フィルタが回答をブロックすると、回答の Candidate.content
フィールドは無効になります。モデルにフィードバックは提供されません。
構成可能なコンテンツ フィルタ
コンテンツ フィルタは、有害性のリストと照合してコンテンツを評価します。コンテンツ フィルタは、有害カテゴリごとに、コンテンツが有害である確率に基づくスコアと、有害なコンテンツの重大度に基づくスコアを割り当てます。
構成可能なコンテンツ フィルタには、モデル バージョンから独立したバージョニングはありません。以前にリリースされたモデルのバージョンの構成可能なコンテンツ フィルタは更新されません。ただし、モデルの将来のバージョンの構成可能なコンテンツ フィルタが更新される可能性はあります。
有害カテゴリ
コンテンツ フィルタは、次の有害カテゴリに基づいてコンテンツを評価します。
有害カテゴリ | 定義 |
---|---|
ヘイトスピーチ | ID や保護されている属性をターゲットとする否定的なコメントや有害なコメント。 |
嫌がらせ | 他人をターゲットにした威圧表現、いじめ、虐待的な内容を含むコメント |
性的に露骨な表現 | 性行為やわいせつな内容に関する情報が含まれるコンテンツ。 |
危険なコンテンツ | 有害な商品、サービス、アクティビティへのアクセスを促進または可能にするコンテンツ。 |
確率スコアと重大度スコアの比較
安全性スコアの確率は、モデルの回答がそれぞれの有害カテゴリに関連付けられている可能性を反映しています。信頼スコアは 0.0
~1.0
で、小数点第 2 位を四捨五入します。信頼スコアは、NEGLIGIBLE
、LOW
、MEDIUM
、HIGH
の 4 つの信頼レベルに分割されます。
重大度スコアは、モデルのレスポンスがどのくらい有害であるかを反映しています。重大度スコアは 0.0
~1.0
の範囲で、小数点第 2 位を四捨五入します。重大度スコアは、NEGLIGIBLE
、LOW
、MEDIUM
、HIGH
の 4 つのレベルに分割されます。
コンテンツの確率スコアが低く、重大度スコアが高い場合や、確率スコアが高く、重大度スコアが低い場合があります。
コンテンツ フィルタを構成する方法
コンテンツ フィルタは、Vertex AI の Gemini API または Google Cloud コンソールを使用して構成できます。
Vertex AI の Gemini API
Vertex AI の Gemini API には、有害なコンテンツをブロックする方法が 2 つあります。
- SEVERITY: この方法では、確率スコアと重大度スコアの両方を使用します。
- PROBABILITY: この方法では、確率スコアのみを使用します。
デフォルトのメソッドは SEVERITY
です。gemini-1.5-flash
と gemini-1.5-pro
より古いモデルの場合、デフォルトのメソッドは PROBABILITY
です。詳細については、HarmBlockMethod
API リファレンスをご覧ください。
Vertex AI の Gemini API には、次の有害コンテンツのブロックしきい値があります。
BLOCK_LOW_AND_ABOVE
: 確率スコアまたは重大度スコアがLOW
、MEDIUM
、またはHIGH
の場合にブロックします。BLOCK_MEDIUM_AND_ABOVE
: 確率スコアまたは重大度スコアがMEDIUM
またはHIGH
の場合にブロックします。BLOCK_ONLY_HIGH
: 確率スコアまたは重大度スコアがHIGH
の場合にブロックします。HARM_BLOCK_THRESHOLD_UNSPECIFIED
: デフォルトのしきい値を使用してブロックします。OFF
: 回答の自動ブロックは行われず、メタデータは返されません。gemini-2.5-flash
以降のモデルの場合、デフォルト値は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
の場合にブロックします。 - 一部をブロック: 確率スコアが
MEDIUM
またはHIGH
の場合にブロックします。 - ほとんどをブロック: 確率スコアが
LOW
、MEDIUM
、またはHIGH
の場合にブロックします。
たとえば、「危険なコンテンツ」カテゴリのブロック設定を [少量をブロック] に設定した場合、危険なコンテンツである確率が高いものはすべてブロックされますが、その確率の低いものは許可されます。デフォルトのしきい値は Block some
です。
しきい値を設定する手順は次のとおりです。
Google Cloud コンソールの [Vertex AI] セクションで、[Vertex AI Studio] ページに移動します。
[プロンプトを新規作成] でいずれかのボタンをクリックしてプロンプト デザインページを開きます。
[安全性設定] をクリックします。
[安全性設定] ダイアログ ウィンドウが開きます。
有害コンテンツのカテゴリごとに目的のしきい値を構成します。
[保存] をクリックします。
構成可能なコンテンツ フィルタによって回答がブロックされた場合の出力例
危険なコンテンツが含まれているため、構成可能なコンテンツ フィルタによって回答がブロックされた場合、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 を使用してコンテンツ フィルタを構成する方法を示しています。
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
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.5-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 メソッドと URL:
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.5-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 リファレンスをご覧ください。
ベスト プラクティス
コンテンツ フィルタは安全でないコンテンツをブロックするうえで役立ちますが、無害なコンテンツがブロックされることや、有害なコンテンツがブロックされないことがあります。Gemini 2.5 Flash などの高度なモデルは、フィルタなしでも安全な回答を生成するように設計されています。さまざまなフィルタ設定をテストして、安全性と適切なコンテンツの許可のバランスを保ってください。
次のステップ
- 安全性のためのシステムの指示について確認する。
- 不正行為のモニタリングについて詳しく知る。
- 責任ある AI について確認する。
- ブロックされた回答の処理方法を確認する。