0

0

解决Gemini Pro API内容安全策略阻断回复的正确姿势

碧海醫心

碧海醫心

发布时间:2025-11-16 13:49:17

|

336人浏览过

|

来源于php中文网

原创

解决gemini pro api内容安全策略阻断回复的正确姿势

本文旨在解决Gemini Pro API在使用`safety_settings`时仍遭遇内容阻断的问题。核心在于,许多开发者错误地使用字典配置安全设置,而API实际期望的是一个`SafetySetting`对象列表。本教程将详细指导如何正确导入相关类并构建符合API要求的安全设置,确保即使是敏感内容也能按需获得回复,同时提醒配置时的注意事项。

理解Gemini Pro 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的安全设置

为了成功地覆盖或调整Gemini Pro API的默认安全行为,你需要使用特定的类来构建safety_settings参数。API期望接收的是一个由SafetySetting对象组成的列表,每个对象都明确指定了内容类别(HarmCategory)和对应的阻断阈值(HarmBlockThreshold)。

1. 导入必要的类

首先,你需要从正确的模块中导入构建安全设置所需的类:

from vertexai.preview.generative_models import (
    HarmCategory, 
    HarmBlockThreshold
)
from google.cloud.aiplatform_v1beta1.types.content import SafetySetting
  • HarmCategory:定义了API识别的各种有害内容类别,例如HARM_CATEGORY_SEXUALLY_EXPLICIT、HARM_CATEGORY_HATE_SPEECH等。
  • HarmBlockThreshold:定义了对特定有害内容类别的阻断级别,例如BLOCK_NONE(不阻断)、BLOCK_LOW_AND_ABOVE(低风险及以上阻断)等。
  • SafetySetting:这是一个容器类,用于将HarmCategory和HarmBlockThreshold关联起来,形成一个具体的安全设置规则。

2. 构建SafetySetting对象列表

接下来,你需要为每个希望调整的有害内容类别创建一个SafetySetting实例,并将其组织成一个列表。这个列表将作为model.generate_content方法的safety_settings参数值。

一览AI绘图
一览AI绘图

一览AI绘图是一览科技推出的AIGC作图工具,用AI灵感助力,轻松创作高品质图片

下载

以下是一个完整的代码示例,展示了如何配置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("未能获取到回复或回复被阻断。")

在上述代码中:

  • 我们首先导入了所有必要的类。
  • custom_safety_settings是一个列表,其中包含四个SafetySetting实例,分别针对“色情内容”、“危险内容”、“仇恨言论”和“骚扰内容”设置了BLOCK_NONE(不阻断)的阈值。
  • 这个列表被传递给了model.generate_content方法的safety_settings参数。

通过这种方式,你明确地告诉Gemini Pro API,对于这些特定类别的潜在有害内容,你选择不进行阻断。

注意事项与最佳实践

  1. 谨慎使用BLOCK_NONE: 将所有安全类别设置为BLOCK_NONE意味着模型将尽可能返回内容,即使这些内容可能包含API通常会标记为有害的信息。在生产环境中,特别是在面向终端用户的应用中,应极其谨慎地使用此设置,以避免生成不当或有害内容。请务必了解并遵守Google的AI使用政策。
  2. 选择合适的阻断阈值: 除了BLOCK_NONE,HarmBlockThreshold还提供了其他选项,如BLOCK_LOW_AND_ABOVE、BLOCK_MEDIUM_AND_ABOVE、BLOCK_HIGH_AND_ABOVE。你可以根据你的应用场景和内容敏感度,为不同类别选择最合适的阈值。
  3. 错误处理: 即使配置了BLOCK_NONE,在极少数情况下,如果提示内容极其恶劣或违反了更深层次的服务条款,API仍可能抛出异常。因此,在调用API时,始终建议包含适当的错误处理机制(如try-except块)。
  4. API版本: 本教程中的导入路径和类名是基于vertexai.preview和google.cloud.aiplatform_v1beta1。请确保你的环境安装了相应版本的SDK,并根据官方文档检查是否有更新或不同的导入路径。

总结

正确配置Gemini Pro API的safety_settings是确保模型按预期行为的关键。通过理解API期望的SafetySetting对象列表结构,并正确导入和使用HarmCategory和HarmBlockThreshold,开发者可以有效地管理内容过滤,避免因不当配置而导致的BlockedPromptException。然而,在调整这些设置时,务必权衡灵活性与内容安全性之间的关系,以确保负责任地使用AI技术。

相关专题

更多
硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

994

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

53

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

238

2025.12.29

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

138

2025.12.31

php网站源码教程大全
php网站源码教程大全

本专题整合了php网站源码相关教程,阅读专题下面的文章了解更多详细内容。

80

2025.12.31

视频文件格式
视频文件格式

本专题整合了视频文件格式相关内容,阅读专题下面的文章了解更多详细内容。

82

2025.12.31

不受国内限制的浏览器大全
不受国内限制的浏览器大全

想找真正自由、无限制的上网体验?本合集精选2025年最开放、隐私强、访问无阻的浏览器App,涵盖Tor、Brave、Via、X浏览器、Mullvad等高自由度工具。支持自定义搜索引擎、广告拦截、隐身模式及全球网站无障碍访问,部分更具备防追踪、去谷歌化、双内核切换等高级功能。无论日常浏览、隐私保护还是突破地域限制,总有一款适合你!

61

2025.12.31

出现404解决方法大全
出现404解决方法大全

本专题整合了404错误解决方法大全,阅读专题下面的文章了解更多详细内容。

458

2025.12.31

html5怎么播放视频
html5怎么播放视频

想让网页流畅播放视频?本合集详解HTML5视频播放核心方法!涵盖<video>标签基础用法、多格式兼容(MP4/WebM/OGV)、自定义播放控件、响应式适配及常见浏览器兼容问题解决方案。无需插件,纯前端实现高清视频嵌入,助你快速打造现代化网页视频体验。

16

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go 教程
Go 教程

共32课时 | 3.2万人学习

Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号