赞
踩
通过 Amazon Bedrock 的 Agents,应用程序可以使用生成式人工智能 (generative AI) 跨多个系统和数据源运行任务。从今天开始,这些新功能简化了代理的创建和管理:
快速代理创建 – 您现在可以快速创建一个代理,之后可选择添加说明和操作组,为您的开发过程提供灵活性和敏捷性。
代理构建器 – 所有代理配置都可以在控制台的新代理构建器部分中进行操作。
简化配置 – 操作组可以使用简化的架构,只列出函数和参数,而不必提供API架构。
控制权的返回 – 您可以跳过使用 Amazon Lambda 函数,并将控制权返回给调用代理的应用程序。通过这种方式,应用程序可以直接与亚马逊云科技外部的系统集成,或调用托管在任何 Amazon Virtual Private Cloud (Amazon VPC) 中的内部端点,而无需将所需的网络和安全配置与Lambda函数集成。
基础设施即代码 – 您可以使用 Amazon CloudFormation 来部署和管理使用新简化配置的代理,确保您的生成式AI应用程序在各个环境中保持一致性和可重复性。
让我们看看这些增强功能在实践中是如何工作的。
[使用新的简化控制台创建代理]
为了测试新体验,我想构建一个代理来帮助我回复包含客户反馈的电子邮件。我可以使用生成式AI,但单一调用基础模型 (FM) 是不够的,因为我需要与其他系统交互。为此,我使用一个代理。
在 Amazon Bedrock 控制台中,我从导航窗格选择 Agents,然后选择 Create Agent。我输入代理的名称(customer-feedback)和描述。使用新界面,我继续并在此阶段不提供其他信息创建代理。
现在,我进入了 Agent builder,这是可以访问和编辑代理的整体配置的位置。在 Agent resource role 中,我将默认设置保留为 Create and use a new service role,这样代理所承担的 Amazon Identity and Access Management (IAM) 角色将自动为我创建。对于模型,我选择 Anthropic 和 Claude 3 Sonnet。
控制台截图。
在 Instructions for the Agent 中,我为代理需要执行的任务提供了明确和具体的说明。在这里,我还可以指定想让代理使用的风格和语气进行回复。对于我的用例,我输入:
Help reply to customer feedback emails with a solution tailored to the customer account settings.
在 Additional settings 中,我为 User input 选择 Enabled,这样当代理没有足够的信息进行回复时,它可以要求提供额外的细节。然后,我选择 Save 来更新代理的配置。
现在,我在 Action groups 部分选择 Add。操作组是代理与外部系统进行交互、收集更多信息或执行操作的方式。我输入一个名称(retrieve-customer-settings)和操作组的描述:
Retrieve customer settings including customer ID.
此描述是可选的,但如果提供,将会传递给模型,以帮助选择何时使用此操作组。
在 Action group type 中,我选择 Define with function details,这样我只需要指定函数及其参数。另一个选项(Define with API schemas)对应于使用API架构配置操作组的之前方式。
操作组函数可以与Lambda函数调用关联,或者配置为将控制权返回给调用代理的用户或应用程序,以便他们可以对函数提供响应。返回控制权的选项对以下四种主要用例很有用:
在 Action group invocation 中,我可以指定在编排过程中,当模型识别出此操作组时将被调用的Lambda函数。我可以要求控制台快速创建一个新的Lambda函数、选择一个现有的Lambda函数,或者返回控制权,这样调用代理的用户或应用程序将要求提供细节以生成响应。我选择 Return Control 来展示在控制台中是如何工作的。
我配置操作组的第一个函数。我输入一个名称(retrieve-customer-settings-from-crm)和这个函数的以下描述:
Retrieve customer settings from CRM including customer ID using the customer email in the sender/from fields of the email.
在 Parameters 中,我添加 email,描述为 Customer email。这是一个类型为 String 的必需参数。我选择 Add 来完成操作组的创建。
因为根据我的用例预期,许多客户在登录时会遇到问题,所以我添加了另一个操作组 (名称 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.
在 Parameters 中,我添加 customer_id,另一个类型为 String 的必需参数。然后,我选择 Add 来完成第二个操作组的创建。
当我打开此操作组的配置时,我可以看到已在我的账户中创建的Lambda函数的名称。在那里,我选择 View 来在控制台中打开Lambda函数。
在 Lambda 控制台中,我编辑提供的启动代码并实现我的业务案例:
import json
def lambda_handler(event, context):
print(event)
agent = event['agent']
actionGroup = event['actionGroup']
function = event['function']
parameters = event.get('parameters', [])
# 在此执行您的业务逻辑。更多信息,
# 请参阅: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控制台中选择 Deploy。此函数配置了基于资源的策略,允许Amazon Bedrock调用该函数。因此,我不需要更新代理使用的IAM角色。
我已准备好测试代理。回到Amazon Bedrock控制台,选择代理后,我查找 Test Agent 部分。在那里,我选择 Prepare 来准备代理并使用最新更改对其进行测试。
作为代理的输入,我提供以下示例电子邮件:
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语法回复,然后选择 Submit:
{ “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” }
使用此内容,代理可以完成任务并建议正确的解决方案供该客户使用。
我对结果感到满意,但我想更深入了解发生了什么。我选择 Show trace,在那里我可以看到代理编排的每个步骤的详细信息。这有助于我理解代理的决策,并在操作组未按我预期使用时纠正其配置。
知识点
您现在可以在美国东部 (弗吉尼亚北部) 和美国西部 (俄勒冈州) 亚马逊云科技 地区使用新的简化体验来创建和管理 Amazon Bedrock 的 Agents。
您现在可以在不指定API架构或为操作组提供Lambda函数的情况下创建一个代理。您只需列出操作组所需的参数。在调用代理时,您可以选择返回控制权,提供要执行操作的详细信息,以便您可以在现有应用程序中处理该操作,或者如果持续时间超过最长Lambda函数超时时间。
最近发布了 Amazon Bedrock 的 Agents 的 CloudFormation 支持,现在正在更新以支持新的简化语法。
要了解更多信息:
– Danilo
Danilo Poccia
Danilo 与初创公司和任何规模的公司合作,支持他们的创新。作为亚马逊网络服务 (Amazon Web Services) 的首席布道师 (EMEA),他利用自己的经验帮助人们将想法变为现实,专注于无服务器架构、事件驱动编程以及机器学习和边缘计算的技术和商业影响。他是 Manning 出版的《Amazon Web Services Lambda in Action》一书的作者。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。