Amazon Bedrock を利用した Alexa スキルの裏側で利用している AWS のサービスと構成について

記事タイトルとURLをコピーする

Amazon Bedrock を利用した Alexa スキルの AWS の構成図

 こんにちは、こけしが趣味の坂本(@t_sakam)です。今回は、Amazon Bedrock を利用した Alexa スキル「AI 基盤くん」の裏側で利用している AWS のサービスや構成を確認していきたいと思います。
 
 「AI 基盤くん」の構成は、ほぼ Alexa スキル制作の一般的な構成となっており、Alexa スキル制作界隈ではお馴染みの構成ですが、知らない方もいらっしゃると思いますので、何かの参考になれば幸いです。
 
 具体的に Alexa スキルを一から作成する手順に関しては、「Alexa 虎の巻」シリーズに記載していますので、Alexa のスキル制作に興味がある方は、よろしければ、そちらもご確認ください。今回は AWS 側の構成がどうなっているのかを中心に確認していきます。

AWS Lambda

構成図の Lambda を赤枠で囲った画像
AWS Lambda

 まず、必ず必要な AWS のサービスは AWS Lambda です。「AI 基盤くん」でも Lambda を利用しています。

Alexa 開発者コンソールと簡単に連携可能

 構成図の「Alexa」の箇所は「Alexa 開発者コンソール」を意味していますが、この Alexa 開発者コンソールで、Alexa スキルのバックエンドの処理をする Lambda 関数の ARN を指定します。
 EC2 等の Web サーバーを指定することもできますが、Alexa スキルの場合は、以下の Alexa のドキュメントに記載されているとおり Lambda を使うことが一番簡単な方法となっており、推奨されています。

developer.amazon.com

カスタムAlexaスキル用のクラウドベースのサービスを構築する最も簡単な方法は、AWS Lambdaを使用することです。

 Lambda は、以下の AWS のドキュメントに記載の通り、サーバーレスでコードを実行できるサービスのため、インフラの運用は必要ありません。イベント駆動型で常時サーバーを起動しておく必要がなく、Alexa スキルが利用された時だけ、処理が実行される仕組みとなっています。

aws.amazon.com

 AWS Lambda は、サーバーレスでイベント駆動型のコンピューティングサービスであり、サーバーのプロビジョニングや管理をすることなく、事実上あらゆるタイプのアプリケーションやバックエンドサービスのコードを実行することができます。200 以上の AWS のサービスやサービス型ソフトウェア (SaaS) アプリケーションから Lambda をトリガーすることができ、使用した分だけお支払いいただきます。

 また、上記の 公式ドキュメントにも記載のとおり、AWS のサービスから簡単に Lambda を呼び出すことが可能です。以下のようにマネジメントコンソールでトリガーとなる Alexa やそれ以外の AWS のサービスを簡単に指定できます。

Lambda のマネジメントコンソールで、Alexa をトリガーとして指定している画像
Alexa をトリガーとして指定する

Amazon Bedrock

構成図の Bedrock を赤枠で囲った画像
Amazon Bedrock

 Amazon Bedrock に関しては Lambda と違い「AI 基盤くん」が独自で利用している AWS のサービスになります。Amazon Bedrock は、いま話題の AWS の生成 AI のサービスです。こちらも、以下の AWS のドキュメントにも記載のとおり、Lambda と同様にサーバーレスで利用できるサービスのため、自分でインフラの運用をする必要はありません。

aws.amazon.com

Amazon Bedrock はサーバーレスであるため、インフラストラクチャを管理する必要がありません。また、使い慣れた AWS サービスを使用して、生成 AI 機能をアプリケーションに安全に統合してデプロイできます。

複数用意されているモデルから好きなモデルを選択

 以下の画像を見ていただくとわかるとおり、Amazon Bedrock には Amazon の基盤モデルである Titan に限らず、他社のモデルもたくさん用意されており、構築したいサービスに合わせて、好きなモデルを選択することができます。

オレゴンリージョンの画面。Claude 3 Opus が存在する
オレゴンリージョンの画面。Claude 3 Opus が存在する

Claude 3 Haiku

 「AI 基盤くん」では、この内 Claude 3 Haiku というモデルを利用しています。Claude 3 Haiku は、Anthropic 社から提供されている最新モデルの Claude 3 の中でも最も軽量なモデルです。Alexa スキルには、8 秒以内でのレスポンスが必要、という制限があるため、最軽量のモデルを選択しています。
 
 Claude 3 には、Haiku の他にも 2 つのモデルがあります。速度と精度のバランスをとった Claude 3 Sonnet と回答の精度が高い最上位モデルの Opus が用意されています。いずれも Amazon Bedrock で利用可能です。ただ、Claude 3 の 3 つのモデルは、現時点(2024 年 4 月 19 日)では、東京リージョンでは、まだ利用ができないことに注意が必要です。

オレゴンリージョンを利用

構成図でオレゴンリージョンを囲っている画像
オレゴンリージョンを利用

 「AI 基盤くん」は、先ほどの Lambda や 次に紹介する Dynamo DB も含め、全てのリソースをオレゴンリージョン(us-west-2)で作成しています。
 
 Haiku は現在、以下のキャプチャの AWS のドキュメントの表に記載のとおり、Sonnet と共に、オレゴン以外では、バージニア(us-east-1)、シドニー(ap-southeast-2)、パリ(eu-west-3)でも利用可能となっていますが Claude 3 の最上位モデルの Opus に関しては、現時点(2024 年 4 月 19 日)では、オレゴンリージョンのみ利用可能となっています。Bedrock のモデルはオレゴンリージョンから利用が開始されることが多いようです。

Amazon Bedrock のドキュメント
Claude 3 Opus はオレゴンリージョンのみで利用可能という注意書き

バージニアリージョンの画面。まだ、Claude 3 Opus は存在しない
バージニアリージョンの画面。まだ、Claude 3 Opus は存在しない

 また、以下のキャプチャの Alexa のドキュメント に記載のとおり、Lambda 関数のリージョンも、日本の場合は(地域が極東に該当しますので)、オレゴンが推奨されています。
 DynamoDB 等の Lambda 以外のリソースとの連携との速度のバランスで、他のリージョンに Lambda 関数を置いても構わない、という記載もありますが、Bedrock でのモデルリリースもオレゴンから開始されることが多いようなので、今後のモデル変更のことも考え「AI 基盤くん」では、全てのリソースをオレゴンリージョンに置いています。

Alexa のドキュメント。日本の場合は、Lambda 関数はオレゴンリージョンに置くことが推奨されている
日本の場合は、Lambda 関数はオレゴンリージョンに置くことが推奨されている

気軽にモデルの変更が可能

 「AI 基盤くん」では、Claude 3 Haiku が出る前は、Claude Instant を利用していましたが、Haiku のリリース後、比較的すぐにモデルを変更しました。このように、気軽に新しいモデルに変更したり Claude 以外のモデルにも変更が可能なところも、Amazon Bedrock のよいところだと思います。

Amazon DynamoDB

構成図の Bedrock を赤枠で囲った画像
Amazon DynamoDB

 Amazon DynamoDB は、AWS の NoSQL データベースサービスです。以下の AWS のドキュメントに記載があるとおり、サーバーレスなフルマネージドサービスなので、Lambda や Bedrock と同様、サーバーの運用の心配をする必要がありません。

aws.amazon.com

あらゆる規模で一桁ミリ秒のパフォーマンスを実現する、サーバーレス NoSQL フルマネージドデータベース

 「AI 基盤くん」では、女性の声と男性の声を設定できますが、その設定の保存先に Dynamo DB を利用しています。また、現在は質問の回数制限を設けているため、回数や回数を記録しはじめた日時も記録しています。質問や回答の内容は記録していません。

全て AWS のサーバーレスなフルマネージドサービスを利用

 Lambda もですが、DynamoDB もサーバーレスのフルマネージドサービスです。Alexa スキルに関しては、基本的にインフラの運用をしないで済むように、AWS のサーバーレスサービスを利用するのがベストだと思います。

画面付き Echo 用の Alexa スキルでは、Amazon S3 を利用する

 「AI 基盤くん」は、現時点(2024 年 4 月 19 日)では音声操作のみのスキルとなっているため、Amazon S3 を利用していませんが、画面付き Echo で画像を表示させたい場合は、S3 に画像を置く場合が多いと思います。S3 も運用の必要がない AWS のストレージサービスですので、Alexa のスキル制作に関しては、全て AWS のマネージドサービスで完結することができます。

Amazon Polly

Alexa 側に組み込まれている Amazon Polly

構成図の Polly を赤枠で囲った画像
Amazon Polly

 Amazon Polly は、AWS の音声変換サービスです。テキストから音声データを生成してくれます。構成図を見ていただくとわかるとおり、こちらは、先ほどまでの Lambda などとは違い、AWS のアカウント内では利用していません。Alexa 側で仕組みが用意されており、Lambda 関数のコード内での簡単な指定(SSML)で利用することができます。

Alexa 側の Polly で選べる日本語の声は、スタンダード版の声

 Alexa 側の Polly で選べる日本語の声は、現時点で 2 つです。「AI 基盤くん」は、女性の声と男性の声を設定できますが、女性の声は「Mizuki」で男性の声は「Takumi(スタンダード版)」となっています。

 AWS の方の Amazon Polly で日本語で選べる声は、以下の AWS のドキュメントの表に記載のとおり、4 つあります。
 ニューラル音声版は、スタンダード版より自然で人間のような音声を生成してくれます。AWS のマネジメントコンソールで実際に確認したところ、スタンダード版より自然な印象を受けました。いつか Alexa 側でも使えるようになるといいですね。

docs.aws.amazon.com

Amazon Polly にはニューラル TTS (NTTS) システムがあり、標準音声よりも高品質の音声を生成できます。NTTS システムは、可能な限り最も自然で人間のような text-to-speech 音声を生成します。

AWS で利用可能なニューラル音声版の声

 AWS では「Kazuha」と「Tomoko」が以下のキャプチャの AWS のドキュメントの表のように「ニューラル音声」に対応しています。「Takumi」もニューラル音声版を利用できます。

AWS のドキュメント。AWS では Takumi(ニューラル音声版)、Kazuha、 Tomoko の利用が可能
AWS では Takumi(ニューラル音声版)、Kazuha、 Tomoko の利用が可能

まとめ

 今回は、Amazon Bedrock を利用した Alexa スキル「AI 基盤くん」の裏側で利用している AWS のサービスや構成についてまとめてみましたが、いかがでしたでしょうか。
 
 Alexa の開発者コンソールでの設定以外の部分は、全て AWS のサービスを利用しているので、Alexa スキル作成時の AWS のそれぞれのサービスとの連携はとても簡単です。
 そして、全て AWS のサーバーレスなフルマネージドサービスを利用しているので、Alexa スキルの公開後もインフラの運用を気にしないで済みます。

 また、Amazon Bedrock は、Amazon のモデル以外にもたくさんのモデルが用意されているので、Claude の新しいモデルへの変更や もし、用途が合わないようであれば、Claude 3 以外へのモデルの変更も簡単におこなえます。簡単にいろいろなモデルを試すことができるのが、Amazon Bedrock のいいところだと思います!

 Alexa の管轄は AWS ではなく、Amazon となってはいますが、既に見ていただいたとおり、AWS との連携はバッチリですので、今後 Alexa スキルを作成してみようかな、と思っている方の何かの参考になれば幸いです!

 いや〜、AWS と Amazon Bedrock と Alexa って本当にいいものですね!

坂本 知子(記事一覧)

サーバーワークスのこけしの人(@t_sakam)。2020 APN AWS Top Engineers。