Amazon Web Services ブログ
Amazon Bedrock と AWS Amplify を使った生成 AI トラベルアシスタントアプリの作成
本記事では、トラベルアシスタントアプリの作成方法について説明します。このアプリは、ユーザーの希望する目的地における人気の観光スポット、地域の体験、隠れた名所などをお勧めすることで、パーソナライズされた体験を提供します。このアプリの構築には、AWS Amplify と Amazon Bedrock を使用します。
AWS Amplify Gen 2 は、バックエンド定義に TypeScript ベースのコードファーストの開発者体験(DX)を採用しています。Gen 2 の DX は、ホスティング、バックエンド、UI ビルド機能を備えた統合された Amplify 開発者体験と、コードファーストのアプローチを提供します。Amplify は、フロントエンド開発者がアプリのデータモデル、ビジネスロジック、認証、認可ルールの全てを TypeScript で表現するだけで、クラウドインフラストラクチャをデプロイできるようにします。Amplify は適切なクラウドリソースを自動的に設定し、基盤となる AWS サービスを手作業で統合する必要性を排除します。
Amazon Bedrock は、主要な AI 企業が提供する高性能な基盤モデル(FM)をフルマネージド型で提供するサービスです。これらの FM は単一のアプリケーションプログラミングインターフェース(API)を通じてアクセス可能で、安全で、プライベートで、責任ある生成 AI アプリケーションを構築するための機能も併せて提供されます。単一の API アクセスにより、異なる FM を柔軟に使用でき、最小限のコード変更で最新のモデルバージョンにアップグレードすることができます。
前提条件
- AWS アカウント(Amplify は AWS 無料枠の対象です)
- Node.js v18.17 以降
- npm v9 以降
- git v2.14.1 以降
- テキストエディタ(このガイドでは VSCode を使用しますが、お好みの IDE を使用可能です)
- Amazon Bedrock での Claude 3 Haiku モデルへのアクセス権
リポジトリのクローン
ステップ 1: AWS Samples のリポジトリに移動し、あなたの GitHub リポジトリにフォークします。
ステップ 2: 以下のコマンドをターミナルで実行して、アプリをクローンします。
ステップ 3: 以下のコマンドをターミナルで実行して、新しくクローンしたリポジトリに VSCode でアクセスします。
VSCode が、次のセクションで説明するバックエンドの詳細を含む Amplify フォルダを含むリポジトリフォルダを開きます。
ステップ 4: 以下のコマンドを実行して、Amplify パッケージを含む必要なパッケージをインストールします。
Amplify バックエンド
完成したアプリ(冒頭の GIF で示したもの)では、ユーザーは旅行に関する質問(例:「12 月にアイルランドに 7 日間行きたい」)を送信することで会話を開始します。コードはクローンしたリポジトリにあります。ここでは、Amplify アプリを Amazon Bedrock と接続するための主要なステップを説明します。
リポジトリには、auth(認証)、data(データ)、functions(関数)リソース用のディレクトリを含む amplify フォルダがあります。
デフォルトでは、amplify/auth/resource.ts
ファイルで設定された認証リソースは、ユーザーのサインアップメカニズムとしてメールを使用するように設定されています。
amplify/data/resource.ts
ファイルでは、文字列を返し、会話全体を含む JSON 文字列引数 conversation
を引数にとる GraphQL クエリ chat
を定義しています。認証は .authorization((allow) => [allow.authenticated()])
を使用して、認証されたユーザーのみがこのクエリにアクセスできるように設定されています。.handler(a.handler.function(personalAssistantFunction))
の行は、このクエリのカスタムハンドラーとして personalAssistantFunction
を設定します。
personalAssistantFunction
Lambda 関数は、amplify/functions/personal-assistant/resource.ts
ファイルで定義・エクスポートされています。ここでは、環境変数 MODEL_ID
を Claude 3 Haiku に設定しています。
amplify/functions/personal-assistant/handler.ts
ファイルには、personalAssistantFunction
ハンドラーの実装が含まれています。ここでは、Bedrock ランタイムクライアントを初期化し、クエリの入力パラメータ conversation
と systemPrompt
定数(応答方法に関するコンテキスト、指示、ガイドラインを Amazon Bedrock への提供するため)を使用して入力オブジェクトを生成し、それを使用して ConverseCommand
を作成し、ランタイムクライアントを使用して Amazon Bedrock に送信します。応答のエラーを確認し、JSON 文字列として返します。
amplify/backend.ts
ファイルでは、addToRolePolicy
メソッドを使用して、personalAssistantFunction
関数のプリンシパルに新しいポリシーを追加します。ポリシーステートメントは、許可されたリソースとアクションを指定します。この場合、リソースは Claude 3 Haiku モデルの AWS ARN(Amazon Resource Name)で、許可されたアクションは bedrock:InvokeModel
です。
アプリを実行すると(次のセクションで説明)、amplify_outputs.json
という名前のファイルが自動的に生成されます。このファイルには API のエンドポイントの詳細が含まれています。src/app/amplify-utils.ts
では、以下のように Amplify クライアントライブラリを初期化・設定します。そして、Amplify バックエンドへのリクエストを容易にするためのデータクライアントを作成します。
src/app/layout.tsx
ファイルでは、アプリのコンテンツを AuthWrapper
コンポーネント(src/app/components/AuthWrapper.tsx
)でラップしています。このコンポーネントは Amplify Authenticator を利用して、ユーザーがサインアップ、サインイン、パスワードリセット、多要素認証(MFA)のためのサインイン確認を行える完全な認証フローを提供します。
アプリは、src/app/page.tsx
ファイルを使用して、AI アシスタントとチャットするためのコンポーネント(src/app/components/Chat.tsx
)をユーザーに提供します。
src/app/components/Chat.tsx
ファイルでは、AI アシスタントとの会話を促進するためのシンプルなチャットインターフェースを作成しています。ユーザーのメッセージを取得するためのフォームを表示し、送信されると、fetchChatResponse
関数を使用してチャットクエリを呼び出します。この際、現在の会話とユーザーの新しいメッセージをパラメータとして渡し、アシスタントの応答を取得して会話を更新します。
アプリの実行
ステップ 1: Amplify は各開発者に個人のクラウドサンドボックス環境を提供し、迅速な構築、テスト、反復のための独立した開発スペースを提供します。クラウドサンドボックス環境を開始するには、新しいターミナルウィンドウを開き、以下のコマンドを実行します。
ステップ 2: 以下のコマンドを実行して、ローカルホストの開発サーバーを起動します。
ステップ 3: アプリのテスト後、Ctrl+c
でサンドボックスセッションを終了できます。サンドボックス環境のすべてのリソースを削除するプロンプトで Y
を選択してください。
アプリのデプロイ
アプリが正しく機能することを確認したら、Amplify でデプロイしてホストしましょう。Amplify は、Git ブランチを使用した本番環境とステージング環境の設定を簡素化する、組み込みの CI/CD を備えたフルマネージド型のホスティングサービスを提供します。Gen 2 では、リポジトリの各 Git ブランチが、Amplify のフルスタックブランチに直接対応します。
ステップ 1: AWS コンソールにサインインし、希望する AWS リージョンを選択します。AWS Amplify コンソールを開き、“Create new app” を選択します。
ステップ 2: “Start building with Amplify“ ページで、“Deploy your app” から GitHub を選択し、“Next“ を選択します。
ステップ 3: プロンプトが表示されたら、GitHub で認証を行います。自動的に Amplify コンソールにリダイレクトされます。アプリのリポジトリとメインブランチを選択し、“Next” を選択します。
ステップ 4: 設定を確認し、“Next” を選択します。
ステップ 5: 最後に、“Save and Deploy” ボタンをクリックしてデプロイプロセスを開始します。
ステップ 6: デプロイプロセスが完了するのを待ち、“Visit deployed URL” ボタンをクリックして Web アプリを開くことができます。
リソースのクリーンアップ
このチュートリアルが終了したら、予期しないコストを防ぐために、下図のように Amplify コンソールからアプリを削除してバックエンドリソースを削除することができます。
まとめ
おめでとうございます!AWS Amplify Gen 2 と Amazon Bedrock を使用して、AI 搭載のトラベルアシスタントアプリの開発に成功しました。さらに、Amplify Hosting を使用して AWS 上にアプリをデプロイしました。Amplify Gen 2 を開始するには、クイックスタートチュートリアルを試してみてください。また、フィードバックや機能リクエストを残すために、コミュニティ Discord に参加することもできます。
本記事は、Creating a Generative AI Travel Assistant App with Amazon Bedrock and AWS Amplify を翻訳したものです。翻訳は Solutions Architect の 都築 が担当しました。
著者: