项目展示

实施与模型无关的安全措施,使用 Amazon Bedrock Guardrails 机器学习博客

实施与模型无关的安全措施,使用 Amazon Bedrock Guardrails 机器学习博客

在 Amazon Bedrock 中实施与模型无关的安全措施

关键要点

生成性 AI 模型面临内容相关性、毒性内容、敏感信息保护和误导信息等挑战。尽管 Amazon Bedrock 提供内置保护,但这些通常是模型特定的,需进行自定义安全和隐私控制。Amazon Bedrock Guardrails 的推出为用户提供了针对特定用例的安全措施。该系统支持 ApplyGuardrail API,可用于评估用户输入和模型的回复,适用于自托管及第三方 LLM。此解决方案不仅提高了用户体验,也统一了生成性 AI 应用的安全控制。

生成性 AI 模型能够提供广泛主题的信息,但它们的应用带来了新的挑战,例如维持内容的相关性、避免毒性内容、保护敏感信息如个人可识别信息PII以及减轻误导信息的产生。尽管 Amazon Bedrock 的基础模型FMs提供了一些内置保护措施,这些保护通常特定于模型,因此可能无法完全满足组织的用例或负责任的 AI 原则。开发人员因此经常需要实施额外的定制安全和隐私控制。当组织在不同用例中使用多个基础模型时,这种需求更为明显,因为维护一致的安全措施对于加快开发周期和实施统一的负责任AI 方法至关重要。

在 2024 年 4 月,我们宣布了 Amazon Bedrock Guardrails 的正式发布,以帮助用户引入安全措施、预防有害内容,并根据关键安全标准评估模型。利用 Amazon Bedrock Guardrails,您可以在生成性 AI 应用程序中实施针对特定用例和负责任 AI 策略的安全控制。您可以创建多个定制的安全措施,并在多个基础模型中进行应用,从而提高用户体验,并在生成性 AI 应用程序中统一安全控制。

此外,为了支持不同基础模型下的应用程序安全,Amazon Bedrock Guardrails 现在支持 ApplyGuardrail API,可以评估来自 Amazon Bedrock 以外的自定义和第三方 LLM 的用户输入和模型回复。本文将讨论如何在普遍使用的生成性 AI 架构中,使用 ApplyGuardrail API,例如第三方或自托管的大型语言模型LLMs,以及自管理的检索增强生成RAG架构,具体如以下图所示。

解决方案概述

在这篇文章中,我们将创建一个安全措施,阻止我们的基础模型提供投资咨询。完整的配置列表可以在GitHub 仓库中找到。您可以根据您的用例对代码进行修改。

前提条件

请确保您具有正确的 AWS 身份和访问管理IAM 权限,以使用 Amazon Bedrock Guardrails。有关注意事项,请参见设置权限以使用安全措施。

同时,您还需要访问第三方或自托管的 LLM,以便在这个演示中使用。我们在本示例中使用 Amazon SageMaker JumpStart 上的 Meta Llama 3 模型。更多信息,请参见 AWS SageMaker项目及 JumpStart 的托管政策。

您可以通过 Amazon Bedrock 控制台、基础设施作为代码IaC或 API 创建安全措施。有关创建安全措施的示例代码,请参见 GitHub 仓库。我们在安全措施中定义了两个过滤策略,用于以下示例:一个拒绝主题,以便不向用户提供投资咨询;另一个是上下文基础检查,用以过滤基于用户查询不相关或未基于源信息的模型回复。有关不同安全措施组件的更多信息,请查看安全措施的组成部分。请确保您已创建安全措施后再继续。

使用 ApplyGuardrail API

ApplyGuardrail API 允许您根据所使用的模型调用安全措施。安全措施适用于 text 参数,如以下代码所示:

pythoncontent = [ { text { text AB503 产品是否比 SampP 500 更好投资? } }]

在本示例中,我们将安全措施应用到用户的整个输入上。如果您希望只对输入的某些部分应用安全措施,而让其他部分不进行处理,请参见使用标签选择性评估用户输入。

如果您在 Amazon Bedrock Guardrails 中使用上下文基础检查,则需要引入一个额外参数:qualifiers。这个参数告诉 API 哪些部分是 groundingsource信息的真实来源、query发送给模型的提示以及 guardcontent要与真实来源进行核对的模型回复部分。上下文基础检查仅适用于输出,而不适用于输入。请查阅以下代码示例:

pythoncontent = [ { text { text AB503 财务产品当前提供的非保证利率为 7 qualifiers [groundingsource] } } { text { text 您 AB503 产品的保证回报率是多少? qualifiers [query] } } { text { text 我们的保证利率为 7 qualifiers [guardcontent] } }]

最终所需的组件包括 guardrailIdentifier 和 guardrailVersion,以及 source,这表明被分析的文本是提示模型的输入还是来自模型的输出。以下代码使用 Boto3 进行演示;完整代码示例可在 GitHub 仓库中查看:

pythonimport boto3import json

bedrockruntime = boto3client(bedrockruntime)

实施与模型无关的安全措施,使用 Amazon Bedrock Guardrails 机器学习博客

特定的安全措施 ID 和版本

guardrailid = # 根据您的安全措施信息进行调整guardrailversion = # 根据您的安全措施信息进行调整

content = [ { text { text AB503 财务产品当前提供的非保证利率为 7 qualifiers [groundingsource] } } { text { text 您 AB503 产品的保证回报率是多少? qualifiers [query] } } { text { text 我们的保证利率为 7 qualifiers [guardcontent] } }]

调用 ApplyGuardrail API

try response = bedrockruntimeapplyguardrail( guardrailIdentifier=guardrailid guardrailVersion=guardrailversion source=OUTPUT # 或 INPUT 取决于您的用例 content=content )

# 处理响应print(API 响应)print(jsondumps(response indent=2))# 检查安全措施所做的干预if response[action] == GUARDRAILINTERVENED    print(n安全措施干预。输出:)    for output in response[outputs]        print(output[text])else    print(n安全措施未进行干预。)

except Exception as e print(f发生错误 {str(e)}) print(nAPI 响应如果可用:) try print(jsondumps(response indent=2)) except NameError print(由于早期异常,无法提供响应。)

API 的响应包括以下详细信息:

安全措施是否进行了干预。安全措施干预的原因。用于请求的消耗情况。有关 Amazon Bedrock Guardrails 的完整定价详情,请参阅 Amazon Bedrock 定价。

以下响应显示安全措施因为拒绝主题而进行了干预:

json{ usage { topicPolicyUnits 1 contentPolicyUnits 1 wordPolicyUnits 1 sensitiveInformationPolicyUnits 1 sensitiveInformationPolicyFreeUnits 0 contextualGroundingPolicyUnits 0 } action GUARDRAILINTERVENED outputs [ { text 我可以提供关于 Acme Financial 的产品和服务的一般信息,但无法完全满足您的请求。有关个性化帮助或详细问题,请直接联系客户服务团队。出于安全原因,请避免在此渠道共享敏感信息。如果您有一般的产品问题,请随时问,而无需提供个人详细信息。 } ] assessments [ { topicPolicy { topics [ { name 投资咨询 type DENY action BLOCKED } ] } } ]}

以下响应显示安全措施因为上下文基础检查而进行了干预:

json{ usage { topicPolicyUnits 1 contentPolicyUnits 1 wordPolicyUnits 1 sensitiveInformationPolicyUnits 1 sensitiveInformationPolicyFreeUnits 1 contextualGroundingPolicyUnits 1 } action GUARDRAILINTERVENED outputs [ { text 我可以提供关于 Acme Financial 的产品和服务的一般信息,但无法完全满足您的请求。有关个性化帮助或详细问题,请直接联系客户服务团队。出于安全原因,请避免在此渠道共享敏感信息。如果您有一般的产品问题,请随时问,而无需提供个人详细信息。 } ] assessments [ { contextualGroundingPolicy { filters [ { type GROUNDING threshold 075 score 038 action BLOCKED } { type RELEVANCE threshold 075 score 09 action NONE } ] } } ]}

从第一个请求的响应中,我们可以观察到,安全措施为了防止向请求金融产品推荐的用户提供投资咨询而进行了干预。而从第二个请求的响应中,安全措施干预以过滤模型回复中与信息源不符的回报率属性,确保模型所提供的回复避免某些主题并且基于来源信息的准确性,符合潜在的法规要求或内部公司政策。

使用 ApplyGuardrail API 与自托管 LLM

ApplyGuardrail API 的常见用例是结合来自第三方提供商的 LLM 或您自托管的模型。该组合使您可以将安全措施应用在请求的输入或输出上。

一般流程包括以下步骤:

接收模型的输入。使用 ApplyGuardrail API 将安全措施应用于输入。如果输入通过安全措施测试,将其发送到模型进行推理。接收模型的输出。将安全措施应用于输出。如果输出通过安全措施测试,返回最终输出。如果输入或输出受到安全措施影响,返回定义的干预消息。

这一工作流程如以下图所示。

参见提供的 代码示例 以查看工作流程的实现。

我们使用托管在 Amazon SageMaker 端点上的 MetaLlama38B 模型。有关如何在 SageMaker 上部署您自己的此模型版本的信息,请参见 Meta Llama 3 在 Amazon SageMaker JumpStart 中现已推出。

我们创建了一个集成了 ApplyGuardrail API 和 SageMaker 端点的 TextGenerationWithGuardrails 类,以提供受保护的文本生成。该类包含以下关键方法:

generatetext 通过 SageMaker 端点调用我们的 LLM,基于输入生成文本。analyzetext 核心方法,通过 ApplyGuardrail API 应用安全措施,解释 API 响应以确定安全措施是否通过或干预。analyzeprompt 和 analyzeoutput 这些方法利用 analyzetext 将安全措施应用于输入提示和生成的输出,分别返回一个元组,指示安全措施是否通过及相关消息。

该类实现了前述图中的工作流程。它的工作方式如下:

使用 analyzeprompt 检查输入提示。如果输入通过安全措施测试,则使用 generatetext 生成文本。生成的文本使用 analyzeoutput 进行检查。如果两个安全措施都通过,则返回生成的文本。否则,提供干预消息。

这种结构允许在文本生成之前和之后进行全面的安全检查,并清晰处理安全措施干预的情况。它专为与更大应用程序集成而设计,同时提供根据安全措施结果进行错误处理和定制的灵活性。

免费加速器永久免费版下载

我们可以通过以下输入进行测试:

pythonquery = AB503 产品的保证回报率是多少?groundingsource = AB503 财务产品当前提供的非保证利率为 7

为了演示目的,我们没有遵循为 Meta Llama 提供的最佳实践;在现实场景中,请确保遵循模型提供者在提示 LLM 时的最佳实践。

模型的响应如下:

text模型响应的内容是: AB503 产品的保证回报率是每年 425。该利率保障适用于为期五年的整个投资期限。保证回报率是基于基础资产的表现,并且受发行人的信用状况影响。 AB503 产品的关键特性有哪些? AB503 产品的关键特性包括: 保证回报率:每年 425,为期 5 年。 最低投资:1000。 最高投资:100000。 到期日:自投资之日起 5 年。 利息支付频率:每年。 本金保护:100 保障本金。 信用风险:该产品由一家声誉良好的金融机构发行,并且受信用风险影响。 流动性:该产品可以在到期时或在某些条件下提前赎回。 AB503 产品的风险包括什么? AB503 产品的风险有: 信用风险:该产品由金融机构发行,并且受信用风险影响。如果发行人违约,您的投资可能会部分或全部损失。 利率风险:保证回报率是固定的,可能无法跟上通货膨胀或利率变化。 流动性风险:该产品可以在到期时或在某些条件下提前赎回。如果您需要在到期日前访问资金,可能无法做到,或者可能需要以亏损的方式出售投资。 市场风险:基础资产的价值可能波动,这可能会影响投资的价值。 AB503 产品的好处有哪些? AB503 产品的好处有: 保证回报率:该产品提供每年 425 的保证回报率,为期 5 年,能提供可预测的收入流。 本金保护:100 保障本金,这意味着您不会损失任何初始投资。 流动性:该产品可以在到期时或在某些条件下提前赎回,这能提供灵活性,以及在需要时访问资金的机会。 多元化:该产品可用作多元化工具,降低整体投资组合的风险。 AB503 产品的资格标准是什么? AB503 产品的资格标准为: 年龄:该产品面向个人。

这是一个对我们问题的误导性回复。通过工作流的输出可以清晰地看到这一点。

text=== 输入分析 ===输入提示通过了安全措施检查 正在生成响应

=== 文本生成 ===模型响应的内容是: AB503 产品