[AWS Kendra]Slackをデータソースとして設定できるようになったのでやってみた


AWS Kendraとは

自然言語処理および高度な検索アルゴリズムを使用して非構造化データおよび構造化データを検索できるようにする、高精度でインテリジェントな検索サービスです

要するに自然言語で色々検索できちゃうよ〜〜〜っていうすごいやつです

今回行うこと

3/23にデータソースとしてSlackを設定できるようになったのでそちらを試してみたいと思います!

やってみる

事前準備

検索を行うSlackで適当にメッセージを送信しておく

今回は事前に、英語の適当な文字列,「AWS SAAの試験ガイド英語版のPDF」を送っておきました

Slackの設定

1.下記URLにアクセスして検索を行いたいSlackのURLを入力します
https://app.slack.com/apps-manage

2.ワークスペースの名前の左のビルドを選択

3.Create New AppしてFrom scratchを選択

4.AppNameを任意の名前を入力し、検索を行いたいワークスペースを選択してCreate Appを選択

5.左のメニューのOAuth&Permissionsを選択

6.User Token Scopesで下記のScopeを選択

channels:history
channels:read
groups:history
groups:read
im:history
im:read
mpim:history
mpim:read
team:read
users.profile:read
users:read
emoji:read
files:read
usergroups:read

![スクリーンショット 2022-04-01 10.31.12.png](https://image.docbase.io/uploads/31247fcd-1afd-45be-9570-35e418bfae07.png =WxH)

7.OAuth Tokens for Your WorkspaceのInstall to Workspaceを選択。その後の画面で許可する

8.User OAuth Tokenをコピーしておく

Slack側でやった設定のまとめ

SlackのワークスペースでUser Token Scopesに設定した権限を付与したユーザーを作成して
Kendra側でデータソースとして設定するときにそのユーザーを選択することでメッセージの取得ができるようになるという感じです

Kendraの設定

1.KendraにアクセスしてCreate an IndexからIndexを作成します(東京はまだないので注意)

2.下記の内容でNext

項目
Index name test-kendra
Description Using slack with kendra
IAM role Create a new role
Role name test-kendra-role

3.Configure user access controlInfoはデフォルトのままNext

4.Developer editionでcreate

※indexの作成には30分くらいかかるのでここでコーヒーブレイクなどを行っておいてください

5.作成したIndexを選択してAdd data sources、Slackを選択します

6.下記の内容でNext

項目
Data source name test-kendra-slack
Description source connector for slack
Language English(en)

7.下記の内容でNext

項目
Slack workspace team ID ※xxxxx
Authentication Create and add new sercret
Sercret name AmazonKendra-Slack-slack-key
Slack token User OAuth Token
Virtual Private Cloud (VPC) No VPC
IAM role Create a new role
Role name AmazonKendra-test-kendra-slack-role

※workspace team idはslackをブラウザで開いたときにclientの右の文字列
下記の場合だと123455678がworkspace team id
https://app.slack.com/client/123455678/xxxxx

Select type of content to crawlでまとめて読み込むチャンネルを選択できます。
Public channelsならすべてのPublicチャンネルなどを選択します。
今回は1つのチャンネルのみなのでPublic channelsを選択して、Additional configuration (channels) - optionalを展開し、対象のチャンネル名を入力してAddを押します

Select crawl start dateはいつからのデータを読み込むかを設定します

それ以外の項目はデフォルトのままでSync run scheduleをRun on demandでNext

9.Set field mappingsはデフォルトのままNext

10.Add data sourceを選択します。選択すると30秒ほどで画面が切り替わります

11.しばらくするとCurrent sync stateがidleになります

12.Sync nowを押してしばらく待ちます。
ここの長さは読み込む量が多ければ多いほど長くなります

13.Last sync statusがSuccessになってれば完了です

検索してみる

Search indexed contentを選択します

ここのフォームで文字を入力すると検索ができていることが確認できます

※AND、OR、NOTのようにクエリ言語を使って条件を細かく指定することができます!

Kendraすごい

簡単に自然言語での検索ができるので単純にすげーなって思いました!
データソースとしてRDSやS3なども使用できます!

会社内でコンテンツが分散していることが多数あるので、そのときなどに内容をまとめて検索できたりするのかなと思いました!

今後やってみたいこと

今はKendraの画面から検索しているのですがAPIを使ってSlackからslash commandなどで送った文字列に対して検索を行い結果をそのままslackに返シたりしてみたいと思ってます!