Gemini API には、プロトタイピングの段階で調整できる安全性の設定が用意されています。これにより、アプリケーションに対してより厳しいまたは緩い安全性の構成が必要かどうかを判断できます。これらの設定は、5 つのフィルタ カテゴリにわたって調整し、特定の種類のコンテンツを制限または許可できます。
このガイドでは、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
、およびすべての新しい安定版 GA モデルでは [ブロックしない]、その他のすべてのモデルでは [一部をブロック] になります。これは、[市民の誠実性] カテゴリを除くすべてのカテゴリに適用されます。
市民の誠実性カテゴリのデフォルトのブロックしきい値は、Google AI Studio と Gemini API の両方で [ブロックしない](gemini-2.0-flash-001
のエイリアスとして gemini-2.0-flash
、gemini-2.0-pro-exp-02-05
、gemini-2.0-flash-lite
)です。Google AI Studio の他のすべてのモデルでは [ほとんどをブロック] です。
これらの設定は、生成サービスに対するリクエストごとに設定できます。詳しくは、HarmBlockThreshold
API リファレンスをご覧ください。
安全性に関するフィードバック
generateContent
は、安全性に関するフィードバックを含む GenerateContentResponse
を返します。
プロンプトのフィードバックは promptFeedback
に含まれています。promptFeedback.blockReason
が設定されている場合、プロンプトのコンテンツはブロックされました。
レスポンス候補のフィードバックは、Candidate.finishReason
と Candidate.safetyRatings
に含まれます。レスポンス コンテンツがブロックされ、finishReason
が SAFETY
の場合、safetyRatings
を調べて詳細を確認できます。ブロックされたコンテンツは返されません。
安全性設定を調整する
このセクションでは、Google AI Studio とコードの両方で安全性設定を調整する方法について説明します。
Google AI Studio
Google AI Studio で安全設定を調整することはできますが、オフにすることはできません。
[実行設定] パネルの [安全設定を編集] をクリックして、[実行の安全設定] モーダルを開きます。モーダルで、スライダーを使用して、安全カテゴリごとにコンテンツ フィルタリング レベルを調整できます。
リクエストを送信すると(モデルに質問するなど)、リクエストのコンテンツがブロックされている場合は
No Content というメッセージが表示されます。詳細を表示するには、[コンテンツなし] というテキストにポインタを合わせて、 [安全性] をクリックします。Gemini API SDK
次のコード スニペットは、GenerateContent
呼び出しで安全性設定を行う方法を示しています。これにより、ハラスメント(HARM_CATEGORY_HARASSMENT
)とヘイトスピーチ(HARM_CATEGORY_HATE_SPEECH
)のカテゴリのしきい値が設定されます。たとえば、これらのカテゴリを BLOCK_LOW_AND_ABOVE
に設定すると、嫌がらせやヘイトスピーチである確率が低い以上のコンテンツはすべてブロックされます。しきい値の設定については、リクエストごとの安全性フィルタリングをご覧ください。
Python
from google import genai
from google.genai import types
import PIL.Image
img = PIL.Image.open("cookies.jpg")
client = genai.Client()
response = client.models.generate_content(
model="gemini-2.0-flash",
contents=['Do these look store-bought or homemade?', img],
config=types.GenerateContentConfig(
safety_settings=[
types.SafetySetting(
category=types.HarmCategory.HARM_CATEGORY_HATE_SPEECH,
threshold=types.HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
),
]
)
)
print(response.text)
Go
package main
import (
"context"
"fmt"
"log"
"google.golang.org/genai"
)
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
config := &genai.GenerateContentConfig{
SafetySettings: []*genai.SafetySetting{
{
Category: "HARM_CATEGORY_HATE_SPEECH",
Threshold: "BLOCK_LOW_AND_ABOVE",
},
},
}
response, err := client.Models.GenerateContent(
ctx,
"gemini-2.0-flash",
genai.Text("Some potentially unsafe prompt."),
config,
)
if err != nil {
log.Fatal(err)
}
fmt.Println(response.Text())
}
JavaScript
import { GoogleGenAI } from "@google/genai";
const ai = new GoogleGenAI({});
const safetySettings = [
{
category: "HARM_CATEGORY_HARASSMENT",
threshold: "BLOCK_LOW_AND_ABOVE",
},
{
category: "HARM_CATEGORY_HATE_SPEECH",
threshold: "BLOCK_LOW_AND_ABOVE",
},
];
async function main() {
const response = await ai.models.generateContent({
model: "gemini-2.0-flash",
contents: "Some potentially unsafe prompt.",
config: {
safetySettings: safetySettings,
},
});
console.log(response.text);
}
await main();
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-2.0-flash:generateContent" \ -H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-X POST \
-d @request.json 2> /dev/null
次のステップ
- 完全な API の詳細については、API リファレンスをご覧ください。
- LLM を使用した開発における安全性の考慮事項の概要については、安全性に関するガイダンスをご覧ください。
- 確率と重大度の評価について詳しくは、Jigsaw チームをご覧ください。
- Perspective API などの安全ソリューションに貢献するプロダクトについて詳しくは、こちらをご覧ください。* これらの安全性設定を使用して、有害性分類子を作成できます。始めるには、分類の例をご覧ください。