AWS 上的 QnABot 是一种多渠道、多语言对话界面(聊天机器人),可响应客户的问题、答案和反馈。它允许您跨多个渠道部署功能齐全的聊天机器人,包括聊天、语音、短信和 Amazon Alexa。该解决方案的内容管理环境和联络中心集成向导允许您设置和自定义环境,该环境具有以下优势:
通过智能多部分交互提供个性化教程和问答支持,增强客户体验
通过自动化客户支持工作流程减少呼叫中心等待时间
实施最新的机器学习技术,为聊天机器人创建引人入胜的、类人的交互
使用默认参数部署此解决方案会在您的 AWS 账户中部署以下组件(边框组件是可选的)。
图 1:AWS 架构上的 QnABot
使用 AWS CloudFormation 模板部署的解决方案组件的高级流程如下:
管理员将解决方案部署到其 AWS 账户中,打开 Content Designer UI 或 Amazon Lex Web 客户端,并使用 Amazon Cognito 进行身份验证。
身份验证后,Amazon API Gateway 和 Amazon S3 传送内容设计器 UI 的内容。
管理员在内容设计器中配置问题和答案,UI 向 Amazon API Gateway 发送请求以保存问题和答案。
Content Designer
AWS Lambda 函数将 Amazon OpenSearch Service 中的输入保存在问题库索引中。如果使用文本嵌入,这些请求将首先通过 Amazon Bedrock 或 Amazon SageMaker 上托管的 LLM 模型生成嵌入,然后保存到 OpenSearch 上的题库中。此外, Content Designer
将默认和自定义配置设置保存在 AWS Systems Manager Parameter Store 中。
聊天机器人的用户通过 Web 客户端 UI、Amazon Alexa 或 Amazon Connect 与 Amazon Lex 交互。
Amazon Lex 将请求转发到Bot Fulfillment
AWS Lambda 函数。用户还可以通过 Amazon Alexa 设备向此 Lambda 函数发送请求。
用户和聊天信息存储在 Amazon DynamoDB 中,以消除后续问题与先前问答上下文的歧义。
Bot Fulfillment
AWS Lambda 函数获取用户输入,并使用 Amazon Comprehend 和 Amazon Translate(如有必要)将非母语请求翻译为用户在部署期间选择的母语,然后在 Amazon OpenSearch Service 中查找答案。如果使用文本生成和文本嵌入等 LLM 功能,这些请求将首先通过 Amazon Bedrock 或 Amazon SageMaker 上托管的各种 LLM 模型来生成搜索查询和嵌入,以便与 OpenSearch 问题库中保存的查询和嵌入进行比较。
如果 OpenSearch 问题库未返回任何匹配项,则 Bot 履行 Lambda 函数将按如下方式转发请求:
一个。如果将 Amazon Kendra 索引配置为回退,则当 OpenSearch 问题库未返回匹配项时, Bot Fulfillment
AWS Lambda 函数会将请求转发到 Kendra。文本生成 LLM 可以选择用于创建搜索查询并根据返回的文档摘录合成响应。
b.如果配置了 Bedrock 知识库 ID,则Bot Fulfillment
AWS Lambda 函数会将请求转发到 Bedrock 知识库。 Bot Fulfillment
AWS Lambda 函数利用 RetrieveAndGenerate API 获取用户查询的相关结果、增强基础模型的提示并返回响应。
用户与Bot Fulfillment
功能的交互会生成日志和指标数据,这些数据会发送到 Amazon Kinesis Data Firehose,然后发送到 Amazon S3 以供后续数据分析。 OpenSearch 仪表板可用于查看使用历史记录、记录的话语、无点击的话语、正面用户反馈和负面用户反馈,还提供创建自定义报告的功能。
OpenSearch 仪表板可用于查看使用历史记录、记录的话语、无点击的话语、正面用户反馈和负面用户反馈,还提供创建自定义报告的功能。
请参阅实施指南,了解有关在 AWS 账户中部署 QnABot 的详细说明。
或者,如果您想在 AWS 上自定义部署 QnABot,请参阅下面的详细信息。
导航到 QnABot 的根目录(克隆此存储库后将创建该目录)。
从 /source 目录开始。
cd source
安装虚拟环境:
pip3 install virtualenv
安装QnABot的node.js模块:
npm install
接下来,设置您的配置文件:
npm run config
现在编辑config.json
的以下参数:
参数 | 描述 |
---|---|
地区 | 要在其中启动堆栈的 AWS 区域 |
轮廓 | 要使用的 AWS 凭证配置文件 |
名称空间 | 用于运行模板的逻辑名称空间,例如 dev、test 和/或 prod |
开发者邮箱(必填) | 在自动堆栈启动中创建管理员用户时使用的电子邮件 |
接下来,使用以下命令启动 CloudFormation 模板以创建用于 Lambda 代码和 CloudFormation 模板的 S3 存储桶。等待此模板完成(您可以从命令行或 AWS CloudFormation 控制台查看进度)
npm run bootstrap
最后,使用以下命令启动模板以在您的 AWS 账户中部署 QnABot。堆栈完成后,您将能够登录设计器 UI(URL 是模板的输出)。 config.json 中电子邮件的临时密码:
npm run up
如果您有现有堆栈,您可以运行以下命令来更新您的堆栈:
npm run update
要运行单元测试,请从根文件夹执行以下命令:
npm test
要在修改 /website 或 /templates 目录时更新测试快照,请执行以下命令:
npm run test:update:snapshot
注意:运行回归测试将从内容设计器中创建、修改和删除内容和设置。仅对非生产机器人运行回归测试,其中内容和设置的丢失或修改是可以接受的。
这将针对您帐户中部署的 QnABot 部署运行集成测试。在运行测试之前,请按照上述步骤构建和部署版本或使用 QnABot 登录页面中的模板进行部署:启动 QnABot。
cd .nightswatch
brew install python@3
brew install geckodriver
brew install --cask chromedriver
pip3 install virtualenv
python3 -m virtualenv venv
source ./venv/bin/activate
pip install -r requirements.txt
设置以下环境变量以指向正在测试的 QnA Bot 部署:
export CURRENT_STACK_REGION= ' <QNA BOT Region> '
export CURRENT_STACK_NAME= ' <QNA BOT Cloudformation Stack Name> '
export EMAIL= ' <admin user e-mail>
(可选)提供用户名和密码供管理员用户进行测试。如果未设置这些环境变量,则在初始测试期间将创建默认的“QnaAdmin”用户。如果您想运行特定测试,请提供用户名,因为默认用户只会在初始测试中创建。
export USER= ' <QNA BOT existing admin user> '
export PASSWORD= ' <QNA BOT existing admin password> '
(可选)提供用于测试的基岩护栏标识符和版本。如果未设置这些环境变量,则将跳过 test_knowledge_base.py 和 test_llm.py 中的基岩护栏测试。
export BEDROCK_GUARDRAIL_IDENTIFIER= ' <Pre-configurated Guardrail Identifier in your AWS account> '
export BEDROCK_GUARDRAIL_VERSION= ' <Pre-configurated Guardrail Version in your AWS account> '
如果您想在运行测试时启动浏览器,请设置以下环境变量:
export HEADLESS_BROWSER= ' false '
如果您想查看每个测试的开始和结束时间:
export TIMESTAMPS= ' true '
如果您想使用特定的 AWS 配置文件进行测试。如果未设置,回归测试将使用当前运行的 AWS 会话。
export TEST_ACCOUNT_PROFILE_NAMES= ' <AWS profile name> '
cd functional
pytest -v
有兴趣发布自定义 QnABot 的高级用户可以使用以下说明来发布可供外部用户使用的部署工件。
创建一个 S3 存储桶来托管其中的模板(请参阅下面的 $DIST_OUTPUT_BUCKET)。您还需要为您的用户将从中进行部署的每个区域提供区域存储桶。区域存储桶必须命名为 $DIST_OUTPUT_BUCKET-$AWS_REGION。您需要为目标用户提供对存储桶的适当访问权限。请参阅以下链接了解存储桶安全和访问控制最佳实践:
注意:所有存储桶都必须启用版本控制,否则堆栈将无法部署。
为您的自定义 QnABot 设置以下环境变量:
export DIST_OUTPUT_BUCKET= ' <name of the bucket to upload artifacts to> '
export SOLUTION_NAME= ' <name of your custom bot> '
export VERSION= ' <bot version> '
export AWS_REGIONS=( " us-east-1 " " us-west-2 " " ap-southeast-1 " " ap-southeast-2 " " ca-central-1 " " eu-west-1 " " ap-northeast-1 " " eu-central-1 " " eu-west-2 " " ap-northeast-2 " )
上述变量将确定托管您的机器人的存储桶 URL 路径。 AWS_REGIONS 数组是 QnABot 支持的所有区域的列表。如果您的机器人版本不会部署在某些区域,则可以根据需要修改该列表。
执行以下命令将当前本地版本上传到指定桶:
cd deployment
./build-s3-dist.sh $DIST_OUTPUT_BUCKET $SOLUTION_NAME $VERSION
aws s3 cp global-s3-assets/ s3:// $DIST_OUTPUT_BUCKET / $SOLUTION_NAME / $VERSION / --recursive --acl bucket-owner-full-control
为每个区域创建 S3 存储桶(如果尚不存在)。这些存储桶需要配置为公共使用:
for region in " ${AWS_REGIONS[@]} " ;
do
if aws s3api head-bucket --bucket " $DIST_OUTPUT_BUCKET - $region " 2> /dev/null
then
echo " Bucket exists: s3:// $DIST_OUTPUT_BUCKET - $region "
else
aws s3api create-bucket --bucket " $DIST_OUTPUT_BUCKET - $region "
echo " Created bucket: s3:// $DIST_OUTPUT_BUCKET - $region "
fi
done
对每个区域运行以下命令:
for region in " ${AWS_REGIONS[@]} " ;
do
if aws s3api head-bucket --bucket " $DIST_OUTPUT_BUCKET - $region " 2> /dev/null
then
aws s3 cp regional-s3-assets/ s3:// $DIST_OUTPUT_BUCKET - $region / $SOLUTION_NAME / $VERSION / --recursive --acl bucket-owner-full-control
else
echo " Bucket not found: s3:// $DIST_OUTPUT_BUCKET - $region "
fi
done
可以从以下 URL 为所有区域部署该模板:
echo https:// $DIST_OUTPUT_BUCKET .s3.amazonaws.com/ $SOLUTION_NAME / $VERSION /qnabot-on-aws-main.template
为了在开发模式下运行 Webpack,请确保具有以下内容
导航到 QnABot 的根目录(克隆此存储库后将创建该目录)。
npm install
接下来,在 npm script dev mode
下分配位于 package.json 中的环境变量ASSET_BUCKET_NAME
。这是 QnABot 加载 ./website 资源的存储桶的名称,通常命名为 <stack-name>-bucket-<randomly- generated-chars>。
设置正确后,运行
npm run dev-mode
这应该将 Webpack 设置为开发模式并将 ./website/build 中的资源上传到ASSET_BUCKET_NAME
。这还将监视 ./website 中的任何更改,并在资产发生变化时将资产重新加载到您的存储桶中。
目前唯一支持的浏览器是:
有关详细信息,请参阅 LICENSE.txt 文件。
有关每个版本中新功能的详细信息,请参阅 CHANGELOG.md 文件。
还提供一个研讨会,引导您了解 QnABot 的功能。
随着 QnABot 多年来的发展,它利用了各种可能会受到支持或不再受到支持的服务和功能。本部分用作可部署解决方案版本的参考以及其公共和 VPC CloudFormation 模板的链接。
注意:可部署解决方案版本是指能够在其 AWS 账户中部署 QnABot 版本。主动支持的 QnABot 版本仅适用于最新版本的 QnABot。
我们不建议使用此版本,因为 testall 功能存在潜在问题,当 Content Designer 没有问答时,可能会引入存储在 testall S3 存储桶中的大量版本。请使用可用的最新版本。
我们不建议使用此版本,因为 testall 功能存在潜在问题,当 Content Designer 没有问答时,可能会引入存储在 testall S3 存储桶中的大量版本。请使用可用的最新版本。
v5.5.0+
因为 Vue 2 已达到生命周期 (EOL),这会影响 QnABot 的所有先前版本。欲了解更多信息,请参见下文。v5.4.X
升级到更高版本的用户,如果您要从 LLMApi 设置为 SAGEMAKER 的部署进行升级,请在升级前将此值设置为 DISABLED。升级后,将此值返回给 SAGEMAKER。我们不建议使用此版本,因为 testall 功能存在潜在问题,当 Content Designer 没有问答时,可能会引入存储在 testall S3 存储桶中的大量版本。请使用可用的最新版本。
我们不建议使用此版本,因为 testall 功能存在潜在问题,当 Content Designer 没有问答时,可能会引入存储在 testall S3 存储桶中的大量版本。请使用可用的最新版本。
我们不建议使用此版本,因为 testall 功能存在潜在问题,这可能会导致 testall S3 存储桶中存储大量版本。请使用可用的最新版本。
我们不建议使用此版本,因为 testall 功能存在潜在问题,这可能会导致 testall S3 存储桶中存储大量版本。请使用可用的最新版本。
v5.2.1
解决方案都不再可部署。此信息按原样提供,强烈建议您检查解决方案中使用的框架的弃用日历和生命周期结束。对于 QnABot,最常见的原因是 AWS Lambda 运行时被弃用。当 Lambda 运行时被标记为已弃用时,客户将无法再在其 AWS 账户中创建新的 Lambda 函数。这意味着使用这些运行时的旧版本解决方案将无法部署。这使得社区很难提供支持,因为我们无法部署类似的环境来调查问题并重现错误报告。
如果您当前已有适合您的部署,则无需更新任何内容。但是,强烈建议您制定计划来测试生产部署并将其迁移到受支持的版本。部署距离latest
越远,遇到不稳定的风险就越大(特别是在部署方面)。
对于那些希望首次开始使用该解决方案的人,始终建议您使用最新版本。它是 QnABot 最安全、稳定且功能丰富的版本!
在大多数情况下,简单的更新堆栈操作应该允许您将实例迁移到较新的版本,同时保留新部署上的数据。
注意:对于从
v5.4.X
升级到更高版本的用户,如果您要从 LLMApi 设置为 SAGEMAKER 的部署进行升级,请在升级前将此值设置为 DISABLED。升级后,将此值返回给 SAGEMAKER。
该团队强烈建议首先在非生产实例上测试任何升级(尤其是次要/主要版本之间),以检查是否有任何回归。如果您对部署进行了自定义修改、与外部服务集成或在多个版本之间跳转,这一点至关重要。
您可以采取的一些额外预防措施包括:
Export Settings
)该解决方案收集匿名运营指标,以帮助 AWS 提高解决方案的质量和功能。有关更多信息,包括如何禁用此功能,请参阅实施指南。
版权所有 Amazon.com, Inc. 或其附属公司。版权所有。
根据 Apache 许可证 2.0 版(“许可证”)获得许可;除非遵守许可证,否则您不得使用此文件。您可以在以下位置获取许可证副本:
http://www.apache.org/licenses/LICENSE-2.0
除非适用法律要求或书面同意,否则根据许可证分发的软件均按“原样”分发,不带任何明示或暗示的保证或条件。请参阅许可证,了解许可证下管理权限和限制的特定语言。