### 前言
当前,人工智能技术的快速发展正在推动语音交互界面向智能化和人性化方向迈进。依托于大语言模型和语音识别技术的突破,语音交互聊天机器人应用开始兴起,为用户提供了全新的人机交互体验。
大语言模型具有强大的自然语言理解和生成能力。通过对话语境分析,大语言模型能够精准捕捉用户的语义意图,结合相关知识并生成合理的回复内容。同时,语音识别技术实现了对人类语音的高准确率识别转录,语音合成技术则可以将文本内容转化为流畅自然的语音输出。有了这些人工智能技术的支持,语音交互聊天机器人打破了传统文字输入的界面限制,极大拓展了人机交互的形式和维度。用户只需自然发话,就能与语音助手进行无障碍的语音对话,获取所需信息或办理相关事务,彷佛在与真人进行交谈。
类似的大模型+语音交互方案已逐步应用到生活的多个领域。例如智能音箱可通过语音指令控制家电,智能车载系统支持语音导航和信息查询,智能玩偶以寓教于乐的方式进行孩童陪伴,智能手机则集成了各类语音助手,方便用户随时随地进行语音交互。这种全新的交互模式有望改变人们的工作和生活习惯,提供高效、自然、无障碍的人机交互体验。本文将基于亚马逊云科技的[Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail)、Polly和Transcribe三项托管AI/ML服务和其他基础服务,实现一个大语言模型的语音交互方案。
### 亚马逊云科技AI/ML相关服务介绍
#### Amazon Bedrock
[Amazon Bedrock](https://aws.amazon.com/cn/bedrock/) 是一项完全托管的服务,它通过统一的 API 将来自领先的 AI 初创公司和 Amazon 的高性能基础模型 (FM) 供您使用。您可以从各种基础模型中进行选择,以找到最适合您的用例的模型。[Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 还提供一系列广泛的功能,用于构建具有安全性、隐私性和负责任 AI 的生成式 AI 应用程序。
使用 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail),您可以轻松地试验和评估适用于您使用场景的基础模型,使用微调和检索增强生成 (RAG) 等技术或是使用您的数据进行微调,并构建使用您的企业系统和数据源执行任务的个性化应用。
借助 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 的[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)体验,您可以快速入门,使用自己的数据自定义基础模型或直接调用预置的基础模型,并使用SDK等工具轻松安全地将其集成和部署到您的应用程序中,而无需管理任何基础设施。
#### Amazon Polly
[Amazon Polly](https://aws.amazon.com/cn/polly/) 是一项文字转语音(Text to speech, TTS)服务,可将文本转换为逼真的语音。您可以使用 [Amazon Polly](https://aws.amazon.com/cn/polly/?trk=cndc-detail) 开发可提高参与度和可访问性的应用程序。[Amazon Polly](https://aws.amazon.com/cn/polly/?trk=cndc-detail) 支持多种语言,并包含各种栩栩如生的声音。借助 [Amazon Polly](https://aws.amazon.com/cn/polly/?trk=cndc-detail),您可以构建支持语音的应用程序,这些应用程序可在多个位置运行,并为您的客户提供理想的语音。此外,您只需为合成的文本付费。您还可以缓存和重播 [Amazon Polly](https://aws.amazon.com/cn/polly/?trk=cndc-detail) 生成的语音,无需额外费用。
[Amazon Polly](https://aws.amazon.com/cn/polly/?trk=cndc-detail) 提供了许多语音选项,包括生成式、长格式、神经和标准文本转语音 (TTS) 选项。这些语音使用新的[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)技术在语音质量方面实现了突破性的改进,以提供最自然、最真实的文本转语音。神经 TTS 技术还支持新闻播音员的演讲风格,专为新闻叙述用例量身定制。
#### Amazon Transcribe
[Amazon Transcribe](https://aws.amazon.com/cn/transcribe/) 是一项自动语音识别(Automatic speech recognition, ASR)服务,它使用[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)模型将音频转换为文本。您可以将 [Amazon Transcribe](https://aws.amazon.com/cn/transcribe/?trk=cndc-detail) 用作独立的转录服务,也可以将语音转文本功能添加到任何应用程序。
通过[Amazon Transcribe](https://aws.amazon.com/cn/transcribe/?trk=cndc-detail),您可以实时转录媒体(流式传输),也可以转录位于 [Amazon S3](https://aws.amazon.com/cn/s3/?trk=cndc-detail) 存储桶(批处理)中的媒体文件。[Amazon Transcribe](https://aws.amazon.com/cn/transcribe/?trk=cndc-detail)支持数十种语言,包括但不限于英语、中文、法语、西班牙语、日语等。您可以查阅[Amazon Transcribe](https://aws.amazon.com/cn/transcribe/?trk=cndc-detail)文档,了解所有的支持语言。
#### 整体架构

本方案整体架构如上图:
1. 用户上传语音文件或实时录音到前端页面;
2. 语音上传到Transcribe,转为文字,同时利用Transcribe的毒性检测功能,实现对音频数据的内容审核;
3. 转换后文字输入到Bedrock,调用大语言模型,生成对应的文字回复;
4. 文字回复输入到Polly,转换成语音;
5. 转换后语音返回到前端,向用户播放;
6. 输入和输出到语音文件保存到S3中存档,对话日志保存到DynamoDB供历史查询使用;
7. 使用CloudWatch监控全流程中各项服务的使用情况。
### 实验步骤
本次实验以 US East(N. Virginia) us-east-1 区域为例。
#### 申请模型访问权限
[Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 用户需要先请求访问模型,然后才能使用模型。 如果您想要添加用于文本、聊天和图像生成的其他模型,您需要请求访问 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 中的模型。请注意,只有具有所需 IAM 权限的用户才能管理此帐户的模型访问权限。
1. 登录您的亚马逊云科技账户,进入管理控制台,在控制台右上角选择您方案部署的区域。这里选择了 us-east-1 进行实验演示,请选择US East (N. Virginia)区域进行后续操作。

点击控制台的查找框,搜索 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail),进入 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 的控制台界面,找到下图所示的“Model access”,点击“Manage model access”。
.png")
此处可以看到 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 提供的模型,勾选需要的模型,并点击“Save changes”。设置好请求访问模型后,模型即刻便可访问。本次实验主要会用到 Anthropic-Claude系列模型,但是Bedrock按需计费,仅根据您实际使用情况计费,不使用不会收费,为方便后续测试其他模型能力,在这里勾选了全部模型。
.png")
#### 部署实验环境
首先登录进您的亚马逊云科技控制台,然后点击快速[部署链接](https://us-east-1.console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/quickcreate?templateURL=https%3A%2F%2Faws-cn-getting-started.s3.us-west-2.amazonaws.com%2FsmartChatbot%2FsmartChatbot.yaml&stackName=SmartChatbot¶m_InstanceType=t2.micro),会跳转到以下界面。选中复选框,点击Create Stack
.png")
等待Stack部署完成后,点击Resources标签,点击MyEC2Instance的Physical ID,跳转到EC2控制台。
.png")
选中此实例,点击右上角Connect,选择EC2 Instance Connect连接到实例。
.png")
登录进实例后,执行以下命令。
```
cd SmartMultiModeChatBot
chmod +x *.sh
./webui.sh
```
执行后,复制https://xxxxx.gradio.live 的地址到浏览器新的标签页,进入前端页面。请勿在实验过程中关闭此终端,否则前端页面可能会停止运行。
.png")
#### 测试结果
部署好实验环境后,打开前端页面,对此方案进行功能测试。
##### 语音识别
语音识别模块使用到了[Amazon Transcribe](https://aws.amazon.com/cn/transcribe/?trk=cndc-detail)服务,能够将输入的语音转换成文字。
.png")
首先选择聊天的语言,目前集成了中文、英语、日语三种语音识别功能,Transcribe支持的更多语言可查阅文档。以英语为例,选择英语作为聊天语言后,点击Record按钮开始录音。
.png")
录音结束后,点击Submit Voice按钮,录音会发送到Transcribe进行识别,并将识别的结果显示在ASR - Automatic Speech Recognition中。
此外,Transcribe目前支持对英文音频的毒性检测,对于不安全的内容会给出毒性标签以及对应的置信度,更多多模态内容审核方案,请参阅[该篇博客](https://aws.amazon.com/cn/blogs/china/multi-modal-intelligent-content-review-based-on-aws-ai-services/)。
.png")
##### 大模型交互
滑动页面到底部,点击Chat by Speech,即可将语音识别后的文字发送到Bedrock中的大模型进行交互。生成后的文字会显示在Chat by Speech中。
.png")
##### 语音输出
点击Speech Chat2,即可将文字输出发送到Polly服务,生成回复的语音。语音显示在Text to Speech from LLM - using Speech中,点击即可播放。
.png")
##### 文本聊天
您也可以通过输入文字的方式,体验Bedrock上托管的大语言模型的生成能力。在Input Text框中,输入聊天的文字语言,点击Chat by Text,即可通过文字方式和大模型交互。
.png")
##### 查询历史会话音频
方案中所有音频数据可存储至S3存储桶,可在控制台搜索并导航到S3,搜索前缀名为“smart-chatbot”的存储桶,您将看到“smart-audio-chatbot”文件夹中存储的所有历史音频数据。此外,您可以将音频的元数据存储至DynamoDB用于后续的数据处理与分析。
.png")
##### 检索日志
方案使用CloudWatch监控全流程中各项服务的使用情况。可在控制台搜索并导航到CloudWatch,搜索名为“/aws/smartMultiChatbot”的日志组,点击名为“smartMultiChatBotStream”的日志流,您将看到所有服务运行的日志。
.png")
.png")
##### 成本计算
在此方案中使用的[Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail),[Amazon Polly](https://aws.amazon.com/cn/polly/?trk=cndc-detail)和[Amazon Transcribe](https://aws.amazon.com/cn/transcribe/?trk=cndc-detail)均为托管服务,采用按照实际使用量计费的模式,无需提前预置资源。此外,托管前端页面的EC2,存档历史音频的S3服务等均可以按照实际需求来选用以实现控制成本。此部分的成本计算假设了一个日均1000次语音请求,所输入和输出的音频平均30字的场景,来计算语音和大模型交互过程的费用。
##### Amazon Transcribe
Transcribe按照语音转换长度计费。按照30字语音为10秒计算,每月的计费总长度为1000次*30天*10秒/60=5000分钟,费用为120美元。
##### Amazon Bedrock
Bedrock按照输入和输出的token计费,30字的输入/输出对应约20个token。以Claude 3 Sonnet模型价格为例,输入价格每1000token是0.003美元,输出每1000token是0.015美元。依此计算,输入处理费用为1000次*30天*20token/1000*0.003=1.8美元,输出处理费用为1000次*30天*20token/1000*0.015=9美元,共计10.8美元。
##### Amazon Polly
Polly按照生成语音的类型、请求数和文本长度收费。以自然语音模式,每月1000次请求,每个请求30字长度计算,每月费用为14.4美元。
综上,本方案月度总成本约为145.2美元。日均1000次访问量适合于为100人左右规模中小团队人日均10次的语音交互服务。
### 总结
此方案验证了使用[Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail)、Polly、Transcribe构建语音交互聊天机器人的可行性。通过使用托管的亚马逊云科技人工智能服务,您可以快速构建语音聊天机器人而无需管理相关基础设施,且根据您业务规模实现弹性扩展,仅根据您实际的使用量收费,助您探索更多业务可能。
#### 资源清理
在实验结束后,您需要手动清除S3桶中的文件和删除部署的CloudFormation模板,以避免其他费用。
##### 清除S3桶中文件
导航到[Amazon S3](https://aws.amazon.com/cn/s3/?trk=cndc-detail)控制台,选择以smart-chatbot开头的存储桶,点击Empty,根据指引清空桶内文件。此操作将会删除所有保存在S3中的语音输入和输出文件。
.png")
##### 清除CloudWatch中的日志
导航到[Amazon CloudWatch](https://aws.amazon.com/cn/cloudwatch/?trk=cndc-detail)控制台,搜索名为“/aws/smartMultiChatbot”的日志组,点击删除日志组即可。
.png")
##### 删除CloudFormation模板
导航到Amazon CloudFormation控制台,选择SmartChatbot堆栈,点击删除。此操作将会删除部署的EC2资源和S3存储桶。
.png")
至此,资源清理完毕。
