地址: 海口市六霉街488号 邮箱: unrecognizable@yahoo.com 工作时间:上午9点-下午8点

项目展示

  • 首页
  • Our Portfolio
  • 转变一对一客户互动:使用 AWS 和生成性 AI 构建具备语音功能的订单处理代理 机器学习博客

转变一对一客户互动:使用 AWS 和生成性 AI 构建具备语音功能的订单处理代理 机器学习博客

2026-01-27 14:48:24

利用 AWS 和生成式 AI 改变一对一顾客互动:构建具语音能力的订单处理代理

主要重点

本篇文章介绍如何利用 AWS 的服务和生成式 AI 技术,构建一种具语音能力的订单处理代理。随著订单处理技术的进步,企业能够更好地满足顾客需求,同时提升效率与竞争力。此解决方案主要使用 AWS Lambda、Amazon Lex 和 Amazon Bedrock,来实现自动化的订单处理流程。

在现今的一对一顾客互动过程中,尤其是在快餐店和咖啡店,仍然普遍依赖人力服务。这种传统的方式面临著多重挑战:过度依赖人工流程、难以应对顾客需求的增长、可能出现的人工错误,以及有限的营业时间。此外,在竞争激烈的市场中,依赖人工的商业模式可能无法有效提供即时且具竞争力的服务。尽管科技已进步,人性化的订单处理模式依然是主流,这导致了众多局限。

随著生成式 AI 和大型语言模型LLMs的出现,如今有了创建能高效处理自然语言的自动化系统的可能,且上手速度大为提升。 Amazon Bedrock 提供了一系列高效的基础模型,助力开发安全、隐私和负责任的生成式 AI 应用。

在这篇文章中,我们将展示如何使用 Amazon Lex、Amazon Bedrock 和 AWS Lambda 来构建一个具语音能力的订单处理代理。

解决方案概述

下图展示了我们的解决方案架构:

转变一对一客户互动:使用 AWS 和生成性 AI 构建具备语音功能的订单处理代理 机器学习博客

工作流程包括以下几个步骤:

顾客透过 Amazon Lex 下订单。Amazon Lex 机器人解读顾客的意图并触发 DialogCodeHook。一个 Lambda 函数从 Lambda 层中取出合适的提示模板,并通过顾客输入格式化模型提示。RequestValidation 提示将顾客的订单与菜单项进行确认,并通过 Amazon Lex 告知顾客若有不在菜单的项目同时提供建议。该提示也执行了初步的订单完整性验证。ObjectCreator 提示将自然语言请求转换为数据结构JSON 格式。顾客验证 Lambda 函数确认订单所需的属性,并确认处理订单所需的所有资讯是否齐全。顾客 Lambda 函数使用数据结构作为订单处理的输入,并将订单总额返回给调度 Lambda 函数。调度 Lambda 函数调用 Amazon Bedrock LLM 端点生成包括顾客数据库系统例如 Amazon DynamoDB的订单总结。订单摘要通过 Amazon Lex 回复给顾客,当顾客确认订单后,订单将被处理。

前置条件

本篇文章假设您拥有一个有效的 AWS 帐户并熟悉以下概念和服务:

生成式 AIAmazon BedrockAnthropic Claude V2Amazon DynamoDBAWS LambdaAmazon LexAmazon Simple Storage ServiceAmazon S3

此外,为了从 Lambda 函数访问 Amazon Bedrock,您需要确保 Lambda 运行时已安装以下库:

boto3 gt= 12857awscli gt= 12957botocore gt= 13157

可以通过 Lambda 层 或使用特定的 AMI 来创建这些库。

还有,在从 Amazon SageMaker Studio 调用 Amazon Bedrock API 时,也需要这些库。可以通过运行以下代码来安装:

pythonpip install nobuildisolation forcereinstall boto3gt=12857 awscligt=12957 botocoregt=13157

最后,您需要创建以下策略,然后将其附加到任何访问 Amazon Bedrock 的角色:

json{ Version 20121017 Statement [ { Sid Statement1 Effect Allow Action bedrock Resource } ]}

创建 DynamoDB 表

在我们的具体情况中,我们创建了一个 DynamoDB 表作为我们的顾客数据库系统,但您也可以使用 Amazon Relational Database ServiceAmazon RDS。完成以下步骤以配置您的 DynamoDB 表或根据您的用例自定义设置:

在 DynamoDB 控制台中,从导航面板选择 Tables。选择 Create table。

在 Table name 中输入名称例如,ItemDetails。在 Partition key 中输入键本篇中我们使用 Item。在 Sort key 中输入键本篇中我们使用 Size。选择 Create table。

接下来,您可以将数据加载到 DynamoDB 表中。本文中,我们将使用 CSV 文件。可以使用 Python 代码在 SageMaker notebook 中将数据加载到 DynamoDB 表中。

首先,我们需要设置一个名为 dev 的配置文件。

在 SageMaker Studio 中打开一个新的终端,运行以下命令:

bashaws configure profile dev

该命令将提示您输入 AWS 访问密钥 ID、密钥、默认 AWS 区域和输出格式。

返回 SageMaker notebook,使用 Boto3 库写入 Python 代码以设置与 DynamoDB 的连接。此代码片段创建一个使用名为 dev 的特定 AWS 配置的会话,然后使用该会话创建 DynamoDB 客户端。以下是加载数据的样本代码:

pythonpip install boto3import boto3import csv

使用名为 dev 的配置创建会话

session = boto3Session(profilename=dev)

使用该会话创建 DynamoDB 资源

dynamodb = sessionresource(dynamodb)

指定您的 DynamoDB 表名称

tablename = yourtablenametable = dynamodbTable(tablename)

指定 CSV 文件的路径

csvfilepath = path/to/your/filecsv

读取 CSV 文件并将项目放入 DynamoDB

with open(csvfilepath r encoding=utf8sig) as csvfile csvreader = csvreader(csvfile)

# 跳过标题行next(csvreader None)for row in csvreader    # 从 CSV 行中提取值    item = {        Item row[0]  # 根据您的 CSV 结构调整索引        Size row[1]        Price row[2]    }    # 将项目放入 DynamoDB    response = tableputitem(Item=item)    print(f项目添加成功 {response})

print(fCSV 数据已加载到 DynamoDB 表 {tablename})

或者,您可以使用 NoSQL Workbench 或其他工具快速加载数据至 DynamoDB 表。

下图是样本数据插入表格后的截图。

使用 Amazon Bedrock 调用 API 在 SageMaker notebook 中创建模板

为满足这一用例,我们将使用 Amazon Bedrock 来创建提示模板。您可以通过 AWS 管理控制台 和 API 调用访问 Amazon Bedrock。在我们的情况下,我们通过 SageMaker Studio notebook 的 API 调用来访问 Amazon Bedrock,以创建我们的提示模板,以及稍后在 Lambda 函数中使用的完整 API 调用代码。

在 SageMaker 控制台中,访问现有的 SageMaker Studio 域或创建一个新的,从而可以在 SageMaker notebook 中访问 Amazon Bedrock。

创建 SageMaker 域和用户后,选择用户然后选择 Launch 和 Studio。这将打开 JupyterLab 环境。当 JupyterLab 环境准备好后,打开一个新 notebook,并开始导入必要的库。

有许多 FMs 可通过 Amazon Bedrock Python SDK 获取。在此例中,我们使用由 Anthropic 开发的强大基础模型 Claude V2。

订单处理代理需要几个不同的模板。这可以根据用例变化,但我们设计了一个通用工作流程,可以应用于多个设置。在此用例中,Amazon Bedrock LLM 模板将实现以下功能:

验证顾客意图验证请求创建订单数据结构

向顾客传递订单总结

创建 bedrockruntime 对象来调用模型。

python

模型 API 请求参数

modelId = anthropicclaudev2 # 变更以使用模型提供者的其他版本accept = application/jsoncontentType = application/json

import boto3import jsonbedrock = boto3client(servicename=bedrockruntime)

让我们首先开始处理意图验证的提示模板。这是一个迭代的过程,但能够依赖于 Anthropic 的提示工程指南,您可以快速创建能够完成该任务的提示。

创建第一个提示模板以及帮助准备 API 调用主体的工具函数。

以下是 prompttemplateintentvalidatortxt 的代码:

json{ prompt Human 我将给您一些指示以完成我的请求。nltinstructionsgt对话中,人类和助手之间的对话,您需要确定人类想要实现的意图,并适当回应。有效的意图包括:问候、下订单、投诉、找人。请将您的回应放在 Response 标签内。同时在输出中添加一个 XML 标签,标识人类意图。n这里有几个例子:nltexamplegtltConversationgt H 嗨,您好。nnA 嗨,我今天怎么能帮您?nnH 是的。我想要一杯中杯摩卡。nlt/ConversationgtnnAltintentgt 下订单lt/intentgtltResponsegtn明白了。lt/Responsegtlt/examplegtnlt/instructionsgtnn请根据上述指示和示例完成此请求:ltrequestgtltConversationgtREPLACEMElt/Conversationgtlt/requestgtnn助手:n maxtokenstosample 250 temperature 1 topk 250 topp 075 stopsequences [nnHuman nnhuman nnCustomer nncustomer]}

betternet苹果客户端将此模板保存到文件中,以便上传至 Amazon S3 并在需要时从 Lambda 函数中调用。将模板保存为 JSON 序列化字符串的文本文件。上面的截图展示了为此达成的代码示例。对其他模板重复相同步骤。

以下是对其他模板和调用 Amazon Bedrock 时的一些结果进行的截图。

以下是 prompttemplaterequestvalidatortxt 的代码:

json{ prompt Human 我将给您一些指示以完成我的请求。n根据上下文进行以下

订阅我们的时事通讯并获取最新消息