こんにちは、こけしが趣味の坂本(@t_sakam)です。今回は、Amazon Bedrock を利用した Alexa スキル「AI 基盤くん」の裏側で利用している AWS のサービスや構成を確認していきたいと思います。
「AI 基盤くん」の構成は、ほぼ Alexa スキル制作の一般的な構成となっており、Alexa スキル制作界隈ではお馴染みの構成ですが、知らない方もいらっしゃると思いますので、何かの参考になれば幸いです。
具体的に Alexa スキルを一から作成する手順に関しては、「Alexa 虎の巻」シリーズに記載していますので、Alexa のスキル制作に興味がある方は、よろしければ、そちらもご確認ください。今回は AWS 側の構成がどうなっているのかを中心に確認していきます。
AWS Lambda
まず、必ず必要な AWS のサービスは AWS Lambda です。「AI 基盤くん」でも Lambda を利用しています。
Alexa 開発者コンソールと簡単に連携可能
構成図の「Alexa」の箇所は「Alexa 開発者コンソール」を意味していますが、この Alexa 開発者コンソールで、Alexa スキルのバックエンドの処理をする Lambda 関数の ARN を指定します。
EC2 等の Web サーバーを指定することもできますが、Alexa スキルの場合は、以下の Alexa のドキュメントに記載されているとおり Lambda を使うことが一番簡単な方法となっており、推奨されています。
カスタムAlexaスキル用のクラウドベースのサービスを構築する最も簡単な方法は、AWS Lambdaを使用することです。
Lambda は、以下の AWS のドキュメントに記載の通り、サーバーレスでコードを実行できるサービスのため、インフラの運用は必要ありません。イベント駆動型で常時サーバーを起動しておく必要がなく、Alexa スキルが利用された時だけ、処理が実行される仕組みとなっています。
AWS Lambda は、サーバーレスでイベント駆動型のコンピューティングサービスであり、サーバーのプロビジョニングや管理をすることなく、事実上あらゆるタイプのアプリケーションやバックエンドサービスのコードを実行することができます。200 以上の AWS のサービスやサービス型ソフトウェア (SaaS) アプリケーションから Lambda をトリガーすることができ、使用した分だけお支払いいただきます。
また、上記の 公式ドキュメントにも記載のとおり、AWS のサービスから簡単に Lambda を呼び出すことが可能です。以下のようにマネジメントコンソールでトリガーとなる Alexa やそれ以外の AWS のサービスを簡単に指定できます。
Amazon Bedrock
Amazon Bedrock に関しては Lambda と違い「AI 基盤くん」が独自で利用している AWS のサービスになります。Amazon Bedrock は、いま話題の AWS の生成 AI のサービスです。こちらも、以下の AWS のドキュメントにも記載のとおり、Lambda と同様にサーバーレスで利用できるサービスのため、自分でインフラの運用をする必要はありません。
Amazon Bedrock はサーバーレスであるため、インフラストラクチャを管理する必要がありません。また、使い慣れた AWS サービスを使用して、生成 AI 機能をアプリケーションに安全に統合してデプロイできます。
複数用意されているモデルから好きなモデルを選択
以下の画像を見ていただくとわかるとおり、Amazon Bedrock には Amazon の基盤モデルである Titan に限らず、他社のモデルもたくさん用意されており、構築したいサービスに合わせて、好きなモデルを選択することができます。
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 のモデルはオレゴンリージョンから利用が開始されることが多いようです。
また、以下のキャプチャの Alexa のドキュメント に記載のとおり、Lambda 関数のリージョンも、日本の場合は(地域が極東に該当しますので)、オレゴンが推奨されています。
DynamoDB 等の Lambda 以外のリソースとの連携との速度のバランスで、他のリージョンに Lambda 関数を置いても構わない、という記載もありますが、Bedrock でのモデルリリースもオレゴンから開始されることが多いようなので、今後のモデル変更のことも考え「AI 基盤くん」では、全てのリソースをオレゴンリージョンに置いています。
気軽にモデルの変更が可能
「AI 基盤くん」では、Claude 3 Haiku が出る前は、Claude Instant を利用していましたが、Haiku のリリース後、比較的すぐにモデルを変更しました。このように、気軽に新しいモデルに変更したり Claude 以外のモデルにも変更が可能なところも、Amazon Bedrock のよいところだと思います。
Amazon DynamoDB
Amazon DynamoDB は、AWS の NoSQL データベースサービスです。以下の AWS のドキュメントに記載があるとおり、サーバーレスなフルマネージドサービスなので、Lambda や Bedrock と同様、サーバーの運用の心配をする必要がありません。
あらゆる規模で一桁ミリ秒のパフォーマンスを実現する、サーバーレス 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
Amazon Polly は、AWS の音声変換サービスです。テキストから音声データを生成してくれます。構成図を見ていただくとわかるとおり、こちらは、先ほどまでの Lambda などとは違い、AWS のアカウント内では利用していません。Alexa 側で仕組みが用意されており、Lambda 関数のコード内での簡単な指定(SSML)で利用することができます。
Alexa 側の Polly で選べる日本語の声は、スタンダード版の声
Alexa 側の Polly で選べる日本語の声は、現時点で 2 つです。「AI 基盤くん」は、女性の声と男性の声を設定できますが、女性の声は「Mizuki」で男性の声は「Takumi(スタンダード版)」となっています。
AWS の方の Amazon Polly で日本語で選べる声は、以下の AWS のドキュメントの表に記載のとおり、4 つあります。
ニューラル音声版は、スタンダード版より自然で人間のような音声を生成してくれます。AWS のマネジメントコンソールで実際に確認したところ、スタンダード版より自然な印象を受けました。いつか Alexa 側でも使えるようになるといいですね。
Amazon Polly にはニューラル TTS (NTTS) システムがあり、標準音声よりも高品質の音声を生成できます。NTTS システムは、可能な限り最も自然で人間のような text-to-speech 音声を生成します。
AWS で利用可能なニューラル音声版の声
AWS では「Kazuha」と「Tomoko」が以下のキャプチャの AWS のドキュメントの表のように「ニューラル音声」に対応しています。「Takumi」もニューラル音声版を利用できます。
まとめ
今回は、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 って本当にいいものですね!