目次Category
はじめに
今回は、Amazon Lexを利用して、ユーザーとの会話内容を理解して応答するチャットボットを作成します。
Amazon Lexは、テキストや音声による会話を理解し、
チャットボットなどの会話型インターフェースを構築できるAWSのサービスです。
今回のハンズオンでは、簡単な予約受付を例にして、
ユーザーが「予約したい」と入力すると必要な情報を聞き返すチャットボットを作成します。
今回のポイント
Amazon Lexでは、
ユーザーが「何をしたいのか」を
インテントとして判断し、
その処理に必要な情報を
スロットとして取得しながら会話を進めます。
今回構築する全体像
今回のハンズオンでは、予約を受け付ける簡単なチャットボットを作成します。

ユーザー
↓
「予約したい」
↓
Amazon Lex
↓
インテントを判定
↓
必要な情報を質問
↓
「何日に予約しますか?」
↓
ユーザー
「9月20日」
↓
予約受付完了Amazon Lexがユーザーの入力から目的を判断し、
予約に必要な情報が不足している場合は質問を行います。
必要な情報が揃ったら、最後に予約を受け付けたことをユーザーへ返します。
Amazon Lexとは
Amazon Lexは、テキストや音声を使った
会話型インターフェースを構築できるAWSのサービスです。
ユーザーが入力した文章から目的を判断し、
必要な情報を質問しながら会話を進めることができます。
AWSマネジメントコンソールからボットを作成できるため、
簡単なものであればプログラムを書かずに会話の流れを作成できます。
さらにAWS Lambdaなどと連携することで、
予約情報の登録やデータ検索などの実際の処理を行うこともできます。
Amazon Lexの主な特徴
- ・ユーザーが何をしたいのかをインテントとして判断できる
- ・会話に必要な情報をスロットとして取得できる
- ・テキストや音声を利用した会話に対応できる
- ・複数のインテントを作成して目的ごとに処理を分けられる
- ・フォールバックインテントで想定外の入力にも対応できる
- ・AWS LambdaなどのAWSサービスと連携できる
Amazon Lexの仕組み
Amazon Lexでは、ユーザーの入力から目的を判断し、
その処理に必要な情報を集めながら会話を進めます。
① ユーザーが入力
「予約したい」
↓
② インテントを判定
MakeReservation
↓
③ 必要な情報を取得
「何日に予約しますか?」
↓
④ 処理・応答
「予約を受け付けました」| 流れ | Lexの動作 | 今回の例 |
|---|---|---|
| ① 入力 | ユーザーから入力を受け取る | 予約したい |
| ② 目的を判断 | インテントを判定する | MakeReservation |
| ③ 情報を取得 | 不足しているスロットを質問する | 何日に予約しますか? |
| ④ 処理・応答 | 情報が揃ったら処理や応答を行う | 予約を受け付けました |
Amazon Lexの主な用語
| 用語 | 役割 | 今回の例 |
|---|---|---|
| ボット | ユーザーと会話するチャットボット全体 | 予約受付ボット |
| インテント | ユーザーが達成したい目的 | 予約したい |
| サンプル発話 | インテントを判断するための発言例 | 「予約したい」「予約をお願いします」 |
| スロット | 処理に必要な情報 | 予約日 |
| フルフィルメント | 必要な情報が揃った後に行う処理 | 予約受付完了を案内する |
| フォールバック | どのインテントにも該当しない入力への対応 | 内容を理解できなかった場合の応答 |
覚え方
インテント = 何をしたい?
スロット = そのために何が必要?
料金の仕組み
Amazon Lexは、主にユーザーから送信された
テキストや音声のリクエスト数などに応じて料金が発生します。
実際にシステムへ導入する場合は、
利用ユーザー数や1人あたりの会話回数などから利用量を見積もります。
| 確認する項目 | 内容 |
|---|---|
| 利用者数 | 何人程度がボットを利用するか |
| 会話回数 | 1ユーザーあたり何回やり取りするか |
| 入力方法 | テキストまたは音声を利用するか |
| 関連サービス | Lambdaやデータベースなどを使用する場合は、それぞれの料金も確認する |
利用できる入力方法
| 入力方法 | 内容 | 利用例 |
|---|---|---|
| テキスト | ユーザーが文字を入力して会話する | Webチャット・アプリ |
| 音声 | ユーザーの音声を利用して会話する | 電話・音声による問い合わせ |
Amazon Lexの主な用途
| 利用例 | 内容 |
|---|---|
| 問い合わせ対応 | ユーザーの問い合わせ内容を判断して回答する |
| 予約受付 | 日付や人数などを会話形式で取得する |
| 商品・サービス案内 | ユーザーの希望を聞きながら案内する |
| 社内ヘルプデスク | 社内手続きや問い合わせに回答する |
| 電話対応 | 音声を利用した自動応答を構築する |
| 注文受付 | 商品名や数量などを会話から取得する |
構築手順
Step1 Amazon Lexを開く
設定手順
- AWSマネジメントコンソールへログインします。
- 画面上部の検索欄から「Amazon Lex」を検索します。
- Amazon Lexを開きます。
- 「ボットを作成」を選択します。
Step2 ボットを作成する
今回は、予約を受け付ける簡単なチャットボットを作成します。
設定例
| 項目 | 設定内容 |
|---|---|
| ボットの作成方法 | 空のボットを作成 |
| ボット名 | ReservationBot |
| IAMアクセス許可 | 基本的なAmazon Lex権限を持つロールを作成 |
| COPPA | 今回の用途に合わせて選択 |
設定後、「次へ」を選択して言語の設定へ進みます。
Step3 言語を設定する
ボットが利用する言語を設定します。
| 項目 | 設定内容 |
|---|---|
| 言語 | 日本語(日本) |
| 音声インタラクション | 今回はテキストで確認するため基本設定のまま進める |
設定が完了したらボットを作成します。
Step4 インテントを作成する
次に、ユーザーが何をしたいのかを表すインテントを作成します。
今回は「予約をしたい」という目的を表すインテントを作成します。
| 項目 | 設定内容 |
|---|---|
| インテント名 | MakeReservation |
インテントとは
ユーザーが達成したい目的を表します。
例えば「予約したい」「商品を注文したい」「営業時間を知りたい」など、
目的ごとにインテントを作成します。
Step5 サンプル発話を設定する
「サンプル発話」には、ユーザーが実際に入力すると考えられる文章を登録します。
今回は次のような文章を登録します。
予約したい
予約をお願いします
予約できますか
予約を取りたいユーザーの入力がこれらの発言に近い場合、
Amazon LexはMakeReservationインテントだと判断します。
ポイント
ユーザーは必ずしも登録した文章と完全に同じ言い方をするとは限りません。
そのため、同じ目的でも複数の言い回しをサンプル発話として登録します。
Step6 スロットを作成する
予約を受け付けるためには、予約日などの情報が必要です。
このように、処理を行うためにユーザーから取得する情報をスロットと呼びます。
今回は、予約日を取得するスロットを作成します。
| 項目 | 設定内容 |
|---|---|
| スロット名 | ReservationDate |
| スロットタイプ | 日付を扱う組み込みスロットタイプ |
| 必須設定 | 有効 |
| スロットプロンプト | 何日に予約しますか? |
スロットを必須に設定すると、
予約日をまだ取得できていない場合にAmazon Lexがユーザーへ質問します。
ユーザー
「予約したい」
↓
Amazon Lex
「何日に予約しますか?」
↓
ユーザー
「9月20日」
↓
予約日
= 9月20日Step7 フルフィルメントを設定する
必要なスロットの情報がすべて取得できた後に実行する処理を
フルフィルメントと呼びます。
今回はLambdaを使用せず、
予約を受け付けたことを伝えるメッセージを返す構成にします。
予約を受け付けました。実際のシステムでは
フルフィルメントでLambdaを呼び出すことで、
取得した予約日をデータベースへ登録したり、
予約可能な日時を検索したりする処理を実装できます。
Step8 ボットをビルドする
インテントやスロットなどの設定が完了したら、
画面上部の「ビルド」を選択します。
ビルドが完了すると、
作成した会話設定を利用してボットをテストできるようになります。
Step9 チャットボットをテストする
ビルドが完了したら、画面上部の「テスト」を選択して会話を試します。
ユーザー:
予約したい
Amazon Lex:
何日に予約しますか?
ユーザー:
9月20日
Amazon Lex:
予約を受け付けました。動作確認
① 登録したサンプル発話を試す
- 「予約したい」と入力します。
- 予約日を質問されることを確認します。
- 日付を入力します。
- 予約受付完了のメッセージが表示されることを確認します。
② 異なる言い回しを試す
登録したサンプル発話とは少し異なる文章も入力します。
予約を取りたいです
予約お願いできますか
予約したいんですがこれらの文章が正しくMakeReservationインテントとして判断されるか確認します。
③ 想定外の入力を試す
今日の天気を教えて予約とは関係のない入力を行い、
フォールバックインテントへ処理されるか確認します。
フォールバックインテントとは
Amazon Lexには、
ユーザーの入力をどのインテントにも判断できなかった場合に利用される
フォールバックインテントがあります。
例えば予約受付ボットに対して、
今日の天気を教えてと入力された場合、
予約に関するインテントとして判断できなければ、
フォールバックインテントへ処理されます。
例えば次のような応答を設定できます。
申し訳ありません。
内容を理解できませんでした。実際のシステムではどう使う?
今回のハンズオンでは、Amazon Lexだけで簡単な応答を返しました。
実際の業務システムでは、
Lambdaやデータベースなどと組み合わせることで、
会話した内容に応じて実際の処理を実行できます。
例:予約受付システム
ユーザー
↓
Webサイト・アプリ
↓
Amazon Lex
↓
インテント・スロット
↓
AWS Lambda
↓
データベース
↓
予約情報を登録
↓
Amazon Lex
↓
ユーザーへ結果を返すAmazon Lexはユーザーとの会話や情報取得を担当し、
Lambdaが実際の業務処理を担当するように役割を分けることができます。
よく使う関連サービスとの連携
ユーザー
↓
Webサイト・アプリ
↓
Amazon Lex
(会話・目的を判断)
↓
AWS Lambda
(処理を実行)
↓
DynamoDB / RDS
(情報の検索・保存)
↓
Amazon Lex
↓
ユーザーへ回答| サービス | 主な役割 |
|---|---|
| Amazon Lex | ユーザーとの会話・目的の判断・情報取得 |
| AWS Lambda | 予約登録や情報検索などの処理 |
| Amazon DynamoDB | 予約情報などのデータを保存 |
| Amazon RDS | リレーショナルデータを保存・検索 |
| Amazon Connect | 電話による問い合わせ対応 |
業務での利用例
問い合わせ対応
ユーザーの問い合わせ内容を判断し、
質問に応じた回答を返すチャットボットを構築できます。
予約受付
日付や人数などをスロットとして取得し、
Lambdaなどを通して予約システムへ登録できます。
社内ヘルプデスク
社員からの「パスワードを変更したい」「申請方法を知りたい」などの問い合わせを判断し、
必要な案内を自動で返す仕組みに利用できます。
商品・サービス案内
ユーザーの希望や条件を会話形式で確認しながら、
適した商品やサービスを案内する仕組みに利用できます。
電話での自動応答
音声による問い合わせ内容を判断し、
適切な案内や後続処理へつなげる仕組みに利用できます。
導入時に考えるポイント
① インテントを適切に分ける
複数の目的を1つのインテントにまとめすぎると、
ユーザーの目的を判断しにくくなります。
「予約」「キャンセル」「営業時間確認」など、
目的ごとにインテントを分けて設計します。
② サンプル発話を複数用意する
ユーザーによって言い方が異なるため、
実際に使われそうな複数の表現を登録します。
③ 必要な情報をスロットとして整理する
処理に必要な情報だけをスロットとして設定し、
ユーザーへの質問が多くなりすぎないようにします。
④ 想定外の入力も考える
フォールバックインテントなどを利用し、
Amazon Lexがユーザーの目的を判断できなかった場合の応答も設計します。
⑤ 実際の処理との連携
Amazon Lexだけでは、
予約情報をデータベースへ保存するなどの業務処理は行いません。
実際に処理を行う場合はLambdaなどと連携し、
取得したスロットの値を利用して後続処理を実装します。
ポイント
- ・ユーザーの目的をインテントとして判断できる
- ・スロットを使って必要な情報を会話形式で取得できる
- ・テキストや音声を利用した会話型インターフェースを構築できる
- ・Lambdaなどと連携して実際の業務処理へつなげられる
作成したリソースを削除する
ハンズオン終了後、今回作成したボットが不要な場合は、
Amazon Lexのコンソールから削除します。
また、Amazon Lex用にIAMロールやLambdaなどを別途作成した場合は、
それらについても不要か確認して削除します。
確認ポイント
- ・作成したAmazon Lexボットが不要になっていないか
- ・検証用のIAMロールが残っていないか
- ・Lambdaを作成した場合は不要になっていないか
- ・データベースなど他のAWSリソースを作成していないか
まとめ
今回は、Amazon Lexを利用して簡単な予約受付チャットボットを作成しました。
今回のハンズオンでは、次の内容を確認しました。
- ・Amazon Lexでボットを作成する
- ・インテントでユーザーの目的を定義する
- ・サンプル発話でユーザーの発言例を登録する
- ・スロットを利用して必要な情報を取得する
- ・フルフィルメントで会話完了後の処理を設定する
- ・フォールバックインテントで想定外の入力に対応する
Amazon Lex単体でも簡単なチャットボットを作成できますが、
Lambdaやデータベースなどと連携することで、
予約受付や問い合わせ対応などの実際の業務処理までつなげることができます。
同じカテゴリーの記事
同じカテゴリの記事を読む