使用由Amazon Lex提供支持的Amazon Kendra和大型语言模型的AWS解决方案,在AWS上部署自助式问答QnABot
在AWS上部署自助式问答QnABot,使用Amazon Kendra和大型语言模型的AWS解决方案
由亚马逊 Lex 提供支持的 AWS 解决方案中的 QnABot 是一个开源的、多渠道、多语言的对话式聊天机器人。QnABot 可以帮助您快速将自助对话式人工智能部署到您的联系中心、网站和社交媒体渠道,降低成本、缩短等待时间,提升客户体验和品牌情感。现在,客户希望利用大型语言模型(LLM)的能力进一步提升客户体验,包括从现有的公司文件和知识库自动生成准确答案,并使他们的自助对话机器人更具对话性。
我们最新的 QnABot 发布版本 v5.4.0+ 现在可以使用 LLM 考虑对话上下文来消除客户问题的歧义,从相关的常见问题解答(FAQ)或 Amazon Kendra 搜索结果和文档片段中动态生成答案。它还通过显示链接到被 LLM 用于构建答案的参考文献和上下文片段来提供归属和透明度。
当您部署 QnABot 时,您可以选择自动部署一个最先进的开源 LLM 模型(Falcon-40B-instruct)在一个亚马逊 SageMaker 终端节点上。LLM 的领域不断发展和演变,新的模型频繁发布,我们的客户希望尝试不同的模型和供应商,以找到最适合他们使用场景的解决方案。这就是为什么 QnABot 还与您提供的任何其他 LLM 集成,使用 AWS Lambda 函数。为了帮助您入门,我们还发布了一组示例的一键部署 Lambda 函数(插件),以将 QnABot 与您选择的领先 LLM 提供商集成,包括我们自己的 Amazon Bedrock 服务和第三方供应商 Anthropic 和 AI21 的 API。
在本文中,我们将介绍 QnABot 的新生成式人工智能功能,并演示如何创建、部署和自定义 QnABot 来使用这些功能。我们还将讨论一些相关的用例。
新的生成式人工智能功能
使用 LLM,QnABot 现在具备了两个新的重要功能,我们将在本节中进行讨论。
从 Amazon Kendra 搜索结果或文本片段生成答案
QnABot 现在可以根据由 Amazon Kendra 搜索提供的文档摘录或直接创建或导入的文本片段生成简明扼要的答案。这提供了以下优势:
- 您需要维护和导入到 QnABot 中的常见问题解答(FAQ)的数量减少了,因为您现在可以根据现有文档即时合成简明扼要的答案。
- 生成的答案可以进行修改,以创建最佳的体验,适用于预期的渠道。例如,您可以将答案设置为简短、扼要,适用于语音渠道的联系中心机器人,而网站或文本机器人可能可以提供更详细的信息。
- 生成的答案与 QnABot 的多语言支持完全兼容,用户可以使用他们选择的语言进行交互,并以同样的语言接收生成的答案。
- 生成的答案可以包含链接到用于构建答案的参考文献和上下文片段,以提供归属和透明度。
例如,当被问到“什么是亚马逊 Lex?”时,QnABot 可以从包含 AWS 文档的 Amazon Kendra 索引中检索相关片段。然后,QnABot 会要求 LLM 根据片段的上下文来回答问题(片段也可以选择在 Web 客户端中查看)。以下屏幕截图显示了一个示例。
消除依赖前述对话上下文的后续问题的歧义
理解不断演化的对话的方向和上下文对于构建自然、类似人类的对话界面至关重要。用户的查询通常需要机器人根据对话记忆和上下文来解释请求。现在,QnABot 将要求 LLM 根据对话历史生成一个消除歧义的问题。然后,可以将此问题用作搜索查询,以检索常见问题解答、片段或 Amazon Kendra 结果来回答用户的问题。以下是一个示例聊天历史记录:
人类:什么是亚马逊 Lex?
AI: "亚马逊 Lex 是一种用于构建应用程序的语音和文本对话界面的 AWS 服务..."
人类:它能与我的 CRM 集成吗?
QnABot使用LLM对后续问题进行重写,以使“它”不含糊,例如,“Amazon Lex能够与我的CRM系统集成吗?”这样可以使用户像在人类对话中一样进行交互,QnABot会生成清晰的搜索查询,以找到相关的常见问题或文档段落,从而提供答案。
这些新功能使QnABot更具对话性,并且能够根据知识库动态生成响应。这仍然是一个具有巨大潜力的实验性功能。我们强烈建议用户进行实验,找到最佳的LLM以及相应的提示和模型参数。QnABot使实验变得简单明了!
教程
现在是时候尝试一下了!让我们部署最新的QnABot(版本5.4.0或更高)并启用新的生成式人工智能功能。高级步骤如下:
- 创建并填充Amazon Kendra索引。
- 选择并部署LLM插件(可选)。
- 部署QnABot。
- 为Lambda插件配置QnABot(如果使用插件)。
- 访问QnABot Web客户端并开始实验。
- 使用QnABot设置自定义行为。
- 将精选的问答和文本段添加到知识库中。
创建并填充Amazon Kendra索引
下载并使用以下AWS CloudFormation模板创建新的Amazon Kendra索引。
该模板包含包含Amazon Kendra、Amazon Lex和SageMaker的AWS在线文档的示例数据。部署堆栈大约需要30分钟的时间,然后大约需要15分钟的时间来同步数据和将其摄取到索引中。
成功部署Amazon Kendra索引堆栈后,导航到堆栈的输出选项卡并记录索引ID
,稍后在部署QnABot时将使用它。
或者,如果您已经具有包含自己内容的Amazon Kendra索引,可以使用它以及自己的示例问题进行教程。
选择并部署LLM插件(可选)
QnABot可以部署内置的LLM(SageMaker上的Falcon-40B-instruct)或使用Lambda函数调用您选择的任何其他LLM。在本节中,我们将向您展示如何使用带有预构建样本Lambda函数的Lambda选项。如果您想使用内置的LLM,请跳至下一步。
首先,选择要使用的插件LLM。从qnabot-on-aws-plugin-samples
存储库的README中查看您的选项。截至本文撰写时,可用于Amazon Bedrock(预览版)以及AI21和Anthropic第三方API的插件。我们希望随着时间的推移添加更多的示例插件。
通过选择“启动堆栈”在“部署新插件堆栈”部分中部署您选择的插件,默认情况下将在us-east-1
区域部署(要在其他区域部署,请参阅构建和发布QnABot插件CloudFormation工件)。
成功部署插件堆栈后,导航到堆栈的输出选项卡(请参阅以下屏幕截图)并检查其内容,您将在后续步骤中使用这些内容来部署和配置QnABot。请在浏览器中保持此选项卡打开。
部署QnABot
从QnABot实施指南中选择“启动解决方案”以通过AWS CloudFormation部署最新的QnABot模板。提供以下参数:
- 对于
DefaultKendraIndexId
,使用您之前收集的Amazon Kendra索引ID(GUID) - 对于
EmbeddingsApi
(请参阅使用文本嵌入进行语义搜索),选择以下其中之一:SAGEMAKER
(默认内置的嵌入模型)LAMBDA
(使用Amazon Bedrock嵌入API与BEDROCK-EMBEDDINGS-AND-LLM
插件)- 对于
EmbeddingsLambdaArn
,使用您的BEDROCK-EMBEDDINGS-AND-LLM
插件堆栈的EmbeddingsLambdaArn
输出值。
- 对于
- 对于
LLMApi
(请参阅对话检索的查询消歧和生成式问答),选择以下其中之一:SAGEMAKER
(默认内置的LLM模型)LAMBDA
(使用先前部署的LLM插件)- 对于
LLMLambdaArn
,使用您的插件堆栈的LLMLambdaArn
输出值。
- 对于
对于所有其他参数,请接受默认值(有关参数定义,请参阅实施指南),然后继续启动QnABot堆栈。
配置使用插件的Lambda插件的QnABot(如果使用插件)
如果您使用了一个示例的LLM Lambda插件来访问不同的LLM,请按照您选择的插件的建议更新QnABot模型参数和提示模板设置。有关更多信息,请参阅更新QnABot设置。如果您使用了SageMaker(内置)LLM选项,则跳过下一步,因为设置已经为您配置好了。
访问QnABot Web客户端并开始实验
在AWS CloudFormation控制台上,选择QnABot CloudFormation堆栈的Outputs选项卡,然后选择ClientURL
链接。或者,通过选择内容设计工具菜单中的QnABot on AWS Client来启动客户端。
现在,尝试提出与AWS服务相关的问题,例如:
- Amazon Lex是什么?
- SageMaker如何扩展推理工作负载?
- Kendra是一个搜索服务吗?
然后,您可以提出后续问题,而无需指定先前提到的服务或上下文,例如:
- 它是否安全?
- 它是否可扩展?
使用QnABot设置自定义行为
您可以在QnABot的内容设计设置页面上自定义许多设置-有关相关设置的完整列表,请参阅README-LLM设置。例如,请尝试以下操作:
-
将
ENABLE_DEBUG_RESPONSES
设置为TRUE
,保存设置,然后再次尝试先前的问题。现在,您将在每个响应的顶部看到附加的调试输出,显示LLM根据聊天历史生成Amazon Kendra搜索查询的方式,LLM推理的运行时间等等。例如:[用户输入:“它快吗?”,LLM生成的查询(1207毫秒):“Amazon Kendra是否提供快速的搜索结果?”,搜索字符串:“它快吗? / Amazon Kendra是否提供快速的搜索结果?”[“LLM:LAMBDA” ],来源:KENDRA RETRIEVE API
-
将
ENABLE_DEBUG_RESPONSES
设置回FALSE
,将LLM_QA_SHOW_CONTEXT_TEXT
和LLM_QA_SHOW_SOURCE_LINKS
设置为FALSE
,然后再次尝试示例。现在不显示上下文和源链接,并且输出仅包含LLM生成的响应。 -
如果您感到有冒险精神,还可以尝试使用LLM提示模板设置-
LLM_GENERATE_QUERY_PROMPT_TEMPLATE
和LLM_QA_PROMPT_TEMPLATE
。请参阅README-LLM设置,了解如何使用占位符来运行时值,如聊天历史,上下文,用户输入,查询等等。请注意,默认提示很可能可以改进和定制以更好地适应您的用例,因此不要害怕尝试!如果您出现问题,您始终可以使用设置页面上的重置为默认值选项恢复到默认设置。
向知识库添加策划的问答和文本段落
QnABot当然可以继续根据策划的问答回答问题。除了使用Amazon Kendra索引外,它还可以使用LLM从直接创建或导入到QnABot的文本段落中生成答案。
QnABot尝试按以下顺序找到对消歧的用户问题的好答案:
- QnA项目
- 文本段落项目
- Amazon Kendra索引
让我们试试一些例子。
在QnABot内容设计工具菜单中,选择导入,然后加载两个示例包:
TextPassages-NurseryRhymeExamples
blog-samples-final
QnABot可以使用文本嵌入来提供语义搜索功能(使用QnABot内置的OpenSearch索引作为向量存储),与标准的基于OpenSearch关键字匹配相比,这种方法可以提高准确性并减少问题调整。为了说明这一点,可以尝试以下问题:
- “告诉我关于带有屏幕的Alexa设备”
- “告诉我关于亚马逊的视频流媒体设备?”
即使提问时使用的词语与配置的QnA项(Alexa.001
和FireTV.001
)不是很好的关键字匹配(但是语义匹配很好),这些问题也应该与导入的示例QNA相匹配。
即使您(还)没有使用亚马逊Kendra(但您应该使用!),QnABot也可以根据在Content Designer中创建或导入的段落来回答问题。以下问题(和后续问题)都是从包含童谣0.HumptyDumpty
的导入的文本段落项中回答的:
- “Humpty Dumpty掉下之前他坐在哪里?”
- “他掉下后发生了什么?他还好吗?”
使用嵌入时,好的答案是返回与相应阈值设置定义的相似性得分高于阈值的答案。有关如何测试和调整阈值设置的详细信息,请参阅使用大型语言模型文本嵌入进行语义问题匹配。
如果没有好的答案,或者LLM的响应与LLM_QA_NO_HITS_REGEX
中定义的正则表达式匹配,则QnABot将调用可配置的Custom Don’t Know(no_hits
)行为,默认情况下返回一条消息说“您让我困惑了。”
通过在QnABot中创建Q&A或文本段落项,并使用Amazon Kendra索引作为回退生成答案,进行一些实验。实验(使用设计师中的TEST选项卡)以找到要用于嵌入阈值设置的最佳值,以获得所需的行为。要达到完美的平衡很困难,但请看看是否可以找到一个足够好的平衡,以便大部分时间都能得到有用的答案。
清理
当然,您可以让QnABot保持运行以进行实验并向同事展示!但这会产生一些费用-有关详细信息,请参阅规划部署-费用。要删除资源并避免费用,请删除以下CloudFormation堆栈:
- QnABot堆栈
- LLM插件堆栈(如果适用)
- Amazon Kendra索引堆栈
用例示例
这些新功能使得QnABot在许多客户用例中都非常实用,例如自助客户服务和支持机器人以及自动化的基于Web的Q&A机器人。我们在本节中讨论了两个此类用例。
与联系中心集成
QnABot的自动问答功能为联系中心的入站语音呼叫提供了有效的自助服务,并取得了令人信服的结果。例如,可以查看肯塔基州交通部如何使用Amazon Connect和Amazon Lex的自助虚拟代理人减少呼叫等待时间并改善客户体验。通过集成新的生成式AI功能,可以进一步增强这个价值主张,从现有内容(如文档、知识库和网站)动态生成可靠的答案。这消除了机器人设计师需要预先考虑并手动策划对用户可能提出的每个可能问题的回答的需求。要将QnABot与Amazon Connect集成,请参阅在AWS上将QnABot连接到Amazon Connect呼叫中心。要与其他联系中心集成,请参阅使用Amazon Chime SDK通过SIPREC将Amazon Lex语音机器人与第三方联系中心连接,并使用QnABot和Amazon Lex构建适用于Genesys Cloud的AI驱动的虚拟代理人。
基于LLM的QnABot还可以作为自动实时代理助手的关键角色。在这个解决方案中,QnABot被动地监听对话,并根据某些线索使用LLM实时生成建议。设置和尝试非常简单-快试一试!这个解决方案可以与Amazon Connect以及其他本地和云联系中心一起使用。有关更多信息,请参阅使用Amazon语言AI服务为您的联系中心提供实时呼叫分析和代理助手。
将QnABot与网站集成
将QnABot嵌入您的网站和应用程序中,可以让用户通过自然对话获得自动化的帮助。有关更多信息,请参阅部署用于聊天机器人的Web UI。对于策划的问答内容,可以使用markdown语法和UI按钮,并结合链接、图像、视频和其他动态元素,为用户提供信息和愉悦的体验。将QnABot Amazon Lex Web UI与Amazon Connect实时聊天集成,可以在自动助手无法完全解答用户问题时,快速升级到人工代理。
QnABot在AWS插件样例库中
如本帖所示,QnABot v5.4.0+不仅支持内置的SageMaker托管的嵌入和LLM模型,还通过使用Lambda函数轻松集成任何其他LLM。您可以编写自己的自定义Lambda函数,或者使用我们在新的qnabot-on-aws-plugin-samples存储库中提供的示例之一,快速入门。
该存储库包括一个为Amazon Bedrock准备的插件,支持嵌入和文本生成请求。在撰写本文时,Amazon Bedrock可通过私有预览访问-您可以申请预览访问。当Amazon Bedrock普遍可用时,我们期望直接将其与QnABot集成,但为什么要等呢?申请预览访问并使用我们的示例插件开始尝试吧!
当今的LLM创新周期正在推动新模型发布的极速发展,每个模型都力求超越上一个版本。这个存储库将随着时间的推移扩展,包括更多的QnABot插件示例。目前,我们支持两个第三方模型供应商:Anthropic和AI21。我们计划添加更多LLM、嵌入和可能涉及Lambda钩子和知识库的常见用例示例的集成。这些插件按原样提供,不提供保修,仅供您方便使用-一旦部署,用户需负责支持和维护。
我们希望QnABot插件存储库能够发展成一个繁荣的开源社区项目。关注qnabot-on-aws-plugin-samples GitHub存储库,获取关于新插件和功能的更新,使用Issues论坛报告问题或提供反馈,并通过pull请求贡献改进。欢迎贡献!
结论
在本文中,我们介绍了QnABot的新的生成式AI功能,并介绍了创建、部署和自定义QnABot以使用这些功能的解决方案。我们还讨论了一些相关的用例。自动化重复的查询可以释放出人力资源并提高生产力。丰富的回答可以营造出引人入胜的体验。部署基于LLM的QnABot可以帮助您提升客户和员工的自助服务体验。
不要错过这个机会-立即开始,为您的QnABot部署革新用户体验!