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 工作室中调整安全设置,但无法将其关闭。
点击运行设置面板中的修改安全设置,打开运行安全设置模态窗口。在模态窗口中,您可以使用滑块调整各个安全类别的内容过滤级别:
当您发送请求(例如,向模型提问)时,如果请求的内容被屏蔽,系统会显示
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。 * 您可以使用这些安全设置来创建毒性分类器。如需开始使用,请参阅分类示例。