AWS Amplify AI KitでAIチャットアプリを爆速で作ってみる

こんにちは、エンジニアのyokomachiです。

この記事はGeekFeed Advent Calendar 2024の14日目のエントリとなります。

今回は2024年11月にリリースされたAWS Amplify AI Kitを使用したAIチャットアプリの開発をやってみます。

AWS Amplify launches the full-stack AI kit for Amazon Bedrock – AWS

AWS Amplify AI Kitとは?

概要

AWS Amplify AI Kitは、アプリケーション開発サービスAWS Amplify向けにAI機能を備えたWebアプリケーションを迅速に開発するために提供されるツールキットのことです。

Amplify Gen2のデータソースにAmazon Bedrockから提供されるLLMを設定することで、AIチャット機能や画像生成機能などの生成AI機能を簡単にWebアプリケーションに統合することができるようになります。

アーキテクチャ

公式のドキュメントを見るとAI Kitで利用するアーキテクチャについて説明されています。

AI KitではAmplifyのバックエンドとして、以下2種類のルートと呼ばれるAPIエンドポイントのようなものを構築することで、認証やルートの選択、LLMへのインプット・アウトプット、LLMがアクセスできるデータなどを定義できるとのことです。

  • Conversation(会話):マルチターンの非同期API。会話履歴はDynamoDBに保存される
  • Generation(生成):単一の同期API。構造化データの精製などを行うAppSyncクエリとして提供される

今回はこのうちConversationに関して実際にデモを構築してみます。

実際に構築されるバックエンドの要素はこの後のデモ構築後に見ていきましょう。

デモアプリの構築

先に完成後の画面をお見せするとこんな感じになっています。

 

また、今回作成したデモアプリのソースコードについては以下のリポジトリをご参照ください

https://github.com/n-yokomachi/amplify_ai_kit_tutorial

 

構成情報

今回使用するライブラリなどのバージョンは以下の通りです。

  • Windows 11 Home 23H2
  • Node.js v23.0.0
  • npm 10.9.0

バックエンドの構築

まずはバックエンドの構築を行います。

Amplify Gen2のCDKによってバックエンドをデプロイします。

Bedrockのモデルアクセス有効化

最初に、今回利用するLLMのモデルアクセスを有効化しておきます。

Amazon BedrockのAWSコンソール上でアクセスリクエストを出します。

今回はAnthropic Claude 3.5 Sonnet(ap-northeast-1)を使用します。

 

ちなみに特に指定しない場合、Amplifyがデプロイされるリージョンのモデルが使われるようです

Models – React – AWS Amplify Gen 2 Documentation

Your Amplify project must be deployed to a region where the foundation model you specify is available. See Bedrock model support for the supported regions per model.

Amplify backendの構築・Sandboxの起動

続いてローカルPCからAmplify backendの構築を行います。

Manual installation – React – AWS Amplify Gen 2 Documentation

上のリンクの手順に沿って、今回プロジェクトを作成するディレクトリで以下のコマンドを実行します。

コマンドが走り切ると以下のようなリソースが作成されます。

Amplify Gen2では開発者ごとにバックエンドのサンドボックス環境を構築することができるので、

以下のコマンドでそのサンドボックス環境をデプロイします。

AWS CLIの認証を個別のプロファイル名で行っている場合はprofileオプションで指定します。

コマンドの初回実行時は↓のようにブラウザの画面が起動し、デプロイ前のbootstrapの確認が行われます。

 

bootstrap中・・・

 

bootstrapの完了後にCloudFormationのコンソールを見てみると、

サンドボックス環境のCDKToolkitがデプロイされていることがわかります。

 

bootstrapが完了したので、もう一度サンドボックスのデプロイコマンドを実行します。

すると今度はデプロイそのものが走ってサンドボックスが構築されるとともに、ターミナルでファイルの変更がウォッチされます。

バックエンドのスタックが変更されるたびにサンドボックス環境にリアルタイムに反映されるようになります。

 

AIバックエンドの構築

バックエンドの基礎ができたので続いてAI機能のバックエンドを構築します。

バックエンドのデータ定義を行っているファイルamplify/data/resource.tsを以下のように記述します。

フロントエンドの構築

続いてフロントエンドを構築します

プロジェクトの作成&Amplify クライアントライブラリのインストール

フロントエンドプロジェクトはVite + Reactで作成します

ここで1個ミスしました。

何も考えずにReactプロジェクト作成していたら、先に作成していたAmplify Backendのpackage.jsonを上書きしてしまいました。

以下のコマンドで再度マニュアルインストールします。

バックエンドとの接続

Amplify Backendと接続するための設定を読み込むために以下のコードをsrc/main.tsxに追記します

Conversationフック

フロントエンドで利用するAI機能のフックをエクスポートするclient.tsファイルを作成します。

今回はConversationの機能だけ試してみたいと思うので、使うフックはuseAIConversationとなります。

最後にsrc/App.tsxにAI KitのUIコンポーネントを記述します。

デモ

以上で構築は完了です。

ローカルでビルドして動きを確認してみます。

最初はこんな感じのサインイン/サインアップ画面が表示されます。

 

メールアドレスでサインアップをすると、以下のようなチャット画面が表示されます。

 

インプットを送ると、ストリーミング形式でニョロニョロと回答を返してくれます。

このストリーミング形式で回答を取得する処理については以下の記事が参考になります。

Build fullstack AI apps in minutes with the new Amplify AI Kit | Front-End Web & Mobile

Amplify AI Kitの黒魔術から学ぶ、Bedrock 生成AIアプリの実装アイディア

バックエンドのリソース確認

今回のAmplify AI Kitのサンドボックスデプロイで作成されたリソースをざっくり確認してみましょう

CloudFormation

CloudFormationには、Amplify Backendで定義したauth, dataごとにスタックが作成されていることがわかります。

 

Auth系のリソース

今回はUserPoolによる認証を設定したため、CognitoのUserPoolが作成されています。

こんな形で先ほど作成したユーザーが記録されていることが確認できます。

 

Data系のリソース

AppSync APIが作成されています。

モデルとやり取りするLambda、会話記録を保存するDynamoDBがデータソースに設定されています。

 

お片付け

最後にサンドボックス環境のお片づけをして終わりにしましょう

おわりに

今回はAmplify AI Kitのうち、特にConversation機能に関して実際にデモを環境して確認してみました。

Amplify Gen2自体が初めて触ったのでなにもかも新しい感触でしたが、Tool Kitの形でフックやUIコンポーネントなどが用意されていたおかげですぐにデモアプリの構築ができ、WebアプリとBedrockの連携について手早く確認することができました。

とはいえ、実践的にWebアプリを開発するためにはまだまだAmplify Gen2やAI KitのToolへの理解が足りていないので、もう少し規模の大きいアプリケーションの開発をいずれしてみたいと感じました。

参考

AI kit – AWS Amplify Gen 2 Documentation

Build fullstack AI apps in minutes with the new Amplify AI Kit | Front-End Web & Mobile

[アップデート] AWS Amplify AI kitが公開! AI 機能を備えた Web アプリを迅速に構築できるようになりました | DevelopersIO

この記事が気に入ったら
いいね ! しよう

Twitter で

【採用情報】一緒に働く仲間を募集しています

採用情報
ページトップへ