本篇文章介绍如何利用 AWS 的服务和生成式 AI技术,构建一种具语音能力的订单处理代理。随著订单处理技术的进步,企业能够更好地满足顾客需求,同时提升效率与竞争力。此解决方案主要使用 AWSLambda、Amazon Lex 和 Amazon Bedrock,来实现自动化的订单处理流程。
在现今的一对一顾客互动过程中,尤其是在快餐店和咖啡店,仍然普遍依赖人力服务。这种传统的方式面临著多重挑战:过度依赖人工流程、难以应对顾客需求的增长、可能出现的人工错误,以及有限的营业时间。此外,在竞争激烈的市场中,依赖人工的商业模式可能无法有效提供即时且具竞争力的服务。尽管科技已进步,人性化的订单处理模式依然是主流,这导致了众多局限。
随著生成式 AI 和大型语言模型(LLMs)的出现,如今有了创建能高效处理自然语言的自动化系统的可能,且上手速度大为提升。 Amazon Bedrock提供了一系列高效的基础模型,助力开发安全、隐私和负责任的生成式 AI 应用。
在这篇文章中,我们将展示如何使用 Amazon Lex、Amazon Bedrock 和 AWS Lambda 来构建一个具语音能力的订单处理代理。
下图展示了我们的解决方案架构:
删除)
工作流程包括以下几个步骤:
DialogCodeHook。RequestValidation 提示将顾客的订单与菜单项进行确认,并通过 Amazon Lex 告知顾客若有不在菜单的项目同时提供建议。该提示也执行了初步的订单完整性验证。ObjectCreator 提示将自然语言请求转换为数据结构(JSON 格式)。本篇文章假设您拥有一个有效的 AWS 帐户并熟悉以下概念和服务:
此外,为了从 Lambda 函数访问 Amazon Bedrock,您需要确保 Lambda 运行时已安装以下库:
可以通过 或使用特定的 AMI 来创建这些库。
还有,在从 调用 Amazon Bedrock API 时,也需要这些库。可以通过运行以下代码来安装:
python %pip install --no-build-isolation --force-reinstall \ "boto3>=1.28.57" \ "awscli>=1.29.57" \ "botocore>=1.31.57"
最后,您需要创建以下策略,然后将其附加到任何访问 Amazon Bedrock 的角色:
`json { "Version": "2012-10-17", "Statement": (Amazon RDS)。完成以下步骤以配置您的 DynamoDB表(或根据您的用例自定义设置):
删除)
ItemDetails)。Item)。Size)。删除)
接下来,您可以将数据加载到 DynamoDB 表中。本文中,我们将使用 CSV 文件。可以使用 Python 代码在 SageMaker notebook中将数据加载到 DynamoDB 表中。
首先,我们需要设置一个名为 dev 的配置文件。
bash aws configure --profile dev
该命令将提示您输入 AWS 访问密钥 ID、密钥、默认 AWS 区域和输出格式。
删除)
# 使用名为 'dev' 的配置创建会话
session = boto3.Session(profile_name='dev')
# 使用该会话创建 DynamoDB 资源
dynamodb = session.resource('dynamodb')
# 指定您的 DynamoDB 表名称
table_name = 'your_table_name' table = dynamodb.Table(table_name)
# 指定 CSV 文件的路径
csv_file_path = 'path/to/your/file.csv'
# 读取 CSV 文件并将项目放入 DynamoDB
with open(csv_file_path, 'r', encoding='utf-8-sig') as csvfile: csvreader =
csv.reader(csvfile)
# 跳过标题行
next(csvreader, None)
for row in csvreader:
# 从 CSV 行中提取值
item = {
'Item': row[0], # 根据您的 CSV 结构调整索引
'Size': row[1],
'Price': row[2]
}
# 将项目放入 DynamoDB
response = table.put_item(Item=item)
print(f"项目添加成功: {response}")
print(f"CSV 数据已加载到 DynamoDB 表: {table_name}") ```
或者,您可以使用
或其他工具快速加载数据至 DynamoDB 表。
下图是样本数据插入表格后的截图。
删除)
## 使用 Amazon Bedrock 调用 API 在 SageMaker notebook 中创建模板
为满足这一用例,我们将使用 Amazon Bedrock 来创建提示模板。您可以通过 和 API 调用访问 Amazon Bedrock。在我们的情况下,我们通过
SageMaker Studio notebook 的 API 调用来访问 Amazon Bedrock,以创建我们的提示模板,以及稍后在 Lambda函数中使用的完整 API 调用代码。
1. 在 SageMaker 控制台中,访问现有的 SageMaker Studio 域或创建一个新的,从而可以在 SageMaker notebook 中访问 Amazon Bedrock。
删除)
1. 创建 SageMaker 域和用户后,选择用户然后选择 **Launch** 和 **Studio** 。这将打开 JupyterLab 环境。
2. 当 JupyterLab 环境准备好后,打开一个新 notebook,并开始导入必要的库。
删除)
有许多 FMs 可通过 Amazon Bedrock Python SDK 获取。在此例中,我们使用由 Anthropic 开发的强大基础模型 ClaudeV2。
订单处理代理需要几个不同的模板。这可以根据用例变化,但我们设计了一个通用工作流程,可以应用于多个设置。在此用例中,Amazon Bedrock LLM模板将实现以下功能:
* 验证顾客意图
* 验证请求
* 创建订单数据结构
* 向顾客传递订单总结
* 创建 bedrock-runtime 对象来调用模型。
删除)
```python
# 模型 API 请求参数
modelId = 'anthropic.claude-v2' # 变更以使用模型提供者的其他版本 accept = 'application/json'
contentType = 'application/json'
import boto3 import json bedrock = boto3.client(service_name='bedrock-
runtime') ```
让我们首先开始处理意图验证的提示模板。这是一个迭代的过程,但能够依赖于 Anthropic 的提示工程指南,您可以快速创建能够完成该任务的提示。
1. 创建第一个提示模板以及帮助准备 API 调用主体的工具函数。
以下是 `prompt_template_intent_validator.txt` 的代码:
`json { "prompt": "Human:
我将给您一些指示以完成我的请求。\\n<instructions>对话中,人类和助手之间的对话,您需要确定人类想要实现的意图,并适当回应。有效的意图包括:问候、下订单、投诉、找人。请将您的回应放在
Response 标签内。同时在输出中添加一个 XML 标签,标识人类意图。\\n这里有几个例子:\\n<example><Conversation> H:
嗨,您好。\\n\\nA: 嗨,我今天怎么能帮您?\\n\\nH:
是的。我想要一杯中杯摩卡。\\n</Conversation>\\n\\nA:<intent>
下订单</intent><Response>\\n明白了。</Response></example>\\n</instructions>\\n\\n请根据上述指示和示例完成此请求:<request><Conversation>REPLACEME</Conversation></request>\\n\\n助手:\\n",
"max_tokens_to_sample": 250, "temperature": 1, "top_k": 250, "top_p": 0.75,
"stop_sequences": ["\\n\\nHuman:", "\\n\\nhuman:", "\\n\\nCustomer:",
"\\n\\ncustomer:"] }`
删除)
删除)
1. 将此模板保存到文件中,以便上传至 Amazon S3 并在需要时从 Lambda 函数中调用。将模板保存为 JSON 序列化字符串的文本文件。上面的截图展示了为此达成的代码示例。
2. 对其他模板重复相同步骤。
以下是对其他模板和调用 Amazon Bedrock 时的一些结果进行的截图。
以下是 `prompt_template_request_validator.txt` 的代码:
```json { "prompt": "Human: 我将给您一些指示以完成我的请求。\n根据上下文进行以下
Leave a Reply