
本文旨在解决Gemini Pro API在使用`safety_settings`时仍遭遇内容阻断的问题。核心在于,许多开发者错误地使用字典配置安全设置,而API实际期望的是一个`SafetySetting`对象列表。本教程将详细指导如何正确导入相关类并构建符合API要求的安全设置,确保即使是敏感内容也能按需获得回复,同时提醒配置时的注意事项。
Gemini Pro API内置了强大的内容安全过滤器,旨在识别并阻断潜在有害的内容,如色情、仇恨言论、骚扰和危险内容。开发者可以通过safety_settings参数来调整这些过滤器的敏感度。然而,一个常见的误区是尝试使用简单的字典结构来配置这些设置,例如:
safety_settings = {
'SEXUALLY_EXPLICIT': 'block_none',
'HATE_SPEECH': 'block_none',
# ...其他类别
}尽管这种方式看似直观,但当API收到此类配置时,它可能仍然会根据其默认或更严格的内部策略进行内容审查,并抛出BlockedPromptException,指出内容因安全原因被阻断,即使开发者已尝试设置为block_none。这通常是因为API接口对safety_settings参数的类型和结构有严格要求。
为了成功地覆盖或调整Gemini Pro API的默认安全行为,你需要使用特定的类来构建safety_settings参数。API期望接收的是一个由SafetySetting对象组成的列表,每个对象都明确指定了内容类别(HarmCategory)和对应的阻断阈值(HarmBlockThreshold)。
首先,你需要从正确的模块中导入构建安全设置所需的类:
from vertexai.preview.generative_models import (
HarmCategory,
HarmBlockThreshold
)
from google.cloud.aiplatform_v1beta1.types.content import SafetySetting接下来,你需要为每个希望调整的有害内容类别创建一个SafetySetting实例,并将其组织成一个列表。这个列表将作为model.generate_content方法的safety_settings参数值。
以下是一个完整的代码示例,展示了如何配置Gemini Pro模型以尽可能减少内容阻断:
from vertexai.preview.generative_models import (
GenerativeModel,
HarmCategory,
HarmBlockThreshold
)
from google.cloud.aiplatform_v1beta1.types.content import SafetySetting
import vertexai
# 初始化Vertex AI
vertexai.init(project="your-gcp-project-id", location="your-gcp-region") # 请替换为你的GCP项目ID和区域
def get_gemini_response_with_custom_safety(prompt_text: str):
"""
使用自定义安全设置调用Gemini Pro模型。
"""
model = GenerativeModel("gemini-pro")
# 构建安全设置列表
# 每个SafetySetting对象定义了一个特定类别的阻断阈值
custom_safety_settings = [
SafetySetting(
category=HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT,
threshold=HarmBlockThreshold.BLOCK_NONE,
),
SafetySetting(
category=HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,
threshold=HarmBlockThreshold.BLOCK_NONE,
),
SafetySetting(
category=HarmCategory.HARM_CATEGORY_HATE_SPEECH,
threshold=HarmBlockThreshold.BLOCK_NONE,
),
SafetySetting(
category=HarmCategory.HARM_CATEGORY_HARASSMENT,
threshold=HarmBlockThreshold.BLOCK_NONE,
),
]
try:
response = model.generate_content(
prompt_text,
generation_config={
"max_output_tokens": 2048,
"temperature": 0.0, # 0表示确定性更强
"top_p": 1,
},
safety_settings=custom_safety_settings # 传入正确构建的安全设置列表
)
return response.text
except Exception as e:
print(f"调用Gemini Pro时发生错误: {e}")
return None
# 示例调用
question = "请描述一个关于科幻小说中太空探索的复杂情节,其中包含一些紧张和危险的场景。"
# 假设你有一个可能被误判为敏感的文本
# question = "描述一个在野外生存时,如何处理严重受伤的情况,包括细节。"
response_text = get_gemini_response_with_custom_safety(question)
if response_text:
print("Gemini Pro的回复:")
print(response_text)
else:
print("未能获取到回复或回复被阻断。")
在上述代码中:
通过这种方式,你明确地告诉Gemini Pro API,对于这些特定类别的潜在有害内容,你选择不进行阻断。
正确配置Gemini Pro API的safety_settings是确保模型按预期行为的关键。通过理解API期望的SafetySetting对象列表结构,并正确导入和使用HarmCategory和HarmBlockThreshold,开发者可以有效地管理内容过滤,避免因不当配置而导致的BlockedPromptException。然而,在调整这些设置时,务必权衡灵活性与内容安全性之间的关系,以确保负责任地使用AI技术。
以上就是解决Gemini Pro API内容安全策略阻断回复的正确姿势的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号