创建和配置 Amazon Bedrock 代理

发布时间:2024 年 5 月 6 日
机器学习
生成式 AI
视频
教程
亚马逊云科技
Olawale Olaleye
亚马逊云科技使用经验
100 - 初级
完成所需时间
10 分钟
上次更新时间
2024 年 5 月 6 日
相关产品

借助 Amazon Bedrock 代理,应用程序可以使用 生成式人工智能(generative AI)跨多个系统和数据来源运行任务。从今天开始,这些新功能简化了代理的创建和管理:

快速创建代理 — 您现在可以快速创建代理,并可以选择稍后添加指令和操作组,从而为您的开发过程提供灵活性和敏捷性。

代理构建器 — 所有代理配置都可以在控制台的新代理构建器部分中操作。

简化配置 — 操作组可以使用简化的架构,仅列出函数和参数,而无需提供 API 架构。

交回控制权 — 您可以跳过使用 AWS Lambda 函数,将控制权交回给调用代理的应用程序。通过这种方式,应用程序可以直接与 AWS 外部的系统集成,或调用在任何 Amazon Virtual Private Cloud(Amazon VPC)中托管的内部端点,而无需将所需的网络和安全配置与 Lambda 函数集成。

基础设施即代码 — 您可以使用 AWS CloudFormation 通过新的简化配置来部署和管理代理,从而确保生成式人工智能应用程序在不同环境的一致性和可重复性。

接下来看看这些增强功能的实际应用。

视频教程

文档教程

使用新的简化控制台创建代理

为了测试新体验,想构建一个代理来帮助回复包含客户反馈的电子邮件。可以使用生成式人工智能,但单次调用 基础模型 (FM) 还不够,因为需要与其他系统交互。为此,使用了代理。

在 Amazon Bedrock 控制台 中,从导航窗格中选择代理,然后选择创建代理。输入代理的名称 (customer-feedback) 和描述。使用新界面,可以继续创建代理,而无需在此阶段提供其他信息。

现在看到了代理构建器,在这里可以访问和编辑代理的整体配置。在代理资源角色中,将默认设置保留为创建并使用新服务角色,以便自动创建代理所承担的 AWS Identity and Access Management (IAM) 角色。对于模型,选择 Anthropic 和 Claude 3 Sonnet。

代理说明中,作为代理必须执行的任务提供了清晰且具体的说明。在这里,可以指定代理回复时使用的风格和语气。对于用例,输入:

Help reply to customer feedback emails with a solution tailored to the customer account settings.

其他设置中,用户输入选择启用,这样,代理就可以在没有足够的信息做出响应时要求提供其他详细信息。然后,选择保存来更新代理的配置。

现在在操作组部分选择添加。操作组是代理与外部系统交互以收集更多信息或执行操作的方式。输入操作组的名称(retrieve-customer-settings)和描述:

检索客户设置,包括客户 ID。

描述是可选的,但如果提供,则会传递到模型以帮助选择何时使用此操作组。

操作组类型中,选择使用函数详细信息定义,这样,只需要指定函数及其参数即可。此处的另一个选项(使用 API 架构定义)对应于先前使用 API 架构配置操作组的方式。

操作组函数可以与 Lambda 函数调用关联,也可以配置为将控制权交回给调用代理的用户或应用程序,以便向函数提供响应。交回控制权的选项对于四个主要用例很有用:

  • 当从现有应用程序(例如,调用代理的应用程序)调用 API 比使用 API 所需的正确身份验证和网络配置构建新的 Lambda 函数更容易时
  • 当任务的持续时间超过最大 Lambda 函数超时时间(15 分钟)时,这样就可以使用在容器或虚拟服务器中运行的应用程序或使用工作流程编排(例如 AWS Step Functions)来处理该任务
  • 当执行耗时的操作时,因为交回控制权后,代理无需等待操作完成即可继续执行下一步,调用应用程序可以在代理的编排流程继续的同时在后台异步执行操作
  • 当需要一种快速的方法来模拟开发和测试期间与 API 的交互以及代理的交互时

操作组调用中,可以指定在编排期间模型识别到该操作组时将调用的 Lambda 函数。可以要求控制台快速创建新的 Lambda 函数,选择现有的 Lambda 函数,或者交回控制权,这样调用代理的用户或应用程序就会要求提供详细信息以生成响应。选择交回控制权以显示它在控制台中的工作原理。

配置操作组的第一个函数。为该函数输入了名称(retrieve-customer-settings-from-crm)和以下描述:

使用电子邮件发件人字段中的客户电子邮件从 CRM 检索客户设置,包括客户 ID。

参数中,为电子邮件添加了客户电子邮件作为描述。这是字符串类型的参数,也是此函数所必需的参数。选择添加来完成操作组的创建。

因为对于用例,预计很多客户在登录时会遇到问题,所以添加另一个操作组(名为 check-login-status),其描述如下:

Check customer login status.

这次,选择创建新的 Lambda 函数的选项,以便可以在代码中处理这些请求。

对于此操作组,配置了一个函数(名为 check-customer-login-status-in-login-system),其描述如下:

Check customer login status in login system using the customer ID from settings.

参数中,添加了 customer_id,这是另一个字符串类型的必需参数。然后,选择添加以完成第二个操作组的创建。

当打开此操作组的配置时,会看到账户中创建的 Lambda 函数的名称。在那里,选择查看以在控制台中打开 Lambda 函数。

在 Lambda 控制台中,编辑已提供的起始代码并实施业务案例:

import json

def lambda_handler(event, context):
    print(event)
    
    agent = event['agent']
    actionGroup = event['actionGroup']
    function = event['function']
    parameters = event.get('parameters', [])

    # Execute your business logic here.For more information,
    # refer to: https://docs.aws.amazon.com/bedrock/latest/userguide/agents-lambda.html
    if actionGroup == 'check-login-status' and function == 'check-customer-login-status-in-login-system':
        response = {
            "status": "unknown"
        }
        for p in parameters:
            if p['name'] == 'customer_id' and p['type'] == 'string' and p['value'] == '12345':
                response = {
                    "status": "not verified",
                    "reason": "the email address has not been verified",
                    "solution": "please verify your email address"
                }
    else:
        response = {
            "error": "Unknown action group {} or function {}".format(actionGroup, function)
        }
    
    responseBody =  {
        "TEXT": {
            "body": json.dumps(response)
        }
    }

    action_response = {
        'actionGroup': actionGroup,
        'function': function,
        'functionResponse': {
            'responseBody': responseBody
        }

    }

    dummy_function_response = {'response': action_response, 'messageVersion': event['messageVersion']}
    print("Response: {}".format(dummy_function_response))

    return dummy_function_response

选择 Lambda 控制台中的部署。该函数配置了基于资源的策略,允许 Amazon Bedrock 调用该函数。因此,不需要更新代理使用的 IAM 角色。

已经准备好测试代理。返回 Amazon Bedrock 控制台,选择代理后,查找测试代理部分。在那里,选择准备来准备代理并使用最新的更改对其进行测试。

作为对代理的输入,提供了以下示例电子邮件:

From: danilop@example.com

Subject: Problems logging in

Hi, when I try to log into my account, I get an error and cannot proceed further.Can you check? Thank you, Danilo

在第一步中,代理编排决定使用第一个操作组(retrieve-customer-settings)和函数(retrieve-customer-settings-from-crm)。该函数配置为交回控制权,并且在控制台中,要求提供操作组函数的输出。客户电子邮件地址作为输入参数提供。

为了模拟与应用程序的交互,使用 JSON 语法回复并选择提交:

{ "customer id": 12345 }

在下一步中,代理拥有使用第二个操作组(check-login-status)和函数(check-customer-login-status-in-login-system)调用 Lambda 函数所需的信息。相应地,Lambda 函数提供以下 JSON 负载:

{
  "status": "not verified",
  "reason": "the email address has not been verified",
  "solution": "please verify your email address"
}

使用此内容,代理可以完成其任务并为该客户建议正确的解决方案。

想详细了解幕后发生的事情,选择显示跟踪,可以在其中查看代理编排的每个步骤的详细信息。这可以帮助了解代理决策并在代理组未按预期使用时更正其配置。

注意事项

您可以使用新的简化体验在 AWS 区域美国东部(弗吉尼亚州北部)和美国西部(俄勒冈州)创建和管理 Amazon Bedrock 代理

现在,您无需指定 API 架构或为操作组提供 Lambda 函数即可创建代理。您只需要列出操作组需要的参数即可。调用代理时,您可以选择使用要执行的操作的详细信息交回控制权,这样您就可以在现有应用程序中,或者在持续时间超过 Lambda 函数的最大超时时间时处理操作。

CloudFormation 最近发布了对 Amazon Bedrock 代理的支持,现在正在更新以支持新的简化语法。

了解详情: