Gemini API 提供了安全设置,您可以在原型设计阶段调整这些设置,以确定应用需要更多还是更少的安全配置限制。您可以在四种过滤器类别中调整这些设置,以限制或允许特定类型的内容。
本指南介绍了 Gemini API 如何处理安全设置和过滤,以及如何更改应用的安全设置。
安全过滤器
Gemini API 的可调整安全过滤器涵盖以下类别:
类别 | 说明 |
---|---|
骚扰内容 | 针对身份和/或受保护属性的负面或有害评论。 |
仇恨言论 | 粗鲁、无礼或亵渎性的内容。 |
露骨色情内容 | 包含对性行为或其他淫秽内容的引用。 |
危险内容 | 宣扬、助长或鼓励有害行为。 |
公民诚信 | 与选举相关的查询。 |
您可以使用这些过滤条件来调整适合自己用例的内容。例如,如果您正在构建视频游戏对话,鉴于游戏的性质,您可能认为允许允许更多内容被分级为Dangerous。
除了可调整的安全过滤条件之外,Gemini API 还内置了针对核心危害(例如危害儿童安全的内容)的保护措施。系统会始终屏蔽此类伤害,无法进行调整。
内容安全过滤级别
Gemini API 将内容不安全的概率级别分类为 HIGH
、MEDIUM
、LOW
或 NEGLIGIBLE
。
Gemini API 会根据内容不安全的概率而非严重程度来屏蔽内容。考虑这一点很重要,因为某些内容不安全的可能性很小,即使危害的严重程度可能仍然很高。例如,比较以下句子:
- 机器人打了我一拳。
- 机器人把我砍伤了。
第 1 句可能导致不安全的可能性更高,但您可能认为第 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 中调整安全设置,但无法关闭这些设置。
点击运行设置面板中的修改安全设置,打开运行安全设置模态窗口。在模态窗口中,您可以使用滑块调整各个安全类别的内容过滤级别:
当您发送请求(例如向模型提问)时,如果请求的内容被屏蔽,系统会显示
No Content 消息。如需查看更多详细信息,请将指针悬停在无内容文本上,然后点击 安全。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 });
Web
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。 * 您可以使用这些安全设置来创建毒性分类器。如需开始使用,请参阅分类示例。