亚马逊AWS官方博客
Amazon Bedrock 防护机制现在可以检测幻觉并保护使用自定义或第三方 FM 构建的应用程序
Amazon Bedrock 防护机制使客户能够根据应用程序要求和贵公司负责任的人工智能(AI)政策实施防护机制。它可以帮助防止不良内容,阻止提示攻击(提示注入和越狱),并删除敏感信息以保护隐私。您可以组合多种策略类型,为不同的场景配置这些防护机制,并将这些防护机制应用于 Amazon Bedrock 上的基础模型(FM)以及 Amazon Bedrock 之外的自定义和第三方 FM。防护机制还可以与 Amazon Bedrock 代理和 Amazon Bedrock 知识库集成。
Amazon Bedrock 防护机制在 FM 提供的原生保护的基础上还提供额外的可定制防护措施,从而提供业内最好的安全特性:
- 可阻止超过 85% 的有害内容
- 允许客户在单一解决方案中自定义和应用安全、隐私和真实性保护
- 过滤掉 RAG 和摘要工作负载中超过 75% 的幻觉响应
Amazon Bedrock 防护机制 在 re:Invent 2023 上首次以预览形式发布,支持内容筛选和拒绝主题等政策。在 2024 年 4 月正式发布时,防护机制支持四种防护措施:被拒绝的主题、内容过滤器、敏感信息过滤器和文字过滤器。
MAPFRE 是西班牙最大的保险公司,在全球 40 个国家开展了业务。MAPFRE 架构副总监 Andres Hevia Vega 表示:“MAPFRE 实施了 Amazon Bedrock 防护机制来确保 Mark.ia(基于 RAG 的聊天机器人)符合我们的企业安全政策和负责任的人工智能实践。” “MAPFRE 使用 Amazon Bedrock 防护机制对有害内容进行内容过滤,拒绝未经授权的话题,标准化企业安全政策,以及对个人数据进行匿名化以保持最高级别的隐私保护。防护机制帮助我们最大限度地减少了架构错误,并简化了 API 选择流程以标准化我们的安全协议。随着我们不断发展人工智能战略,Amazon Bedrock 及其防护机制功能被证明是我们实现更高效、更创新、更安全和更负责任的开发实践的宝贵工具。”
今天,我们将宣布另外两项功能:
- 上下文基准检查,用于根据参考源和用户查询来检测模型响应中的幻觉。
ApplyGuardRail
API,用于评估所有 FM(包括 Amazon Bedrock 上的 FM、自定义和第三方 FM)的输入提示和模型响应,从而对所有生成式人工智能应用程序进行集中管控。
上下文基准检查 – 一种检测幻觉的新策略类型
客户通常依赖于 FM 的固有能力来根据公司的源数据生成有根据的(可信的)响应。但是,FM 可以将多条信息合并,从而产生不正确的信息或新的信息,这样会影响应用程序的可靠性。上下文基准检查是新的防护措施,也是第五种防护措施,它支持在不基于企业数据或与用户查询无关的模型响应中进行幻觉检测。这可用于提高 RAG、汇总或信息提取等用例中的响应质量。例如,您可以将上下文基准检查与 Amazon Bedrock 知识库配合使用,以通过筛选不基于企业数据的不准确响应来部署值得信赖的 RAG 应用程序。上下文基准检查策略将使用从企业数据来源检索到的结果作为参考源来验证模型响应。
上下文基准检查有两个过滤参数:
- 基准 – 这可以通过提供基准阈值来实现,该阈值表示作为模型响应基准的最低置信度分数。也就是说,根据参考源中提供的信息,它在事实上是正确的,并且不包含参考源以外的新信息。分数低于定义阈值的模型响应将被阻止,并返回已配置的阻止消息。
- 相关性 – 此参数基于相关性阈值起作用,该阈值表示模型响应与用户查询相关的最低置信度分数。分数低于定义阈值的模型响应将被阻止,并返回已配置的阻止消息。
基准和相关性分数的阈值越高,将导致越多的响应被阻止。请务必根据特定用例的准确性容忍度对分数进行调整。例如,金融领域中面向客户的应用程序可能需要较高的阈值,因为它们对不准确内容的容忍度较低。
上下文基准检查正在进行中
让我举几个例子来演示上下文基准检查。
我导航到 Amazon Bedrock 的 AWS 管理控制台。在导航窗格中,我选择了“防护机制”,然后选择“创建防护机制”。我配置了防护机制并启用上下文基准检查策略,然后指定了基准和相关性的阈值。
要测试该政策,我导航到“防护机制概述”页面,然后使用“测试”部分选择模型。这使我能够轻松地试验各种源信息和提示的组合,以验证模型响应的上下文基准和相关性。
在我的测试中,我使用以下内容(关于银行手续费)作为来源:
• 开立支票账户不收取任何费用。
• 维护支票账户的月费为 10 美元。
• 国际转账收取 1% 的交易费。
• 国内转账不收取任何费用。
• 与信用卡账单的延迟付款相关的费用为 23.99%。
然后,我在“提示”字段中输入问题,开头是:
“与支票账户相关的费用是多少?”
我选择“运行”来执行操作,选择“查看跟踪”来访问详细信息:
模型响应在事实上是正确和相关的。基准分数和相关性分数均高于其配置的阈值,因此可以将模型响应发送回用户。
接下来,我尝试另一个提示:
“与信用卡相关的交易费用是多少?”
源数据仅提及信用卡的逾期付款费用,但没有提及与信用卡相关的交易费用。因此,模型响应是相关的(与交易费用有关),但在事实上是不正确的。这将得到较低的基准分数,由于分数低于配置的阈值 0.85
,因此响应被阻止。
最后,我尝试了以下提示:
“使用支票银行账户的交易费用是多少?”
在这个例子中,模型响应是有根据的,因为该源数据提到了支票银行账户的月费。但是,它是不相关的,因为查询是关于交易费用的,而响应与月费有关。这将得到较低的相关性分数,由于分数低于配置的阈值 0.5
,因此响应被阻止。
以下示例描述了如何使用适用于 Python 的 Amazon SDK (Boto3),通过 CreateGuardRail
API 配置上下文基准:
bedrockClient.create_guardrail(
name='demo_guardrail',
description='Demo guardrail',
contextualGroundingPolicyConfig={
"filtersConfig": [
{
"type": "GROUNDING",
"threshold": 0.85,
},
{
"type": "RELEVANCE",
"threshold": 0.5,
}
]
},
)
创建包含上下文基准检查的防护机制后,可将其与 Amazon Bedrock 知识库、Amazon Bedrock 代理关联,或在模型推断过程中进行引用。
但不止如此!
ApplyGuardRail – 使用 Amazon Bedrock 之外的 FM 保护应用程序
到目前为止,Amazon Bedrock 防护机制主要用于评估 Amazon Bedrock 中提供的 FM 的输入提示和模型响应,并仅在模型推断期间使用。
Amazon Bedrock 防护机制现在支持新的 ApplyGuardRail
API,用于针对已配置的防护措施评估所有用户输入和模型响应。此功能使您能够对使用任何自管理(自定义)或第三方 FM 构建的所有生成式人工智能应用程序应用标准化、一致的防护措施,而不考虑底层基础设施如何。实质上,您现在可以使用 Amazon Bedrock 防护机制对以下对象的输入提示和模型响应应用一组相同的防护措施,这些对象包括:Amazon Bedrock 中提供的 FM、其他服务(例如 Amazon SageMaker)中提供的 FM、基础架构 [例如 Amazon Elastic Compute Cloud (Amazon EC2)] 上的 FM、本地部署上的 FM,以及 Amazon Bedrock 之外的其他第三方 FM。
此外,您还可以使用 ApplyGuardRail
API 在生成式人工智能应用程序的不同阶段独立评估用户输入和模型响应,从而提高应用程序开发的灵活性。例如,在 RAG 应用程序中,可在对知识库执行搜索之前使用防护机制来评估和过滤有害的用户输入。随后,您可以在完成 FM 的检索(搜索)和生成步骤后单独评估输出。
让我向你展示如何在应用程序中使用 ApplyGuardRail
API。在以下示例中,我使用了适用于 Python 的 Amazon SDK (Boto3)。
我首先创建了一个新的防护机制(使用 create_guardrail
函数)以及一组被拒绝的话题,然后创建了一个新版本(使用 create_guardrail_version
函数):
import boto3
bedrockRuntimeClient = boto3.client('bedrock-runtime', region_name="us-east-1")
bedrockClient = boto3.client('bedrock', region_name="us-east-1")
guardrail_name = 'fiduciary-advice'
def create_guardrail():
create_response = bedrockClient.create_guardrail(
name=guardrail_name,
description='防止模型提供信托建议。',
topicPolicyConfig={
'topicsConfig': [
{
'name': '信托建议',
'definition': '提供有关以信托身份管理金融资产的个性化建议或推荐。',
'examples': [
'我应该投资哪些股票来为退休做准备?',
'把我的钱存入共同基金是个好主意吗?',
'我应该如何分配我的 401(k) 投资?',
'我应该为我的孩子设立什么类型的信托基金?',
'我应该聘请财务顾问来管理我的投资吗?'
],
'type': 'DENY'
}
]
},
blockedInputMessaging='我很抱歉,但我无法提供有关以信托身份管理金融资产的个性化建议或推荐。',
blockedOutputsMessaging='我很抱歉,但我无法提供有关以信托身份管理金融资产的个性化建议或推荐。',
)
version_response = bedrockClient.create_guardrail_version(
guardrailIdentifier=create_response['guardrailId'],
description='阻止信托建议的防护机制版本'
)
return create_response['guardrailId'], version_response['version']
创建防护机制后,我调用了 apply_guardrail
函数,其中包含需要评估的文本以及我刚刚创建的防护机制的 ID 和版本:
def apply(guardrail_id, guardrail_version):
response = bedrockRuntimeClient.apply_guardrail(guardrailIdentifier=guardrail_id,guardrailVersion=guardrail_version, source='INPUT', content=[{"text": {"inputText": "我应该如何为退休进行投资? 我希望能够每月创收 5000 美元"}}])
print(response["output"][0]["text"])
我使用了以下提示:
我应该如何为退休进行投资? 我希望能够每月创收 5000 美元
多亏了防护机制,消息被阻止了,并返回了预先配置的响应:
我很抱歉,但我无法提供有关以信托身份管理金融资产的个性化建议或推荐。
在此示例中,我将源设置为 INPUT
,这意味着要评估的内容来自用户(通常是 LLM 提示)。要评估模型输出,应将源
设置为 OUTPUT
。
现已推出
上下文基准检查和 ApplyGuardRail
API 现已在提供 Amazon Bedrock 防护机制的所有 AWS 区域中推出。在 Amazon Bedrock 控制台中试用它们,并将反馈发送至 AWS re:Post for Amazon Bedrock 或通过您常用的 AWS Support 联系方式发送。
要了解有关防护机制的更多信息,请访问 Amazon Bedrock 防护机制产品页面和 Amazon Bedrock 定价页面,了解与防护机制策略相关的费用。
请不要忘了访问 community.aws 网站,查找关于解决方案的深入技术内容,并了解我们的构建者社区如何在其解决方案中使用 Amazon Bedrock。
— Abhishek
*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您了解行业前沿技术和发展海外业务选择推介该服务。