Google の生成 AI モデル(Gemini 1.5 Flash や Gemini 1.5 Pro など)は、安全性を重視して設計されています。ただし、プロンプトに露骨な表現が含まれていると、有害な回答を生成する可能性があります。安全性をさらに強化し、不正使用を最小限に抑えるには、有害な可能性のある回答をブロックするように安全フィルタを構成します。
このページでは、このような安全フィルタのタイプと、安全性に関する重要なコンセプトについて説明します。構成可能なフィルタについて、有害カテゴリのブロックしきい値を構成してプロンプトと回答がブロックされる頻度を制御する方法について説明します。
保護フィルタは障壁として機能し、有害な出力を防ぎますが、モデルの動作に直接影響することはありません。モデルのステアリング機能の詳細については、安全性に関するシステム指示をご覧ください。
安全でないプロンプト
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
の場合にブロックします。gemini-1.5-flash-001
とgemini-1.5-pro-001
の場合、デフォルト値はBLOCK_MEDIUM_AND_ABOVE
です。 - BLOCK_ONLY_HIGH: 確率スコアまたは重大度スコアが
HIGH
の場合にブロックします。 - HARM_BLOCK_THRESHOLD_UNSPECIFIED: デフォルトのしきい値を使用してブロックします。
- オフ: 自動回答のブロックは行われず、安全性メタデータは返されません。
gemini-1.5-flash-002
とgemini-1.5-pro-002
の場合、デフォルト値は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 Studio] セクションで、[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
Vertex AI SDK for Python のインストールまたは更新の方法については、Vertex AI SDK for Python をインストールするをご覧ください。 詳細については、Python API リファレンス ドキュメントをご覧ください。
Node.js
このサンプルを試す前に、Vertex AI クイックスタート: クライアント ライブラリの使用にある Node.js の設定手順を完了してください。詳細については、Vertex AI Node.js API のリファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
Java
このサンプルを試す前に、Vertex AI クイックスタート: クライアント ライブラリの使用にある Java の設定手順を完了してください。詳細については、Vertex AI Java API のリファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
Go
このサンプルを試す前に、Vertex AI クイックスタート: クライアント ライブラリの使用にある Go の設定手順を完了してください。詳細については、Vertex AI Go API のリファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
C#
このサンプルを試す前に、Vertex AI クイックスタート: クライアント ライブラリの使用にある C# の設定手順を完了してください。詳細については、Vertex AI C# API のリファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
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-1.0-pro
gemini-1.0-pro-vision
- 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-1.0-pro"
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 1.5 Flash や Gemini 1.5 Pro などの高度なモデルは、フィルタなしでも安全な回答を生成するように設計されています。さまざまなフィルタ設定をテストして、安全性と適切なコンテンツの許可のバランスを保ってください。
次のステップ
- 安全に関するシステムの指示について確認する。
- 不正行為のモニタリングについて学習する。
- 責任ある AI について確認する。
- データ ガバナンスについて確認する。