创建无服务器的针对残疾人士的语音上下文聊天机器人
关键要点
本文介绍如何利用 Amazon Bedrock 和 Anthropic Claude 创建一个面向有特殊需求人士的无服务器语音聊天机器人。语音助手可以帮助用户在不键入的情况下获取信息,尤其对运动障碍人士尤为重要。文章提供了详细的实施步骤和理论支持,旨在使语音聊天机器人更易于快速实现和操作。在 Amazon 和 AWS,我们总是致力于寻找创新的方式来构建包容性的技术。通过像 Amazon Alexa 这样的语音助手,我们使更多的人能够即时提问并获取答案,而无需键入。不论您是运动障碍人士、手忙脚乱或是身处计算机无法操作时,免键输入的搜索功能都是非常有价值的。如今的语音助手使您能够以对话的方式提问,并立即得到口头回答。
在此篇文章中,我们将讨论通过语音引导的应用程序,尤其是聊天机器人。聊天机器人如今已经成为一种普遍技术,它们在客户服务网站上随处可见,提供全天候的自动化服务。虽然人工智能聊天机器人已经存在多年,但近年来大型语言模型LLMs,例如 生成式 AI 的进步,促使了更加自然的对话方式。聊天机器人在各个行业得到了广泛应用,能够处理常见问题及行业特定问题。语音助手如 Alexa 显示了我们正迈入对话接口的新时代。对于许多倾向于通过设备与之沟通的用户来说,打字已经显得繁琐。
我们将探讨如何构建一个完全无服务器的、针对特定人群的语音上下文聊天机器人,并提供一个示例应用。该应用可在随附的 GitHub 仓库 中找到。我们创建了一个智能对话助手,它可以理解并对上下文相关的语音输入作出反应。这个人工智能助手由 Amazon Bedrock 提供支持,旨在协助用户完成各种任务、提供信息,并根据用户的独特需求提供个性化支持。我们的 LLM 使用的是 Anthropic Claude。
我们展示了将 Anthropic Claude 的先进自然语言处理能力与 Amazon Bedrock 的无服务器架构集成,从而部署出高可扩展性和低成本的解决方案。此外,我们还讨论了提高聊天机器人对运动障碍人士可访问性和可用性的技巧。本文旨在全面理解如何构建使用最新 AI 和无服务器计算进展的语音上下文聊天机器人。
免费苹果加速器我们希望这一解决方案能够帮助有一定运动障碍的人士。尽管仍需有限的互动,用户仍需能够清晰地识别开始和停止说话的操作。在我们的示例应用中,我们通过设置一个专用的 Talk 按钮来解决这一问题,当按住该按钮时,能够进行语音转录。
对于有显著运动障碍的人士,类似的操作可以通过专用的物理按钮来实施,该按钮可以用一个手指或身体的其他部位来按压。或者,也可以通过特定的关键词来表明指令的开始。例如,和 Alexa 沟通时,用户总是用“Alexa”作为对话的开始。
解决方案概述
以下图示展示了解决方案的架构。
要部署此架构,我们需要托管网页应用的管理计算资源、身份验证机制及相关权限。后面我们将对此进行详细讨论。
我们使用的所有服务均为无服务器且由 AWS 完全管理。您无需预置计算资源,而是通过其 API 消耗这些服务,所有服务调用均由客户端应用直接发出。
该应用是一个简单的 React 应用,使用 Vite 构建工具创建。我们使用 AWS SDK for JavaScript 来调用服务。该解决方案使用以下主要服务:
服务名称描述Amazon Polly一个将文本转换为生动语音的服务。Amazon Transcribe一种使语音转文本变得简单的 AWS AI 服务。Amazon Bedrock一个完全托管的服务,提供高性能基础模型及广泛功能,适用于构建生成式 AI 应用。Amazon Cognito一个用于网络和移动应用的身份服务。为了消耗 AWS 服务,用户需要从 AWS 身份和访问管理 (IAM) 获取临时凭证。这是由于 Amazon Cognito 身份池,它在应用用户和 IAM 服务之间起到中介作用。身份池保存了所有必要权限的 IAM 角色信息。
Amazon Polly 和 Amazon Transcribe 不需要 除我们描述的以外的其他设置。然而,Amazon Bedrock 需要命名用户身份认证。这意味着仅有一个 Amazon Cognito 身份池是不够的,您还需要使用 Amazon Cognito 用户池,以便定义用户并将其绑定到 Amazon Cognito 身份池。要更好地了解 Amazon Cognito 如何允许外部应用调用 AWS 服务,请参考 使用 Amazon Cognito 联邦身份、Amazon Cognito 用户池和 Amazon API Gateway 的安全 API 访问。
为 Amazon Cognito 用户池和身份池进行配置重任,包括为 React 应用生成登录界面,均由 AWS Amplify 完成。Amplify 由一组工具开源框架、可视化开发环境、控制台和服务Web 应用和静态网站托管组成,以加速在 AWS 上开发移动和Web 应用的进程。我们在接下来的章节中介绍设置 Amplify 的步骤。
前提条件
在开始之前,请完成以下前提条件:
确保已安装以下软件:Nodejsnpmgit创建一个用于 Amazon Cognito 身份池的 IAM 角色。采用最小权限原则,仅提供运行应用所需的最小权限。要调用 Amazon Bedrock,请使用以下代码: json { Version 20121017 Statement [ { Sid VisualEditor1 Effect Allow Action bedrockInvokeModel Resource } ] }
要调用 Amazon Polly,请使用以下代码: json { Version 20121017 Statement [ { Sid VisualEditor2 Effect Allow Action pollySynthesizeSpeech Resource } ] }
要调用 Amazon Transcribe,请使用以下代码: json { Version 20121017 Statement [ { Sid VisualEditor3 Effect Allow Action transcribeStartStreamTranscriptionWebSocket Resource } ] }
完整的策略 JSON 应如下所示:
json{ Version 20121017 Statement [ { Sid VisualEditor1 Effect Allow Action bedrockInvokeModel Resource } { Sid VisualEditor2 Effect Allow Action pollySynthesizeSpeech Resource } { Sid VisualEditor3 Effect Allow Action transcribeStartStreamTranscriptionWebSocket Resource } ]}
运行以下命令以克隆 GitHub 仓库: bash git clone https//githubcom/awssamples/serverlessconversationalchatbotgit
要使用 Amplify,请参考 设置 Amplify CLI 完成初始设置。
当您在看到以下提示时,将 AWS 配置文件命名为 amplify:
创建角色 amplifyconsolebackendrole,并赋予 AdministratorAccessAmplify 管理策略,以允许 Amplify 创建所需资源。
本文使用 Anthropic Claude 3 Haiku LLM。要在 Amazon Bedrock 中启用 LLM,请参考 访问 Amazon Bedrock 基础模型。
部署解决方案
有两种选项用于部署该解决方案:
使用 Amplify 自动部署应用手动部署应用以下章节将提供这两种选项的步骤。
使用 Amplify 自动部署应用
如果您的应用存储在 GitHub、Bitbucket、GitLab 或 AWS CodeCommit 中,Amplify 可以自动部署。将您之前下载的应用上传到自己选择的储存库上述选项之一。有关说明,请参见 开始使用 Amplify 托管应用。
现在您可以继续阅读本篇文章的下一节,以设置 IAM 权限。
手动部署应用
如果您无法访问上述提到的储存选项,则可以手动部署应用。如果您想根据特定用例修改应用,这样的选项也非常有用。
我们在 AWS Cloud9 上测试了部署,它是一个云集成开发环境IDE,用于编写、运行和调试代码。我们使用 Ubuntu Server 2204 和 Amazon Linux 2023。
我们使用 Visual Studio Code IDE,直接在 IDE 的终端窗口中运行以下命令,您也可以在选择的终端中运行这些命令:

从您在 GitHub 上找到的应用的目录中运行以下命令: bash cd serverlessconversationalchatbot
运行以下命令: bash npm i amplify init
根据以下屏幕截图中的提示进行后续操作。
对于身份验证,选择您在前提步骤中创建的 AWS 配置文件 amplify。
两个新文件将在项目的 src 文件夹下创建:
amplifyconfigurationjsonawsexportsjs然后运行以下命令: bash amplify configure project 选择“项目信息”。
输入以下信息: plaintext 你想配置哪个设置? 项目信息 为项目输入名称: servrlsconvchat 选择您的默认编辑器: Visual Studio Code 选择您正在构建的应用类型: javascript 您是使用哪个javascript框架: react 源目录路径: src 分发目录路径: dist 构建命令: npm runscript build 启动命令: npm runscript start您可以 使用现有的 Amazon Cognito 身份池和用户池 或 创建新对象。
对于我们的应用,运行以下命令: bash amplify add auth如果您收到以下消息,您可以忽略: plaintext Auth has already been added to this project To update run amplify update auth
选择 默认配置。
接受提示所建议的所有选项。
运行以下命令: bash amplify add hosting
选择您的托管选项。
您有两种选择可以托管该应用。应用可以托管到 Amplify 控制台,或托管到 Amazon 简单存储服务 (Amazon S3),然后通过 Amazon CloudFront 公开。
使用 Amplify 控制台的托管与 CloudFront 和 Amazon S3 的用于特定高流量 Web 应用的更灵活的托管选项不同。Amplify 控制台是一个托管服务,提供持续集成和部署 (CI/CD) 和 SSL 证书,优先考虑无服务器 Web 应用程序和后端 API 的快速部署。相比之下,CloudFront 和 Amazon S3 提供了更大的灵活性和自定义选项,尤其是针对托管静态网站和具有缓存和分配功能的资源。对于复杂且有特定性能和安全需求的高流量 Web 应用程序,CloudFront 和 Amazon S3 更为合适。
在本文中,我们使用 Amplify 控制台。要了解有关使用 Amazon S3 和 Amazon CloudFront 的部署的更多信息,请参阅 文档。
现在您已经准备好发布应用。还有一个选项是将应用发布到 GitHub,以支持 CI/CD 管道。Amplify 与 GitHub 内置集成,可以在您推送更改时自动重新部署应用。为了简单起见,我们将使用手动部署。
选择 手动部署。
运行以下命令: bash amplify publish 应用发布完成后,会得到以下输出,请注意保存该 URL,以便后续使用。
登录