AWS の QnABot は、顧客の質問、回答、フィードバックに応答するマルチチャネル、多言語の会話インターフェイス (チャットボット) です。これにより、チャット、音声、SMS、Amazon Alexa などの複数のチャネルにわたって完全に機能するチャットボットを展開できます。ソリューションのコンテンツ管理環境とコンタクト センター統合ウィザードを使用すると、次の利点を提供する環境をセットアップおよびカスタマイズできます。
インテリジェントなマルチパート インタラクションによるパーソナライズされたチュートリアルと質問と回答のサポートを提供することで、顧客エクスペリエンスを向上させます
カスタマー サポート ワークフローを自動化することで、コールセンターの待ち時間を短縮します。
最新の機械学習テクノロジーを実装して、チャットボットに魅力的で人間のようなインタラクションを作成します
デフォルトのパラメータを使用してこのソリューションをデプロイすると、AWS アカウントに次のコンポーネントがデプロイされます (境界線付きコンポーネントはオプションです)。
図 1: AWS 上の QnABot アーキテクチャ
AWS CloudFormation テンプレートを使用してデプロイされたソリューション コンポーネントの高レベルのプロセス フローは次のとおりです。
管理者はソリューションを AWS アカウントにデプロイし、コンテンツデザイナー UI または Amazon Lex ウェブクライアントを開き、Amazon Cognito を使用して認証します。
認証後、Amazon API Gateway と Amazon S3 は Content Designer UI のコンテンツを配信します。
管理者はコンテンツデザイナーで質問と回答を設定し、UI は質問と回答を保存するために Amazon API Gateway にリクエストを送信します。
Content Designer
AWS Lambda 関数は、Amazon OpenSearch Service への入力を質問バンクインデックスに保存します。テキスト埋め込みを使用する場合、これらのリクエストはまず Amazon Bedrock または Amazon SageMaker でホストされている LLM モデルを通過して埋め込みを生成してから、OpenSearch の質問バンクに保存されます。さらに、 Content Designer
デフォルトおよびカスタム構成設定を AWS Systems Manager パラメータ ストアに保存します。
チャットボットのユーザーは、ウェブクライアント UI、Amazon Alexa、または Amazon Connect を介して Amazon Lex と対話します。
Amazon Lex は、リクエストをBot Fulfillment
AWS Lambda 関数に転送します。ユーザーは、Amazon Alexa デバイス経由でこの Lambda 関数にリクエストを送信することもできます。
ユーザーとチャットの情報は Amazon DynamoDB に保存され、以前の質問と回答のコンテキストからのフォローアップの質問が明確になります。
Bot Fulfillment
AWS Lambda 関数はユーザーの入力を受け取り、Amazon Comprehend と Amazon Translate (必要に応じて) を使用して、非母国語リクエストをデプロイメント中にユーザーが選択した母国語に翻訳し、Amazon OpenSearch Service で回答を検索します。 。テキスト生成やテキスト埋め込みなどの LLM 機能を使用する場合、これらのリクエストはまず Amazon Bedrock または Amazon SageMaker でホストされているさまざまな LLM モデルを通過して、検索クエリと埋め込みを生成し、OpenSearch の質問バンクに保存されているものと比較します。
OpenSearch 質問バンクから一致が返されない場合、ボット フルフィルメント Lambda 関数は次のようにリクエストを転送します。
a. Amazon Kendra インデックスがフォールバック用に設定されている場合、OpenSearch 質問バンクから一致が返されなかった場合、 Bot Fulfillment
AWS Lambda 関数はリクエストを Kendra に転送します。オプションでテキスト生成 LLM を使用して、検索クエリを作成し、返された文書の抜粋から応答を合成できます。
b. Bedrock ナレッジ ベース ID が設定されている場合、 Bot Fulfillment
AWS Lambda 関数はリクエストを Bedrock ナレッジ ベースに転送します。 Bot Fulfillment
AWS Lambda 関数は、RetrieveAndGenerate API を利用してユーザー クエリに関連する結果を取得し、基本モデルのプロンプトを拡張して応答を返します。
Bot Fulfillment
機能を使用したユーザーの操作により、ログとメトリクス データが生成され、Amazon Kinesis Data Firehose に送信され、その後のデータ分析のために Amazon S3 に送信されます。 OpenSearch ダッシュボードを使用すると、使用履歴、記録された発話、ヒットなしの発話、肯定的なユーザー フィードバック、および否定的なユーザー フィードバックを表示でき、カスタム レポートを作成する機能も提供します。
OpenSearch ダッシュボードを使用すると、使用履歴、ログに記録された発話、ヒットしなかった発話、肯定的なユーザー フィードバック、および否定的なユーザー フィードバックを表示でき、カスタム レポートを作成する機能も提供します。
AWS アカウントに QnABot をデプロイする詳細な手順については、実装ガイドを参照してください。
あるいは、AWS に QnABot をカスタム デプロイする場合は、以下の詳細を参照してください。
QnABot のルート ディレクトリに移動します (このリポジトリを複製すると、ディレクトリが作成されます)。
/source ディレクトリから開始します。
cd source
virtualenv をインストールします。
pip3 install virtualenv
QnABot の node.js モジュールをインストールします。
npm install
次に、構成ファイルを設定します。
npm run config
次に、次のパラメータのconfig.json
を編集します。
パラメータ | 説明 |
---|---|
地域 | スタックを起動する AWS リージョン |
プロフィール | 使用する AWS 認証情報プロファイル |
名前空間 | dev、test、prod などでテンプレートを実行するための論理名前空間 |
開発者メールアドレス(必須) | 自動スタック起動で管理者ユーザーを作成するときに使用する電子メール |
次に、次のコマンドを使用して CloudFormation テンプレートを起動し、Lambda コードと CloudFormation テンプレートに使用する S3 バケットを作成します。このテンプレートが完了するまで待ちます (コマンドラインまたは AWS CloudFormation コンソールから進行状況を確認できます)
npm run bootstrap
最後に、次のコマンドを使用してテンプレートを起動し、AWS アカウントに QnABot をデプロイします。スタックが完了すると、デザイナー UI にログインできるようになります (URL はテンプレートの出力です)。 config.json 内の電子メールへの一時パスワード:
npm run up
既存のスタックがある場合は、次のコマンドを実行してスタックを更新できます。
npm run update
単体テストを実行するには、ルート フォルダーから次のコマンドを実行します。
npm test
/website または /templates ディレクトリを変更するときにテスト スナップショットを更新するには、次のコマンドを実行します。
npm run test:update:snapshot
注: 回帰テストを実行すると、コンテンツ デザイナーからコンテンツと設定が作成、変更、削除されます。回帰テストは、コンテンツや設定の損失または変更が許容される非運用ボットに対してのみ実行してください。
これにより、アカウントに展開された QnABot 展開に対して統合テストが実行されます。テストを実行する前に、上記の手順に従ってバージョンを構築してデプロイするか、QnABot ランディング ページのテンプレートを使用してデプロイします。 QnABot を起動します。
cd .nightswatch
brew install python@3
brew install geckodriver
brew install --cask chromedriver
pip3 install virtualenv
python3 -m virtualenv venv
source ./venv/bin/activate
pip install -r requirements.txt
テスト対象の QnA Bot デプロイメントを指すように次の環境変数を設定します。
export CURRENT_STACK_REGION= ' <QNA BOT Region> '
export CURRENT_STACK_NAME= ' <QNA BOT Cloudformation Stack Name> '
export EMAIL= ' <admin user e-mail>
必要に応じて、テストに使用する管理者ユーザーのユーザー名とパスワードを指定します。これらの環境変数が設定されていない場合、初期テスト中にデフォルトの「QnaAdmin」ユーザーが作成されます。デフォルトのユーザーは最初のテストでのみ作成されるため、特定のテストを実行する場合はユーザー名を指定します。
export USER= ' <QNA BOT existing admin user> '
export PASSWORD= ' <QNA BOT existing admin password> '
オプションで、テストに使用する Bedrock Guardrails の識別子とバージョンを指定します。これらの環境変数が設定されていない場合、test_knowledge_base.py および test_llm.py での Bedrock Guardrails のテストはスキップされます。
export BEDROCK_GUARDRAIL_IDENTIFIER= ' <Pre-configurated Guardrail Identifier in your AWS account> '
export BEDROCK_GUARDRAIL_VERSION= ' <Pre-configurated Guardrail Version in your AWS account> '
テストの実行中にブラウザを起動したい場合は、以下の環境変数も設定します。
export HEADLESS_BROWSER= ' false '
各テストの開始時刻と終了時刻を確認したい場合は、次のようにします。
export TIMESTAMPS= ' true '
テストに特定の AWS プロファイルを使用する場合。設定されていない場合、回帰テストは実行されている現在の AWS セッションを使用します。
export TEST_ACCOUNT_PROFILE_NAMES= ' <AWS profile name> '
cd functional
pytest -v
カスタム QnABot のリリースに興味のあるパワー ユーザーは、次の手順を使用して、外部ユーザーが利用できる展開アーティファクトを公開できます。
テンプレートをホストするための S3 バケットを作成します (以下の $DIST_OUTPUT_BUCKET を参照)。ユーザーがデプロイするリージョンごとにリージョン バケットも必要になります。リージョン バケットには $DIST_OUTPUT_BUCKET-$AWS_REGION という名前を付ける必要があります。対象となるユーザーにバケットへの適切なアクセス許可を与える必要があります。バケットのセキュリティとアクセス制御のベスト プラクティスについては、以下のリンクを参照してください。
注: すべてのバケットでバージョニングが有効になっている必要があります。有効になっていないと、スタックのデプロイに失敗します。
カスタム QnABot に次の環境変数を設定します。
export DIST_OUTPUT_BUCKET= ' <name of the bucket to upload artifacts to> '
export SOLUTION_NAME= ' <name of your custom bot> '
export VERSION= ' <bot version> '
export AWS_REGIONS=( " us-east-1 " " us-west-2 " " ap-southeast-1 " " ap-southeast-2 " " ca-central-1 " " eu-west-1 " " ap-northeast-1 " " eu-central-1 " " eu-west-2 " " ap-northeast-2 " )
上記の変数は、ボットがホストされるバケット URL パスを決定します。 AWS_REGIONS 配列は、QnABot がサポートするすべてのリージョンのリストです。ボットのバージョンが特定の地域に展開されない場合は、必要に応じてリストを変更できます。
次のコマンドを実行して、現在のローカル バージョンを指定したバケットにアップロードします。
cd deployment
./build-s3-dist.sh $DIST_OUTPUT_BUCKET $SOLUTION_NAME $VERSION
aws s3 cp global-s3-assets/ s3:// $DIST_OUTPUT_BUCKET / $SOLUTION_NAME / $VERSION / --recursive --acl bucket-owner-full-control
S3 バケットがまだ存在しない場合は、リージョンごとに作成します。これらのバケットはパブリックに使用できるように構成する必要があります。
for region in " ${AWS_REGIONS[@]} " ;
do
if aws s3api head-bucket --bucket " $DIST_OUTPUT_BUCKET - $region " 2> /dev/null
then
echo " Bucket exists: s3:// $DIST_OUTPUT_BUCKET - $region "
else
aws s3api create-bucket --bucket " $DIST_OUTPUT_BUCKET - $region "
echo " Created bucket: s3:// $DIST_OUTPUT_BUCKET - $region "
fi
done
リージョンごとに以下のコマンドを実行します。
for region in " ${AWS_REGIONS[@]} " ;
do
if aws s3api head-bucket --bucket " $DIST_OUTPUT_BUCKET - $region " 2> /dev/null
then
aws s3 cp regional-s3-assets/ s3:// $DIST_OUTPUT_BUCKET - $region / $SOLUTION_NAME / $VERSION / --recursive --acl bucket-owner-full-control
else
echo " Bucket not found: s3:// $DIST_OUTPUT_BUCKET - $region "
fi
done
テンプレートは、次の URL からすべてのリージョンにデプロイできます。
echo https:// $DIST_OUTPUT_BUCKET .s3.amazonaws.com/ $SOLUTION_NAME / $VERSION /qnabot-on-aws-main.template
Webpack を開発モードで実行するには、次のものが必要です。
QnABot のルート ディレクトリに移動します (このリポジトリを複製すると、ディレクトリが作成されます)。
npm install
次に、npm スクリプトdev mode
で package.json にある環境変数ASSET_BUCKET_NAME
を割り当てます。これは、QnABot が ./website アセットをロードするバケットの名前で、通常は <stack-name>-bucket-<randomly-generated-chars> という名前になります。
正しく設定したら、実行します
npm run dev-mode
これにより、Webpack が開発モードに設定され、 ./website/build 内のアセットがASSET_BUCKET_NAME
にアップロードされます。これにより、./website 内の変更も監視され、アセットが変更された場合はバケットにアセットがリロードされます。
現在サポートされているブラウザは次のとおりです。
詳細については、LICENSE.txt ファイルを参照してください。
各バージョンの新機能の詳細については、CHANGELOG.md ファイルを参照してください。
QnABot の機能を説明するワークショップも利用できます。
QnABot は長年にわたって進化するため、サポートが終了したりサポートが終了したりするさまざまなサービスや機能を利用しています。このセクションは、デプロイ可能なソリューションのバージョンとそのパブリックおよび VPC CloudFormation テンプレートへのリンクへの参照として機能します。
注:デプロイ可能なソリューション バージョンとは、 AWS アカウントに QnABot のバージョンをデプロイできる機能を指します。 QnABot のアクティブにサポートされているバージョンは、 QnABot の最新バージョンでのみ使用できます。
Content Designer に Q&A がない場合、testall S3 バケットに多数のバージョンが保存される可能性がある testall 機能に潜在的な問題があるため、このバージョンの使用はお勧めしません。利用可能な最新バージョンを使用してください。
Content Designer に Q&A がない場合、testall S3 バケットに多数のバージョンが保存される可能性がある testall 機能に潜在的な問題があるため、このバージョンの使用はお勧めしません。利用可能な最新バージョンを使用してください。
v5.5.0+
を使用するか、v5.5.0 以降にアップグレードすることを強くお勧めします。詳細については、以下を参照してください。v5.4.X
からそれ以降のバージョンにアップグレードする場合、LLMApi が SAGEMAKER に設定されているデプロイメントからアップグレードする場合は、アップグレードする前にこの値を DISABLED に設定します。アップグレード後、この値を SAGEMAKER に返します。Content Designer に Q&A がない場合、testall S3 バケットに多数のバージョンが保存される可能性がある testall 機能に潜在的な問題があるため、このバージョンの使用はお勧めしません。利用可能な最新バージョンを使用してください。
Content Designer に Q&A がない場合、testall S3 バケットに多数のバージョンが保存される可能性がある testall 機能に潜在的な問題があるため、このバージョンの使用はお勧めしません。利用可能な最新バージョンを使用してください。
testall S3 バケットに多数のバージョンが保存される可能性がある testall 機能に潜在的な問題があるため、このバージョンの使用はお勧めしません。利用可能な最新バージョンを使用してください。
testall S3 バケットに多数のバージョンが保存される可能性がある testall 機能に潜在的な問題があるため、このバージョンの使用はお勧めしません。利用可能な最新バージョンを使用してください。
v5.2.1
より前のすべてのソリューションはデプロイできなくなりました。この情報は現状のまま提供されており、ソリューションで使用されているフレームワークの非推奨カレンダーとサポート終了を確認することを強くお勧めします。QnABot の場合、最も一般的な理由は、AWS Lambda ランタイムが非推奨になったことによるものです。 Lambda ランタイムが非推奨としてマークされると、お客様は AWS アカウントで新しい Lambda 関数を作成できなくなります。これは、これらのランタイムを利用するソリューションの古いバージョンは展開に失敗することを意味します。このため、問題を調査したりバグ レポートを再現したりするために同様の環境を展開することができないため、コミュニティがサポートを提供することが困難になります。
現在、既存のデプロイメントが機能している場合は、更新する必要はありません。ただし、実稼働環境をテストし、サポートされているバージョンに移行する計画を立てることを強くお勧めします。デプロイメントがlatest
から離れるほど、(特にデプロイメントに関して) 不安定になるリスクが大きくなります。
また、このソリューションを初めて使い始めようとしている人には、常に最新バージョンを使用することをお勧めします。これは、QnABot の最も安全で安定した、機能が豊富なバージョンです。
ほとんどの場合、単純なスタック更新操作により、新しいデプロイメント上のデータを維持しながら、インスタンスを新しいバージョンに移行できます。
注:
v5.4.X
からそれ以降のバージョンにアップグレードする場合、LLMApi が SAGEMAKER に設定されているデプロイメントからアップグレードする場合は、アップグレードする前にこの値を DISABLED に設定します。アップグレード後、この値を SAGEMAKER に返します。
チームは、すべてのアップグレード (特にマイナー バージョンとメジャー バージョンの間) を最初に非実稼働インスタンスでテストして、回帰を確認することを強く推奨します。これは、展開にカスタム変更を加えた場合、外部サービスと統合した場合、または複数のバージョン間を移動している場合に重要です。
追加の予防策は次のとおりです。
Export Settings
をクリックします)。このソリューションは、AWS がソリューションの品質と機能を向上させるために、匿名化された運用メトリクスを収集します。この機能を無効にする方法などの詳細については、実装ガイドを参照してください。
著作権は Amazon.com, Inc. またはその関連会社にあります。無断転載を禁じます。
Apache License バージョン 2.0 (「ライセンス」) に基づいてライセンスされています。ライセンスに準拠する場合を除き、このファイルを使用することはできません。ライセンスのコピーは次の場所で入手できます。
http://www.apache.org/licenses/LICENSE-2.0
適用される法律で義務付けられている場合または書面による同意がない限り、ライセンスに基づいて配布されるソフトウェアは、明示または黙示を問わず、いかなる種類の保証や条件もなく、「現状のまま」で配布されます。ライセンスに基づく許可と制限を規定する特定の言語については、ライセンスを参照してください。