标题: “实验 8 - 为 Amazon Bedrock 集成创建带有防护栏的代理” 权重: 80
在这个实验中,我们提供了一个使用 Amazon Bedrock 和操作组创建代理的示例。该代理将使用 Amazon Bedrock 知识库 ,并且我们将使用 Amazon Bedrock 防护栏 为其提供防护栏。该代理将能够通过采取一系列操作来响应用户查询,咨询知识库以获取更多信息,和/或使用与操作组连接的 Lambda 函数执行任务。对于每个交互,Amazon Bedrock 的防护栏都会为应用程序提供额外的安全层,验证用户输入和代理输出是否符合防护栏中定义的主题拒绝,并阻止必要的请求。
在这个示例中,我们将创建一个银行助理代理,允许用户:
这个助理不会向用户提供投资建议,为了更好地验证这一要求,我们在应用程序中添加了一个拒绝投资建议主题的防护栏。
CustomerSupportActionGroup 操作组提供了账户余额查询和预约预订的功能,而 Amazon Bedrock 知识库则将常见问题的文档索引到 OpenSearch Serverless 矢量数据库中。
对于这个用例,我们将使用一个假设的场景,即意外地将一些投资建议数据添加到了知识库索引的常见问题文档中。
由于我们的代理不应该提供任何投资建议,因此定义了一个防护栏来阻止投资建议主题。它的定义如下:
response = bedrock_client.create_guardrail(
name='BankingAssistantGuardrail',
description='为在线银行助理定义的防护栏,以帮助用户解决银行和账户相关的问题',
topicPolicyConfig={
'topicsConfig': [
{
'name': '投资建议',
'definition': '投资建议是指向个人或实体提供的专业指导或建议,涉及到他们金融资产的管理和分配。',
'examples': [
'我应该买黄金吗?',
'投资股票比投资债券好吗?',
'什么时候投资黄金是个好主意?',
],
'type': 'DENY'
},
]
},
blockedInputMessaging='对不起,我们的查询违反了我们的使用政策。我们不提供投资建议。如需讨论我们当前情况下最佳的投资建议,请致电(XXX) XXX-XXXX与我们联系,我们将很乐意为我们提供支持。',
blockedOutputsMessaging='对不起,我无法回复。请致电(XXX) XXX-XXXX与我们联系,我们将很乐意为我们提供支持。',
)
我们可以使用 agent.py 中的以下函数来关联防护栏:
agents.update_agent( agent_name=agent_name, guardrail_id=response['guardrailId'])
代理架构如下所示:
在这个示例中创建的操作组使用函数详细信息来定义检查余额和预约预订的功能。操作组执行连接到一个 Lambda 函数。该代理没有实现任何真正的功能,用于检查余额和预约预订的函数只返回硬编码的值。对于实际应用程序,我们应该实现 check_balance 和 book_appointment 函数以连接到可用的数据库。
如果我们是通过 workshop studio 参加的研讨会,现在请转到 SageMaker Studio 中的 JupyterLab。
在 JupyterLab UI 中导航到 bedrock-agents-workshop/08-create-agent-with-guardrails/08-create-agent-with-guardrails.ipynb
这里有一个笔记本,让我们可以尝试上述内容: 创建带有防护栏的代理 。