Amazon Web Services ブログ
検索インテントを使用してAmazon KendraとAmazon Lex を統合する
カスタマーサービスの会話は、一般的に1つ以上のトピックを中心に展開し、関連する質問を含みます。これらの質問にシームレスに答えることが良い会話を行うために不可欠です。例えば、レンタカーを予約する際には、「追加ドライバーにかかる料金はいくらですか?」や「子ども用のカーシートはありますか?」といった質問があると思います。 本日より、Amazon Lex ボットで検索インテントを使用して Amazon Kendra と統合できるため、ボットが Kendra からの回答を表示してくれるようになります。
Amazon Kendra は、最近、エキサイティングな新機能を搭載し、全ての AWS ユーザーに一般公開されました。Amazon Kendra は、機械学習を原動力として、高精度で使いやすいエンタープライズ検索サービスを提供します。これにより、自然言語を使用して直感的に検索したり、より正確な回答を返すことができるようになるため、エンドユーザーは組織の膨大な量のコンテンツ内に保存されている情報を見つけることができます。
以前、AWS Lambda 関数を Amazon Lex ボット内に追加して Kendra と統合する方法について説明しました。詳細はAmazon Kendra を使用して、よくある質問 ボットをよりスマートにをご覧ください。このアプローチでは、統合コードを記述して維持する必要があり、設定を更新する際には必ずこのコードを更新する必要があります。現在は、検索インテントを追加して、FAQ ドキュメントから探している回答を得ることができます。ボット定義の一部として、インテント内に検索インデックスパラメータを定義するだけで良いのです。ユーザー入力が他の構成されたインテントのいずれとも一致しない場合、ボットは対話中に Amazon Kendra 検索インデックスに問い合わせます。検索クエリの応答には、ボットが応答に使用できるリクエスト属性が入力されます。Lambda のコードを記述する必要は全くありません。この統合はシンプルで、Amazon Kendra から Amazon Lex の会話にシームレスに自然言語の回答を配信することができます。
この投稿は、検索インテントを使用して Amazon Lex ボットを Amazon Kendra と統合する方法を示しているため、会話において回答を提供するボットを素早く構築できます。下図に、今回のソリューションを示します。
Lex ボットの構築
以前の投稿と同じ会話を使ってボットの会話をモデル化します。
ユーザー: IT ヘルプデスクはどこにありますか?
エージェント: 2 階の 201 号室 (エレベーターを降りて、右に 2 回曲がったところ) です。
ユーザー: 正午に訪ねてもいいですか?
エージェント: 承知しました。ご用件は何でしょうか?
ユーザー: ノートパソコンの画面にひびが入ってしまいました。
エージェント: 確認のために、従業員 ID の下 4 桁をいただけますか?
ユーザー: 1234 です。
エージェント: かしこまりました。故障部分を拝見しますので、おいでください。
ユーザー: 画面の修理は、どのくらい時間がかかりますか?
エージェント: ノートパソコンの画面の修理には、通常 4 時間かかります。
ユーザー: 画面の修理に何か必要なものはありますか?
エージェント: ノートパソコンの画面を修理するためには、従業員バッジ、ノートパソコン、VPN FOB をご用意ください。
ユーザー: ノートパソコンを修理に出している間、ドキュメントにアクセスするにはどうすればよいですか?
エージェント: Amazon Workdocs を使ってドキュメントにアクセスできます。
ユーザー: タブレット上で WorkDocs は使えますか?
エージェント: はい。ユーザーは、iTunes、Amazon Appstore for Android、Google Play からダウンロード可能な iPad、Kindle Fire、Android タブレット用の無料アプリケーションを使って Amazon WorkDocs にアクセス可能です。また、ユーザーは、モバイルデバイス上でウェブブラウザを使用して Amazon WorkDocs にアクセスできます。
ユーザー: ヘルプデスクはいつ閉まりますか?
エージェント: 営業時間は午前11時から午後2時までです。
ユーザー: 近くにコーヒーショップはありますか?
エージェント: 3 階にあります。毎日午前 8 時から午後 4 時まで営業しています。
まず最初に、インテント を持った Amazon Lexボットを構築し、予定を予約し、予定の状態を確認しますMakeAppointment
インテントは、日付、時刻、従業員 ID、問題の性質など、予定を作成するために必要な情報を引き出します。CheckAppointmentStatus
インテントは、予定の状態を提供します。Lex ボットがこれらのインテントを使って回答できないような質問をユーザーがした場合、Lex ボットはビルトインの KendraSearchIntent
を使用して Amazon Kendra に接続し、適切な回答を検索します。
サンプルボットのデプロイ
サンプルボットを作成するには、次の手順を完了します。これで、help_desk_bot
という Amazon Lex ボットと、help_desk_bot_handler
という Lambda フルフィルメント関数が作成されます。
- Amazon Lex の定義 と Lambda コード をダウンロードする。
- AWS Lambda コンソールで、関数を作成するをクリックする。
- 関数名
help_desk_bot_handler
を入力する。 - 最新の Python ランタイム (Python 3.8 など) を選択する。
- アクセス許可については、基本的な Lambda アクセス許可で新しいロールを作成する を選択する。
- 関数の作成 を選択する。
- 新しいLambda関数が使用可能になったら、関数コードセクションで Actions 、Upload a .zip file、Upload の順に選び、ダウンロードした
help_desk_bot_lambda_handler.zip
ファイルを選択する。 - Save をクリックする。
- Amazon Lex コンソールで、アクション、インポートの順に選択する。
- ダウンロードした
help_desk_bot.zip
ファイルを選択し、インポートする を選択する。 - Amazon Lex コンソールで、ボット
help_desk_bot
を選択する。 - 各インテントについて、フルフィルメント セクションにあるAWS Lambda 関数を選択し、ドロップダウンリストにある
help_desk_bot_handler
関数を選択する。「You are about to give Amazon Lex permission to invoke your Lambda Function (Amazon Lex にあなたの Lambda 関数を呼び出す権限を与えようとしています)」 という警告が表示された場合、OK を選択する。 - 全てのインテントが更新されたら、Build を選択する。
この時点で、Amazon Kendra にまだ接続されていない動作中のボットが作成されているはずです。
Amazon Kendra インデックスの作成
これで、ドキュメントとよくある質問の Amazon Kendra インデックスを作成する準備ができました。次の手順を実行します。
- Amazon Kendraコンソールで、Amazon Kendra を起動する を選択する。
- 既存の Amazon Kendra インデックスがある場合は、インデックスを作成する を選択する。
- インデックス名 に、
it-helpdesk
などの名前を入力する。 - 説明 に、
IT ヘルプデスクよくある質問
などの説明をオプションで入力する。 - IAM ロールの場合、新しいロールを作成する を選択して、ロールを作成し、Amazon Kendra が Amazon CloudWatch Logs にアクセスできるようにする。
- ロール名に
cloudwatch-logs
などの名前を入力する。Kendra はAmazonKendra
および AWS リージョンを名前の前につける。 - 次へを選択する。
- エディションの提供の場合、デベロッパエディション を選択する。
- 作成 を選択する。
よくある質問コンテンツの追加
Amazon Kendra が新しいインデックスを作成している間に、コンテンツを Amazon Simple Storage Service (Amazon S3) バケットにアップロードします。
- Amazon S3 コンソールで、
kendra-it-helpdesk-docs-<your-account#>
などの新しいバケットを作成する。 - デフォルト設定を維持して、バケットを作成するを選択する。
- 次のサンプルファイルをダウンロードし、新しい S3 バケットにアップロードする。
インデックス作成が完了したら、よくある質問コンテンツを追加できます。
- Amazon Kendraコンソールで、自分のインデックスを選択し、よくある質問、よくある質問を追加する の順に選択する。
- よくある質問名 に、
it-helpdesk-faq
などの名前を入力する。 - 説明に、
IT ヘルプデスク用よくある質問
などの説明をオプションで入力する。 - S3 では、Amazon S3 を参照してバケットを見つけ、help-desk-faq.csv を選択します。
- IAM ロールで 新しいロールを作成するを選択して、Amazon Kendra が S3 バケットにアクセスできるようにする。
- ロール名で
s3-access
などの名前を入力する。Kendra はロール名の前にAmazonKendra-
をつける。 - 追加を選択する。
- Amazon Kendra がよくある質問を作成している間、そのページに留まる。
- よくある質問が完了したら、よくある質問を追加する を選択し、よくある質問を追加する。
- よくある質問名に、
workdocs-faq
などの名前を入力する。 - 説明に
Amazon WorkDocs モバイルおよびウェブアクセスに関するよくある質問
などの説明を入力する。 - S3 は、Amazon S3 を参照してバケットを見つけ、workdocs-faq.csv を選択する。
- IAM ロールでは、ステップ9で作成したのと同じロールを選択する。
- 追加を選択する。
よくある質問を作成したら、検索コンソール を選択して Kendra 検索を試すことができます。例:
- ヘルプデスクはいつ開きますか?
- ヘルプデスクはいつ閉まりますか?
- ヘルプデスクはどこにありますか?
- 電話で WorkDocs にアクセスできますか?
検索インテントの追加
Amazon Kendra インデックスを作動させることができたので、検索インテントを追加する必要があります。
- Amazon Lex コンソールで、
help_desk_bot
を選択する。 - インテント の下で, 次に+ アイコンを選択してインテントを追加する。
- 現在のインテントを検索するを選択する。
- ビルトインインテントの下で, KendraSearchIntent を選択する。
help_desk_kendra_search
のような名前をインテントに入力する。- 追加を選択する。
- Amazon Kendra クエリ の下で、 作成したインデックスを選択する (
it-helpdesk
)。 - IAM ロールは、 Amazon Kendra の許可を追加するを選択する。
- フルフィルメントは、デフォルト値である パラメータをクライアントに返す を選択したままにする。
- 応答は、メッセージを選択し、以下のメッセージ値を入力し、 + を選択して追加する。
- インテントの保存を選択する。
- 構築を選択する。
ステップ10で使用したメッセージ値は、リクエスト属性であり、Amazon Kendra 検索インテントにより自動的に設定されます。この応答は Kendra が回答を表示した場合にのみ選択されます。 リクエスト属性に関する詳細はAMAZON.KendraSearchIntent ドキュメントをご覧ください。
これでボットは Amazon Kendra クエリを実行できます。Amazon Lex コンソールでこれをテストできます。例えば、この投稿のサンプル会話をはじめからテストできます。
Slack チャネルへのデプロイ
ユーザーが簡単に情報を入手できるように、このソリューションを Slack などの実際のチャット環境に置くことができます。ボットと Slack チャネルの関連付けを作成するには、次の手順を実行します。
- Amazon Lex コンソールで、設定 を選択する。
- 公開するを選択する。
- エイリアスの作成には、
テスト
などのエイリアス名を入力する。 - 公開するを選択する。
- エイリアスが公開されたら、チャネル を選択する。
- チャネル の下で Slack を選択する。
slack_help_desk_bot
などのチャネル名を入力する。- チャネル説明に、オプションの説明を追加する。
- KMS キー ドロップダウンメニューから、 aws/lex を選択したままにする。
- Aliasは、
テスト
を選択する。 - Slack アプリケーションのクライアント ID、クライアントシークレット、検証トークンを提供する。
- 有効化するを選択して、OAuth URL とポストバック URL を生成する。
Slack アプリケーションのポータルで OAuth URL とポストバック URL を使って、統合を完了します。Slack アプリケーションのセットアップと Amazon Lex との統合の詳細については、Amazon Lex ボットと Slack との統合をご覧ください。
まとめ
この投稿は、検索インテントを使用して Amazon Lex と Amazon Kendra を統合する方法について説明しています。Amazon Kendra では、構造化されていないデータから特定の回答を抽出できます。事前のトレーニングは必要ありません。Amazon Kendra をあなたのコンテンツに適用するだけで、自然言語のクエリへの特定の回答を提供します。これらの手法をボットに組み込む方法の詳細については、AMAZON.KendraSearchIntent ドキュメントをご覧ください。
著者について
Brian Yost は、AWS プロフェッショナルサービス会話 AI チームのシニアコンサルタントです。余暇には、マウンテンバイク、自家製ビール醸造、テクノロジーのティンカリングを楽しんでいます。
Amazon Lex チームのプロダクトマネージャーとして、Harshal Pimpalkhute は、マシンを (うまく) 人間に従事させることに時間を費やしています。