在这个笔记本中,我们将使用新的功能定义和用户确认功能为Amazon Bedrock创建一个代理。
我们将以HR代理为例。使用这个代理,我们可以查看我们可用的假期天数并申请新的假期休假。我们将使用AWS Lambda函数来定义检查可用假期天数和确认新的休假时间的逻辑。
对于这个示例,我们将在一个SQLite 数据库中管理员工数据并生成合成数据来演示代理。
在开始之前,让我们更新botocore和boto3软件包以确保我们有最新版本。
我们现在可以创建所需的AWS服务的boto3客户端。
接下来,我们可以设置代理和要创建的lambda函数的一些配置变量。
我们现在将创建一个与SQLite文件employee_database.db
交互的lambda函数。为此,我们将:
employee_database.db
文件,并生成一些数据。lambda_function.py
文件。接下来,让我们创建我们的lambda函数。它实现了get_available_vacations_days
功能,用于获取给定employee_id的可用假期天数,以及book_vacations
功能,用于为员工预订假期。
我们现在将创建代理。为此,我们首先需要创建允许特定基础模型的Bedrock模型调用的代理策略,以及与该策略关联的代理IAM角色。
一旦创建了所需的IAM角色,我们就可以使用Bedrock Agent客户端创建一个新的代理。请注意,创建的代理尚未准备好。稍后,我们将准备并使用该代理。
让我们现在将代理ID存储在一个本地变量中,以便在后续步骤中使用它。
我们现在将创建一个代理操作组。为了告知代理操作组功能,我们将提供一个包含操作组功能的操作组描述。
在这个例子中,我们将使用一个功能模式来定义功能。当使用功能模式定义功能时,我们必须为每个功能指定名称、描述、参数和requireConfirmation
属性。requireConfirmation
属性指示是否需要用户确认才能执行该功能。
在这种情况下,我们将只为reserve_vacation_time
启用用户确认。
在使用操作组之前,我们需要允许代理调用与操作组关联的lambda函数。这是通过基于资源的策略完成的。让我们为创建的lambda函数添加资源基础策略。
让我们创建代理的DRAFT版本,以供内部测试使用。
现在我们已经创建了代理,让我们使用bedrock-agent-runtime
客户端来调用这个代理并执行一些任务。
请注意,当我们没有为此方法设置'requireConfirmation':'ENABLED'
设置时,流的返回已经是块。
现在我们将再次调用代理,但这次请求预订一天假期。
与第一个示例不同,返回了一个returnControl
事件,其中actionInvocationType
为USER_CONFIRMATION
。
最后,我们需要调用代理,将函数结果作为参数传递。这让我们可以使用代理生成最终响应。请注意,如果为该函数或API启用了用户确认,则用户将被提示在confirmationState
字段中CONFIRM
或DENY
指定的操作。对于这个示例,我们将使用confirmationState
作为CONFIRM
,这意味着用户已确认该操作,允许它被执行。
如前一个示例所示,我们将调用相同的invoke_agent
方法,但这次我们将传递DENY
选项,这意味着用户没有允许执行。
在发送DENY
选项到confirmationState
后,我们应该收到以下消息:
I'm sorry, I do not have the authorization to reserve vacation time for employees. As an HR assistant, I can only view available vacation days, not make reservations.
下一步是可选的,演示如何删除我们的代理。要删除代理,我们需要: