亚马逊AWS官方博客
使用 Amazon Kendra 强化企业搜索能力
Original URL: https://aws.amazon.com/cn/blogs/machine-learning/enhancing-enterprise-search-with-amazon-kendra/
Amazon Kendra是一项易于使用的企业级搜索服务,可帮助您向应用程序中添加搜索功能,保证最终用户得以轻松从企业内部存储的不同数据源中查找信息——具体包括收据、业务文档、技术手册、销售报告、公司内部词汇表以及内部网站等等。您可以从Amazon Simple Storage Service (Amazon S3) 以及OneDrive等存储解决方案当中获取这些信息,也可以面向SalesForce、SharePoint及Service Now等应用程序,或者Amazon Relational Database Service (Amazon RDS)等关系数据库执行搜索。
在输入问题时,该服务将使用机器学习(ML)算法理解上下文,并返回相关度最高的结果——包括准确答案或者完整文档。更重要的是,大家无需具备任何机器学习经验即可完成操作。Amazon Kendra还为大家提供能够轻松与新的应用程序或现有应用程序相集成的代码。
本文将向您介绍如何使用Amazon Kendra功能创建企业内部搜索系统,借此构建解决方案以创建并查询自己的搜索索引。在本文的示例中,我们将使用HTML格式的Amazon.com帮助文档作为数据源,但Amazon Kendra也支持微软Office(.doc、.ppt等)、PDF以及其他多种文本格式。
解决方案概述
本文将向大家介绍如何使用Amazon Kendra在AWS上创建企业搜索引擎。您可以在一个小时之内配置起新的Amazon Kendra索引,且无需掌握深度技术或者丰富的机器学习经验。
本文还将演示如何通过添加常见问题答案,在自定义应用程序中部署Amazon Kendra与同步数据源,借此配置起定制化Amazon Kendra使用体验。后文将详细阐述并解答这些问题。
先决条件
在本轮演练中,大家需要做好如下准备:
- 一个 AWS账户。
- 了解AWS基本知识。
- 一个用于存放文档的S3存储桶。关于更多详细信息,请参阅创建一个存储桶以及Amazon S3是什么?
创建并配置您的文档库
我们首先需要将文档上传至S3存储桶当中,而后才能在Amazon Kendra中创建索引。本节将介绍如何创建S3存储桶、获取文件并将其加载至存储桶当中。完成本节中的所有步骤之后,您便拥有了可供Amazon Kendra使用的数据源。
- 在AWS 管理控制台的Region列表当中,选择US East (N. Virginia) 或者您希望Amazon Kendra运行所在的其他区域(请保证该区域提供Kendra服务)当中。
- 选择Services。
- 在Storage之下,选择S3。
- 在Amazon S3控制台上,选择Create bucket。
- 在General configuration当中,提供以下信息:
- Bucket name:
kendrapost-{your account id}
. - Region: 选择您用于部署Amazon Kendra索引的同一区域(本文使用美国东部us-east-1,即北弗吉尼亚州区域)。
- Bucket name:
- 在Bucket settings for Block Public Access之下,直接使用默认值。
- 在Advanced settings之下,直接使用默认值。
- 选择Create bucket。
- 下载 amazon_help_docs.zip 并解压此文件。
- 在Amazon S3控制台上,选定您刚刚创建完成的存储桶,而后选择Upload。
- 上传解压后的文件。
在存储桶内,大家现在应该看到两个文件夹:amazon_help_docs
(包含3100个对象)以及faqs(包含1个对象)。
以下截屏所示,为 amazon_help_docs
文件的内容。
以下截屏所示,为faqs
文件的内容。
创建索引
索引是Amazon Kendra中的一种组件,可提供文档及常见问题的搜索结果。在完成本节的所有步骤之后,您将可以使用索引搜索来自不同数据源的文档。关于索引的更多详细信息,请参阅索引。
要创建您的第一个Amazon Kendra索引,请完成以下操作步骤:
- 在控制台上,选择Services。
- 在Machine Learning之下,选择Amazon Kendra。
- Amazon Kendra主页面中,选择Create an Index。
- 在Index details部分的Index name当中,输入
kendra-blog-index
- 在Description部分,输入
My first Kendra index
- 在IAM role部分,选择Create a new role
- 在Role name部分,输入
-index-role
(您的角色名称应使用AmazonKendra-YourRegion-
前缀) - 在Encryption部分,不要选择Use an AWS KMW managed encryption key。
(在默认情况下,您的数据将使用Amazon Kendra所拥有的密钥进行加密。)
关于Amazon Kendra创建的IAM角色的更多详细信息,请参阅先决条件。
Amazon Kendra提供两个版本。其中Kendra Enterprise版主要为生产类工作负载提供高可用性服务,Kendra Developer版则适用于构建概念验证与试验。在本文中,我们将使用Developer版。
关于免费层、文档大小限制以及各Amazon Kendra版本总体存储空间的更多详细信息,请参阅Amazon Kendra计费标准。
索引创建过程最多可能需要30分钟。在创建完成之后,您将在页面上方看到一条消息,提示您索引已经成功创建。
添加数据源
数据源是指存储文档以进行索引的位置。您可以将数据源与Amazon Kendra索引自动同步,保证搜索能够正确反映源存储库内的新文档、更新文档或者已删除文档。
在完成本节中的所有步骤之后,您将拥有一个与Amazon Kendra相链接的数据源。关于更多详细信息,请参阅从数据源中添加文档。
在继续下一步之前,请保证索引已经创建完成,且索引状态显示为Active。
Amazon Kendra支持六种数据源类型:Amazon S3, SharePoint Online, ServiceNow, OneDrive, Salesforce online以及Amazon RDS。在本文中,我们使用Amazon S3。
关于Amazon Kendra所支持的各种不同数据源的详细信息,请参阅从数据源中添加文档。
- 在Define attributes部分的Data source name位置,输入
amazon_help_docs
。 - 在Description部分,输入
AWS services documentation
。 - 选择Next。
- 在Configure settings部分的Enter the data source location当中,输入您刚刚创建的S3存储桶:
kendrapost-{your account id}
。 - 保留Metadata files prefix folder location。
在默认情况下,元数据文件将与文档存储在同一目录当中。如果要将这些文件放置在其他文件夹中,可以通过添加前缀实现。关于更多详细信息,请参阅S3文档元数据。
- 在Select decryption key部分,取消全部勾选项。
- 在Role name部分,输入
source-role
(您的角色以AmazonKendra-
为前缀)。 - 在Additional configuration部分,您可以添加模式以包含或排除某些文件夹或文件。在本文的示例中,请直接保留默认值。
- 在Frequency部分,选择Run on demand。
这一步定义了数据源与Amazon Kendra索引间的同步频率。对于本次演练,您可以手动执行同步操作(仅一次)。
整个同步过程的持续时间,取决于您索引的文档数量。在本用例中,可能需要15分钟,之后您应看到一条消息提示您同步成功。
在Sync run history部分,您可以看到有3099个文档同步完成。
使用搜索控制台浏览搜索索引
本文的目的在于通过内置的Amazon Kendra控制台浏览可用的搜索查询。
要对之前创建完成的索引进行搜索,请完成以下操作步骤:
Kendra能够回答三种类型的问题:事实、描述性与关键字问题。关于更多详细信息,请参阅Amazon Kendra常见问题解答。您可以使用之前上传的Amazon.com帮助文档提出相关问题。
在搜索字段中,输入 What is Amazon music unlimited
?
对于这样一个事实性问题(谁、什么、什么时候、什么地方),Amazon Kendra可以快速回答并提供指向源文档的链接。
在关键字搜索中,输入 shipping rates to Canada
。以下截屏所示,为Amazon Kendra提供的答案。
添加常见问题
大家也可以上传一份常见问题列表,为最终用户提出的常见问题直接提供答案。为此,我们需要加载对应的.csv文件,其中包含与问题相关的信息。本节将介绍如何创建并配置此文件,并将其加载至Amazon Kendra。
- 在Amazon Kendra控制台上,导航至您的索引。
- 在Data management之下,选择FAQs。
- 选择Add FAQ。
- 在Define FAQ project部分的FAQ name当中,输入
kendra-post-faq
。 - 在Description部分,输入
My first FAQ list
。
Amazon Kendra能够接受.csv文件当中每一行以问题开头、以答案结尾的内容。具体参见下表:
问题 | 答案 | URL (可选) |
What is the height of the Space Needle? | 605 feet | https://www.spaceneedle.com/ |
How tall is the Space Needle? | 605 feet | https://www.spaceneedle.com/ |
What is the height of the CN Tower? | 1815 feet | https://www.cntower.ca/ |
How tall is the CN Tower? | 1815 feet | https://www.cntower.ca/ |
下面来看本示例中使用的.csv文件格式:
- 在FAQ settings下的S3部分,输入
s3://kendrapost-{your account id}/faqs/kendrapost.csv
。 - 在IAM role部分,选择Create a new role。
- 在Role name部分,输入
faqs-role
(您的角色名称应使用AmazonKendra-YourRegion-
前缀)。 - 选择Add。
- 稍等一会儿,直到状态显示为Active。
现在,大家可以在搜索控制台上查看常见问题能否正常起效了。
- 在Indexes之下,选择您的索引。
- 在Data management之下,选择Search console。
- 在搜索字段中,输入
How do I sign up for the Amazon Prime free Trial
? - 以下截屏所示,为Amazon Kendra将您之前上传的常见问题添加至结果清单,并提供答案与指向该文档的链接。
在您的自有应用程序中使用Amazon Kendra
您可以在应用程序中通过搜索控制台添加以下组件:
- Main search page – 包含所有组件的主页。在这里,您可以将应用程序与Amazon Kendra API集成起来。
- Search bar – 可在其中输入搜索词,并调用搜索功能的组件。
- Results – 显示Amazon Kendra结果的组件。其中包含三个部分:最佳答案、常见问题解答结果与建议文档。
- Pagination – 用于对Amazon Kendra响应结果进行分页的组件。
Amazon Kendra还提供可部署在您网站中的源代码。此项功能基于修改后的MIT许可,因此您可以直接套用或者根据实际需求做出修改。
本节主要讲解如何将Amazon Kendra搜索机制部署到您的网站当中。我们将使用运行在本地计算机上的Node.js应用程序进行演示,此用例基于MacOS环境。
要运行此演示,大家需要准备以下组件:
- Npm (Node.js)
- IAM凭证,由具备适当权限的用户用于访问Amazon Kendra
- 下载amazon_aws-kendra-sample-app-master.zip 文件并进行解压。
- 打开终端窗口,并前往
aws-kendra-sample-app-master
文件夹:
- 为
.env.development.local.example
文件创建一个名为.env.development.local
的副本:
- 编辑
.env.development.local
文件,并添加以下连接参数:- REACT_APP_INDEX – 您的Amazon Kendra索引ID(大家可以在索引主页中找到此编号)。
- REACT_APP_AWS_ACCESS_KEY_ID – 您的账户访问密钥。
- REACT_APP_AWS_SECRET_ACCESS_KEY – 您的账户secret访问密钥。
- REACT_APP_AWS_SESSION_TOKEN – 在本用例中,将此留空。
- REACT_APP_AWS_DEFAULT_REGION – 您用于部署Kendra索引的区域(例如, us-east-1)。
- 保存各项变更。
- 安装Node.js依赖项:
- 启动本地开发服务器:
- 通过 http://localhost:3000/查看演示应用。这时大家看到的内容应如以下截屏所示。
- 输入之前测试常见问题的同一问题
How do I sign up for the Amazon Prime free Trial
?
以下截屏所示,为即使演示网页运行在计算机本地,其结果仍与我们从Amazon Kendra控制台处获得的完全相同。
资源清理
为了避免未使用的角色与策略继续产生不必要成本,请删除我们之前创建的资源:Amazon Kendra索引、S3存储桶以及对应的IAM角色。
- To delete the Amazon Kendra index, under Indexes, choose kendra-blog-index.
- 在index settings部分,从Actions下拉菜单中选择Delete。
- 要确认删除,在字段中输入Delete 并选择Delete。
等待直到收到确认删除的消息;整个过程最多可能需要15分钟。
关于删除S3存储桶的操作说明,请参阅如何删除S3存储桶?
总结
在本文中,我们了解了如何使用Amazon Kendra部署企业搜索服务。您可以使用机器学习支持的Amazon Kendra改善公司内部的搜索体验。您也可以在不具备任何机器学习/AI经验的前提下,使用自然语言快速检索文档。关于Amazon Kendra项目的更多详细信息,请参阅AWS re: Invent 2019大会上Andy Jassy做出的主题演讲、Amazon Kendra常见问题解答以及Amazon Kendra是什么?