Gemini API には、プロトタイピングの段階で調整できる安全性の設定があり、アプリケーションに対してより厳しいまたは緩い安全性構成が必要かどうかを判断できます。これらの設定は 4 つのフィルタ カテゴリで調整でき、特定の種類のコンテンツを制限または許可できます。
このガイドでは、Gemini API が安全性設定とフィルタリングを処理する方法と、アプリケーションの安全性設定を変更する方法について説明します。
安全フィルタ
Gemini API の調整可能な安全フィルタは、次のカテゴリに対応しています。
カテゴリ | 説明 |
---|---|
嫌がらせ | ID や保護されている属性をターゲットとする否定的なコメントや有害なコメント。 |
ヘイトスピーチ | 粗暴、無礼、または冒とく的なコンテンツ。 |
露骨な性表現 | 性行為やわいせつな内容に関する情報が含まれるコンテンツ。 |
危険 | 有害な行為を奨励、促進、または助長している。 |
市民の清廉性 | 選挙関連のクエリ。 |
これらのフィルタを使用して、ユースケースに適したものを調整できます。たとえば、ビデオゲームの台詞を作成する場合は、ゲームの性質上、「危険」として評価されたコンテンツをより多く許容することを問題ないとみなす場合があります。
Gemini API には、調整可能な安全フィルタに加えて、児童の安全を脅かすコンテンツなど、重大な有害性に対する保護機能が組み込まれています。このような種類の有害行為は常にブロックされ、調整することはできません。
コンテンツ セーフティ フィルタリング レベル
Gemini API は、コンテンツが安全でない可能性のレベルを HIGH
、MEDIUM
、LOW
、NEGLIGIBLE
に分類します。
Gemini API は、重大度ではなく、コンテンツが安全でない確率に基づいてコンテンツをブロックします。コンテンツによっては、危害の重大度が高くても、安全でない確率が低くなるものもあるため、この点を考慮することが重要です。たとえば、次の文を比較します。
- ロボットが私をパンチした。
- ロボットが私を切り付けた。
最初の文は安全でない確率が高いかもしれませんが、2 つ目の文は暴力の観点で重大度が高いとみなすことができます。したがって、エンドユーザーへの悪影響を最小限に抑えながら、主要なユースケースをサポートするために必要となる、適切なレベルでのブロックを慎重にテストし、検討することが重要です。
リクエストごとの安全フィルタリング
安全性設定は、API に送信するリクエストごとに調整できます。リクエストを行うと、コンテンツが分析され、安全性評価が割り当てられます。安全性評価には、カテゴリと有害として分類される確率が含まれます。たとえば、嫌がらせのカテゴリが「高」の確率で安全でなかったためにコンテンツがブロックされた場合、返される安全性評価のカテゴリは HARASSMENT
で、有害性の確率は HIGH
に設定されます。
デフォルトでは、安全性の設定により、どのフィルタにおいても、安全でない確率が中程度以上のコンテンツ(プロンプトを含む)はブロックされます。このベースラインの安全性は、ほとんどのユースケースで機能するように設計されています。そのため、安全性の設定は、アプリケーションで一貫して必要とされる場合にのみ調整してください。
次の表に、カテゴリごとに調整できるブロック設定を示します。たとえば、ヘイトスピーチ カテゴリのブロック設定を [少量をブロック] に設定した場合、ヘイトスピーチ コンテンツである確率が高いものはすべてブロックされますが、その確率の低いものは許可されます。
しきい値(Google AI Studio) | しきい値(API) | 説明 |
---|---|---|
ブロックなし | BLOCK_NONE |
安全でないコンテンツの確率に関係なく、常に表示されます。 |
少量をブロック | BLOCK_ONLY_HIGH |
安全でないコンテンツである確率が高い場合にブロックします。 |
一部をブロック | BLOCK_MEDIUM_AND_ABOVE |
安全でないコンテンツの確率が中程度または高い場合にブロックします。 |
ほとんどをブロック | BLOCK_LOW_AND_ABOVE |
コンテンツが安全でない確率が低い場合、中程度の場合、高い場合にブロックします。 |
なし | HARM_BLOCK_THRESHOLD_UNSPECIFIED |
しきい値が指定されていません。デフォルトのしきい値を使用してブロックします。 |
しきい値が設定されていない場合、デフォルトのブロックしきい値は、[市民の誠実性] カテゴリを除くすべてのカテゴリで [ほとんどをブロック](gemini-1.5-pro-002
と gemini-1.5-flash-002
のみ)または [一部をブロック](他のすべてのモデル)です。
[市民の健全性] カテゴリのデフォルトのブロックしきい値は、Google AI Studio を使用してプロンプトを送信する場合は [ほとんどをブロック]、Gemini API を直接使用する場合 [ブロックなし] です。
これらの設定は、生成サービスに対するリクエストごとに設定できます。詳しくは、HarmBlockThreshold
API リファレンスをご覧ください。
安全性に関するフィードバック
generateContent
は、安全性に関するフィードバックを含む GenerateContentResponse
を返します。
プロンプトのフィードバックは promptFeedback
に含まれます。promptFeedback.blockReason
が設定されている場合、プロンプトのコンテンツがブロックされています。
回答候補のフィードバックは Candidate.finishReason
と Candidate.safetyRatings
に含まれます。レスポンス コンテンツがブロックされ、finishReason
が SAFETY
の場合、safetyRatings
を調べて詳細を確認できます。ブロックされたコンテンツは返されません。
安全性設定を調整する
このセクションでは、Google AI Studio とコードの両方で安全性設定を調整する方法について説明します。
Google AI Studio
安全性設定は Google AI Studio で調整できますが、オフにすることはできません。
[実行設定] パネルで [安全性設定を編集] をクリックして、[安全性設定の実行] モーダルを開きます。モーダルでは、スライダーを使用して、安全性カテゴリごとにコンテンツのフィルタリング レベルを調整できます。
リクエストを送信すると(モデルに質問するなど)、リクエストのコンテンツがブロックされている場合は
「コンテンツなし」メッセージが表示されます。詳細を表示するには、[コンテンツなし] のテキストにポインタを合わせ、[ 安全性] をクリックします。Gemini API SDK
次のコード スニペットは、GenerateContent
呼び出しで安全性設定を設定する方法を示しています。これにより、ハラスメント(HARM_CATEGORY_HARASSMENT
)とヘイトスピーチ(HARM_CATEGORY_HATE_SPEECH
)のカテゴリのしきい値が設定されます。たとえば、これらのカテゴリを BLOCK_LOW_AND_ABOVE
に設定すると、嫌がらせやヘイトスピーチである確率が低いコンテンツもブロックされます。しきい値の設定については、リクエストごとの安全フィルタリングをご覧ください。
Python
from google.generativeai.types import HarmCategory, HarmBlockThreshold
model = genai.GenerativeModel(model_name='gemini-1.5-flash')
response = model.generate_content(
['Do these look store-bought or homemade?', img],
safety_settings={
HarmCategory.HARM_CATEGORY_HATE_SPEECH: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
HarmCategory.HARM_CATEGORY_HARASSMENT: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
}
)
Go
model := client.GenerativeModel("gemini-1.5-flash")
model.SafetySettings = []*genai.SafetySetting{
{
Category: genai.HarmCategoryHarassment,
Threshold: genai.HarmBlockLowAndAbove,
},
{
Category: genai.HarmCategoryHateSpeech,
Threshold: genai.HarmBlockLowAndAbove,
},
}
Node.js
import { HarmBlockThreshold, HarmCategory } from "@google/generative-ai";
// ...
const safetySettings = [
{
category: HarmCategory.HARM_CATEGORY_HARASSMENT,
threshold: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
},
{
category: HarmCategory.HARM_CATEGORY_HATE_SPEECH,
threshold: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
},
];
const model = genAi.getGenerativeModel({ model: "gemini-1.5-flash", safetySettings: safetySettings });
ウェブ
import { HarmBlockThreshold, HarmCategory } from "@google/generative-ai";
// ...
const safetySettings = [
{
category: HarmCategory.HARM_CATEGORY_HARASSMENT,
threshold: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
},
{
category: HarmCategory.HARM_CATEGORY_HATE_SPEECH,
threshold: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
},
];
const model = genAi.getGenerativeModel({ model: "gemini-1.5-flash", safetySettings });
Dart(Flutter)
final safetySettings = [
SafetySetting(HarmCategory.harassment, HarmBlockThreshold.low),
SafetySetting(HarmCategory.hateSpeech, HarmBlockThreshold.low),
];
final model = GenerativeModel(
model: 'gemini-1.5-flash',
apiKey: apiKey,
safetySettings: safetySettings,
);
Kotlin
val harassmentSafety = SafetySetting(HarmCategory.HARASSMENT, BlockThreshold.LOW_AND_ABOVE)
val hateSpeechSafety = SafetySetting(HarmCategory.HATE_SPEECH, BlockThreshold.LOW_AND_ABOVE)
val generativeModel = GenerativeModel(
modelName = "gemini-1.5-flash",
apiKey = BuildConfig.apiKey,
safetySettings = listOf(harassmentSafety, hateSpeechSafety)
)
Java
SafetySetting harassmentSafety = new SafetySetting(HarmCategory.HARASSMENT,
BlockThreshold.LOW_AND_ABOVE);
SafetySetting hateSpeechSafety = new SafetySetting(HarmCategory.HATE_SPEECH,
BlockThreshold.LOW_AND_ABOVE);
GenerativeModel gm = new GenerativeModel(
"gemini-1.5-flash",
BuildConfig.apiKey,
null, // generation config is optional
Arrays.asList(harassmentSafety, hateSpeechSafety)
);
GenerativeModelFutures model = GenerativeModelFutures.from(gm);
REST
echo '{
"safetySettings": [
{"category": "HARM_CATEGORY_HARASSMENT", "threshold": "BLOCK_ONLY_HIGH"},
{"category": "HARM_CATEGORY_HATE_SPEECH", "threshold": "BLOCK_MEDIUM_AND_ABOVE"}
],
"contents": [{
"parts":[{
"text": "'I support Martians Soccer Club and I think Jupiterians Football Club sucks! Write a ironic phrase about them.'"}]}]}' > request.json
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=$GOOGLE_API_KEY" \
-H 'Content-Type: application/json' \
-X POST \
-d @request.json 2> /dev/null
次のステップ
- API の詳細については、API リファレンスをご覧ください。
- LLM を使用して開発する際の安全上の考慮事項については、安全に関するガイダンスをご覧ください。
- 可能性と重大度の評価について詳しくは、Jigsaw チームをご覧ください。
- Perspective API など、安全性ソリューションに貢献するプロダクトの詳細を確認する。 * これらの安全性設定を使用して、有害性分類器を作成できます。始める際は、分類の例をご覧ください。