
始める前に
- ラボでは、Google Cloud プロジェクトとリソースを一定の時間利用します
- ラボには時間制限があり、一時停止機能はありません。ラボを終了した場合は、最初からやり直す必要があります。
- 画面左上の [ラボを開始] をクリックして開始します
Create a Vertex AI Search data store
/ 20
Create a Vertex AI Search app
/ 20
Create a Backend app
/ 20
Deploy the Reasoning Engine agent
/ 20
Configure the Firebase project and Flutter app
/ 20
このラボでは、AI エージェントを Flutter アプリに統合します。Flutter はクライアント アプリ フレームワークとして使用され、Vertex AI Search はベクトル DB として使用されます。また、Reasoning Engine は、Vertex AI で LangChain を使用してエージェントを構築およびデプロイするために使用されます。エージェントは、高度な機能を備えた大規模言語モデル(LLM)ファミリーである Gemini を使用して、テキストと画像のプロンプトに対する AI 回答を生成します。
このラボには、Flutter アプリを実行するために必要な Flutter と Dart の拡張機能に加え、code-server を介して IDE として VSCode が事前にプロビジョニングされています。さらに、このラボには fwr も含まれています。これは、ブラウザを使用してアクセスするウェブ アプリケーションとして Flutter アプリを提供するために使用するツールです。
このラボは、クラウド アプリケーションの開発にはあまり詳しくない、アプリケーションの構築に携わるあらゆるレベルの開発者を対象としています。Python を利用した経験があり、Flutter フレームワークに慣れているほうが内容を理解しやすいでしょう。このラボのタスクを実行する際に Flutter の知識は必要ありません。ただし、Flutter アプリのコードの一部を確認する、アプリの機能をテストするといった作業は行います。
このラボでは、次のタスクを行います。
Google Cloud コンソールで AI Applications を使用して検索データストアと検索アプリを作成する。
Vertex AI Workbench を使用して Reasoning Engine エージェントをデプロイする。
Vertex AI Search と Reasoning Engine エージェントが統合された Python アプリを使用する。
アプリを Cloud Run にデプロイし、Flutter アプリのバックエンドとして使用する。
Firebase プロジェクトを設定し、Flutter アプリに接続する。
このラボで使用する各種コンポーネントの概要は次のとおりです。
各ラボでは、新しい Google Cloud プロジェクトとリソースセットを一定時間無料で利用できます。
Qwiklabs にシークレット ウィンドウでログインします。
ラボのアクセス時間(例: 1:15:00
)に注意し、時間内に完了できるようにしてください。
一時停止機能はありません。必要な場合はやり直せますが、最初からになります。
準備ができたら、[ラボを開始] をクリックします。
ラボの認証情報(ユーザー名とパスワード)をメモしておきます。この情報は、Google Cloud Console にログインする際に使用します。
[Google Console を開く] をクリックします。
[別のアカウントを使用] をクリックし、このラボの認証情報をコピーしてプロンプトに貼り付けます。
他の認証情報を使用すると、エラーが発生したり、料金の請求が発生したりします。
利用規約に同意し、再設定用のリソースページをスキップします。
このタスクでは、Google Cloud コンソールで AI Applications を使用して検索データストアと検索アプリを作成することにより、Flutter アプリに検索機能を実装します。
Cloud コンソールで、[すべてのプロダクトを表示] をクリックします。[すべてのプロダクト] ページで [AI] セクションまでスクロールし、[AI Applications] をクリックします。
[続行して API を有効化] をクリックします。
左側のペインで [データストア] をクリックし、[データストア] ページで [データストアを作成] をクリックします。
このページでは、検索結果に使用するデータソースを構成します。このラボには、Google Merchandise Store のアイテムに関するデータを含む .csv ファイルが格納された Cloud Storage バケットが事前にプロビジョニングされています。
データソースとして Cloud Storage を選択するには、[Cloud Storage] で [選択] をクリックします。
インポートするデータの種類として、[チャット アプリケーション用のよくある質問の構造化データ(CSV)] を選択します。
インポートするフォルダまたはファイルを選択するには、[ファイル] をクリックします。
CSV ファイルの Cloud Storage URL を指定するには、[参照] をクリックします。
Cloud Storage バケット
goog_merch.csv
ファイルを選択し、[選択] をクリックします。
フォルダの gs:// URI が取り込まれます。
[続行] をクリックします。
データストア名に「goog-merch-ds」と入力します。
[作成] をクリックします。
データストアが作成され、CSV ファイルからのデータの取り込みが開始されます。
[データストア] ページで、新しく作成したデータストアの名前をクリックします。
[ドキュメント] タブに、インポートしたドキュメントのリストが表示されます。ドキュメントに関連付けられたデータを表示するには、[ドキュメントを表示] をクリックします。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
検索データストアを使用するには、Vertex AI Agent Builder で検索アプリに接続します。
Cloud コンソールで [AI Applications] をクリックし、[アプリ] をクリックします。
[アプリを作成] をクリックします。
[アプリを作成する] ページの [ウェブサイト検索] で [作成] をクリックします。
[アプリの構成の検索] ページで、以下の設定を使用してウェブサイト検索アプリを構成します。残りの設定は、デフォルトのままにします。
プロパティ | 値(入力または選択) |
---|---|
Enterprise エディションの機能 | 無効にする |
アプリ名 | gms-search-app |
会社名または組織名 | gms-company |
アプリのロケーション | global(グローバル) |
[続行] をクリックします。
既存のデータストアのリストが表示されます。前のサブタスクで作成した goog_merch_ds データストアを選択します。
検索アプリを作成するには、[作成] をクリックします。
検索アプリが作成され、データストアがアプリに接続されます。
検索アプリをテストするには、AI Applications のナビゲーション メニューで [プレビュー] をクリックします。
[検索] フィールドに「dino」と入力します。
データストアにインポートされたドキュメントから、関連する検索結果のリストが表示されます。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
Flutter アプリのバックエンドは、Google Cloud で Cloud Run サービスとして実行されます。バックエンド サービスは、商品ショップのデータから検索レスポンスを生成するために、前の手順で作成した検索アプリと統合されます。バックエンドは、Reasoning Engine エージェントとも統合され、Gemini にアクセスすることで、Flutter アプリからのクエリに応答して生成 AI コンテンツを取得します。
このタスクでは、バックエンド Python アプリをビルドして Cloud Run にデプロイします。
このラボ用に VSCode ベースの IDE が事前プロビジョニングされています。IDE にアクセスするには、ラボの Qwiklabs 認証情報パネルから IDE サービス URL をコピーして、新しいシークレット モード ブラウザ ウィンドウに貼り付けます。
IDE でターミナルを開きます。IDE のナビゲーション メニュー()で、[ターミナル] > [新しいターミナル] をクリックします。
バックエンド アプリの初期バージョンと関連ファイルは、ラボ用に事前プロビジョニングされています。バックエンド アプリの初期バージョンのフォルダとその内容を Cloud Storage からコピーします。
フォルダの内容を一覧表示するには、IDE のターミナル ウィンドウで次のコマンドを実行します。
ag-web/app
フォルダには、アプリケーションのソースコードと、バックエンド アプリをビルドして Cloud Run にデプロイするために必要な他のファイルが含まれています。
アプリの PROJECT_ID、LOCATION、STAGING_BUCKET の構成を設定します。
先ほど作成した検索データストアを使用するようバックエンド アプリを構成します。
次のコマンドで、文字列 {YOUR_SEARCH_DATA_STORE_ID} を検索データストア ID の値に置き換えます。
sed
コマンドの中括弧は必ず削除してください。
IDE でコードを表示するには、IDE のナビゲーション メニューで をクリックし、[フォルダを開く] をクリックします。
リストから IDE-DEV/ag-web/
フォルダを選択し、[OK] をクリックします。
コードの作成者を信頼する場合、[はい、この作成者を信用します] をクリックします。
[エクスプローラ] ペインで、app
フォルダを開き、app.py
をクリックして、ファイルをエディタで開きます。
バックエンド アプリのコードにより実行される処理は、次のとおりです。
search_gms()
関数は、discoveryengine.googleapis.com
API データストア エンドポイントを使用して検索リクエストを開始します。先ほど作成したデータストア ID が URL で使用されます。flask
を使用します。/
エンドポイントは、アプリが正常に読み込まれたことを確認するために使用されるデフォルトのページです。一方、/ask_gms
エンドポイントは、Vertex AI Search を使用する search_gms()
関数を呼び出します。デプロイ スクリプトを使用すると、バックエンド アプリをビルドして Cloud Run にデプロイできます。
IDE でターミナル ウィンドウを開き、バックエンド アプリのフォルダに移動します。
gcloud CLI から Google Cloud に対して認証を行います。
続行するには、「Y」と入力します
ログインフローを立ち上げるには、Ctrl キー(Windows および Linux の場合)または Command キー(macOS の場合)を押して、ターミナルのリンクをクリックします。
外部ウェブサイトを開くかどうかを確認するメッセージが表示されたら、[開く] をクリックします。
ラボ受講者用のメールアドレスをクリックします。
続行するかどうかを確認するメッセージが表示されたら、[続行] をクリックします。
Google Cloud SDK に Google アカウントへのアクセスを許可し、利用規約に同意するには、[許可] をクリックします。
確認コードがブラウザタブに表示されます。
[コピー] をクリックします。
IDE のターミナル ウィンドウに戻り、[認証コードを入力してください] と表示されている場所にコードを貼り付けて、Enter キーを押します。
これで Google Cloud にログインできました。
deploy.sh
スクリプトを実行可能にし、スクリプトを実行して、指定した Cloud Run リージョンにアプリをデプロイします。
アプリのビルドと Cloud Run へのデプロイが正常に完了すると、スクリプトの出力の末尾にアプリのエンドポイント URL が表示されます。この URL は、スクリプトで実行された gcloud run deploy
コマンドによって生成されたものです。
アプリの機能は、そのアプリの Cloud Run エンドポイントにアクセスしてテストします。
前の手順で生成したアプリのエンドポイント URL をコピーし、新しいブラウザタブでその URL に移動します。
アプリが読み込まれると、ホームページに [Welcome to the ag-web backend app] と表示されます。
ブラウザの URL バーで、次のパスを URL の末尾に追加します。
アプリで先ほど作成した検索データストアからの結果が返されることを確認します。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
フロントエンド Flutter アプリは Vertex AI for Firebase Dart SDK を使用して Gemini API を呼び出します。この SDK は、Dart および Flutter アプリの公式パッケージ リポジトリである pub.dev から firebase_vertexai パッケージとして入手できます。
Firebase は、Google が提供するバックエンド アプリ開発プラットフォームであり、Android、iOS など、さまざまなプラットフォーム向けのサービスが用意されています。
このタスクでは、Firebase を設定して Firebase CLI にログインします。後で、Flutter アプリを Firebase に接続します。
SDK を使用するには、まず Firebase プロジェクトを設定します。
シークレット ウィンドウ タブで、https://console.firebase.google.com を指定して Firebase コンソールにアクセスします。
[プロジェクトを作成] をクリックします。
ラボの既存の Google Cloud プロジェクトに Firebase を追加するには、ページの下部にある [Google Cloud プロジェクトに Firebase を追加する] をクリックします。
[Google Cloud プロジェクトを選択する] をクリックし、リストからラボ プロジェクトを選択します。
利用規約に同意し、[続行] をクリックします。
デフォルトの料金プランを使用するには、[プランを確認] をクリックします。
[続行] をクリックします。
このプロジェクトの Google アナリティクスを無効にしてから、[Firebase を追加] をクリックします。
Firebase プロジェクトの準備ができるまで待ち、[続行] をクリックします。
これで、ラボの Google Cloud プロジェクトで Firebase を使用できるようになりました。
IDE のターミナル ウィンドウで、Firebase CLI にログインします。
CLI とエミュレータの報告情報の収集を Firebase に許可するには、Y と入力して Enter キーを押します。
セッション ID をメモし、手順に沿ってログインフローを開始します。Ctrl キー(Windows および Linux の場合)または Command キー(macOS の場合)を押しながら、ターミナル内の URL をクリックします。
外部ウェブサイトを開くかどうかを確認するメッセージが表示されたら、[開く] をクリックします。
ラボ受講者用のメール ID をクリックします。
[続行] をクリックします。
関連する権限を Firebase CLI に付与するには、[許可] をクリックします。
[はい、今このコマンドを実行しました] をクリックします。
セッション ID を確認して、[はい、これは私のセッション ID です] をクリックします。
認証コードをコピーするには、[コピー] をクリックします。
IDE のターミナル ウィンドウで、求められた場所に認証コードを貼り付けて、Enter キーを押します。
これで Firebase CLI にログインできました。
AI エージェントは、目標を達成するために、大規模言語モデル(LLM)の機能を利用して推論を行い、外部ツールとのオーケストレーションを行うアプリケーションです。Vertex AI Agent Builder は、AI エージェントを信頼できるデータソースに接続して構築するのに役立つ、Google のプロダクトとツールのスイートです。
Vertex AI Reasoning Engine(LangChain on Vertex AI とも呼ばれます)は、Vertex AI Agent Builder を使用して推論エージェントを構築およびデプロイするのに役立ちます。LangChain は、チャットボットや RAG システムの構築に使用される人気の OSS ツールです。
Reasoning Engine では、デベロッパーが関数呼び出しを使用して、LLM(Gemini)からの出力を Python 関数にマッピングできます。Reasoning Engine は、Vertex AI に用意された Gemini モデル用の Python SDK と緊密に統合されており、LangChain や他の Python フレームワークと互換性があります。
このタスクでは、Vertex AI Workbench と Jupyter ノートブックを使用し、Python 関数を備えた Reasoning Engine エージェントをデプロイします。このエージェントは、このラボの次のタスクにおいて生成 AI バックエンド アプリケーションで使用します。
Vertex AI Workbench は、データ サイエンスと ML のワークフロー全体に対応する Jupyter ノートブックベースの開発環境です。Vertex AI や他の Google Cloud サービスを Vertex AI Workbench インスタンスの Jupyter ノートブック内から操作できます。たとえば、Vertex AI Workbench では、BigQuery と Cloud Storage とのインテグレーションを使用して、Jupyter ノートブック内からデータにアクセスして探索できます。
Vertex AI Workbench インスタンスには、ディープ ラーニング パッケージのスイート(TensorFlow と PyTorch のフレームワークへの対応を含む)がプリインストールされています。
Vertex AI Workbench ノートブックは、Google Cloud で ML モデルを開発およびデプロイするための柔軟でスケーラブルなソリューションです。
Workbench インスタンスを作成するには、Google Cloud コンソールでナビゲーション メニュー()をクリックし、[Vertex AI] > [Workbench] を選択します。
Cloud コンソールにプロンプトが表示されたら、[Notebooks API] をクリックして有効にします。
[インスタンス] タブで [インスタンス] が選択されていることを確認し、[新規作成] をクリックします。
[新しいインスタンス] ページで、[名前] に「my-instance」と入力します。
残りの設定はデフォルトのままにして、[作成] をクリックします。
新しいインスタンスがインスタンス セクションでスピンアップされます。インスタンスが作成されるまで待ってから次の手順に進みます。
インスタンスの準備ができたら、[Jupyterlab を開く] をクリックします。
Python 3 Jupyter ノートブックを起動するには、[Python 3] ノートブックをクリックします。
このラボには、Reasoning Engine エージェントをビルドおよびデプロイするノートブックが事前プロビジョニングされています。
ノートブックを JupyterLab インスタンスにコピーするには、新しいノートブックの最初のセルに次のコードをコピーします。
セルを選択し、セルメニューの [実行] をクリックして実行します。
このコマンドは、Cloud Storage から JupyterLab インスタンスにノートブックをコピーします。コマンドが完了すると、ノートブック ファイルが最上位のルートフォルダに表示されます。
ノートブックを開くには、フォルダリストでノートブック ファイルをダブルクリックします。ノートブックのコンテンツが新しいタブで開きます。
ノートブックのすべてのコードセルを最初から順番に実行します。セルを実行するには、セル内の任意の場所をクリックして選択し、セルメニューまたはノートブックの上部メニューで [実行] をクリックします。
a. [CELL INSTR] 現在のランタイムを再起動する
プロンプトが表示されたら、[カーネルを再起動します] ダイアログで [OK] をクリックします。
b. [CELL INSTR] Google Cloud プロジェクト情報を設定し、Vertex AI SDK を初期化する:
このセルを実行して Vertex AI SDK を初期化する前に、ラボの project_id、ロケーション、ステージング バケットの構成値を更新します。
サンプル構成設定で更新されたセル:
c. [CELL INSTR] Vertex AI Search のツール関数を定義する:
このセルを実行する前に、GOOGLE_SHOP_VERTEXAI_SEARCH_URL の値を、バックエンド アプリの Cloud Run エンドポイント URL に置き換えます。
エンドポイント URL を取得するには、Cloud コンソールで Cloud Run に移動し、バックエンド アプリの名前である ag-web をクリックします。エンドポイント URL の値をコピーして、セル内の値と置き換えます。
バックエンド アプリのサンプル Cloud Run エンドポイント URL で更新されたセル:
セル「エージェントを Reasoning Engine ランタイムにデプロイする」を実行したら、コマンドが完了して Reasoning Engine エージェントが作成されるまで待ちます。次に、Reasoning Engine ID をコピーします。
この ID は、次のタスクでバックエンド アプリを構成して再デプロイする際に使用します。
Reasoning Engine エージェントが正常に動作することをテストするには、次の 2 つのセルを実行し、出力を確認します。
Reasoning Engine エージェントは、クエリ入力と Gemini モデルからの出力に基づいて、Wikipedia または Vertex AI Search データストアを正常に呼び出しました。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
バックエンド アプリを拡張し、前のタスクでデプロイした Reasoning Engine エージェントを呼び出すようにしましょう。
バックエンド アプリの最初のバージョンでは、Vertex AI Search から直接結果を取得するだけでした。新しいバージョンでは、アプリが Reasoning Engine エージェントを呼び出し、Gemini からの出力とエージェントのツールを使用して、入力プロンプトに基づいて Vertex AI Search または Wikipedia から回答を生成するようにします。
このタスクでは、バックエンド アプリのコードを更新し、リクエスト クエリで Reasoning Engine エージェントを呼び出してエージェントの回答を返すエントリ ポイントを追加します。
IDE のターミナル ウィンドウで、次のコマンドを実行して、app.py
ファイルに新しいエントリ ポイントコードを追加します。
先ほど作成した Reasoning Engine エージェントを使用するようバックエンド アプリを構成します。
次のコマンドの文字列 {YOUR_REASONING_ENGINE_ID} を、前のタスクでノートブック セルからコピーした Reasoning Engine ID の値に置き換え、IDE のターミナル ウィンドウで次のコマンドを実行します。
sed
コマンドの中括弧は必ず削除してください。
IDE でコードを表示するには、IDE のナビゲーション メニューで をクリックし、IDE-DEV/ag-web/app/app.py
ファイルを選択します。
拡張バージョンのバックエンド アプリで、次の処理が行われます。
REASONING_ENGINE_ID
を使用して、Reasoning Engine ランタイムから remote_agent のハンドルが取得されます。/ask_gemini
エンドポイントが定義されます。query
パラメータをリクエストから Reasoning Engine(remote_agent)に渡し、エージェントからの回答を返します。バックエンド アプリのフォルダに移動します。
スクリプトを実行し、指定した Cloud Run リージョンにアプリを再デプロイします。
アプリの機能は、そのアプリの Cloud Run エンドポイントにアクセスしてテストします。
前の手順で生成したアプリのエンドポイント URL をコピーし、新しいブラウザタブでその URL に移動します。
アプリが読み込まれると、ホームページに [Welcome to the ag-web backend app] と表示されます。
ブラウザの URL バーで、次のパスを URL の末尾に追加します。
アプリは、エージェントが先ほど作成した Vertex AI Search データストアから取得した結果で応答します。
ブラウザの URL バーで、パスを以下に置き換えます。
アプリは、エージェントがノートブックで構成した Wikipedia API から取得した結果で応答します。
バックエンド アプリ、Vertex AI Search コンポーネント、Reasoning Engine エージェントを開発してデプロイしたので、Flutter フロントエンドの設計と構築を始めることができます。
Flutter アプリでは、アプリにアップロードした写真に関する詳細情報をユーザーが確認できます。このアプリは Gemini と統合されており、写真に関する回答を生成します。また、AI エージェントを使用することにより、チャット インターフェースで回答を提供します。
フロントエンド アプリを開発する前に、Gemini 2.0 Flash モデルから返される回答の構造を定義する必要があります。このモデルは、このラボで先ほどデプロイした AI エージェントによって使用されます。
このタスクでは、Gemini 2.0 Flash モデルにプロンプトを送信し、モデルの回答を JSON 形式で表示します。
Gemini 2.0 Flash は、Cloud コンソールの Vertex AI Studio で利用できます。Vertex AI Studio にアクセスするには、ナビゲーション メニュー()をクリックし、[Vertex AI] > [プロンプトを作成](Vertex AI Studio の下)を選択します。
Vertex AI Studio の使用に必要な API を有効にするには、[同意して続行] をクリックします。
[プロンプト] で [メディアを挿入] をクリックし、[Cloud Storage からインポート] を選択します。
ラボバケット
画像ファイル fallingwater.jpg を選択し、[選択] をクリックします。
画像がプロンプト ボックスにアップロードされます。
モデルにプロンプトで指示するには、画像の下にあるプロンプト ボックスに「これは何ですか?」と入力し、[送信]()をクリックします。
モデルが、画像内のオブジェクトを正しく説明する簡潔な回答を生成します。
モデルから詳細情報を JSON 形式で取得するには、テキスト プロンプトを変更します。
[送信]()をクリックします。
モデルによって生成された JSON レスポンスを表示します。
これで、プロンプトとモデルの回答が JSON 形式で得られ、Flutter アプリのビルドに使用できます。
モデルから返されるデータの構造が決まったので、フロントエンド アプリを構築することができます。
Flutter は、オープンソースのマルチプラットフォーム アプリ開発フレームワークです。Android、iOS、web、macOS、Windows、Linux で動作する 1 つのコードベースを作成できます。Flutter アプリは、Dart プログラミング言語で開発されています。
このラボでは、Flutter アプリをウェブ アプリケーションとしてデプロイし、ブラウザを使用してアクセスできるようにするため、ターゲット プラットフォームとして web を使用します。
このタスクでは、Flutter アプリのコードを確認し、アプリをウェブ アプリケーションとしてビルドおよび実行します。
このアプリの機能の一つとして、ユーザーが観光名所の写真をアップロードし、Gemini にクエリを実行してその写真に関する情報を取得する機能があります。このラボでは、Flutter アプリは開発され、Cloud Storage で利用できるようになっています。
IDE のターミナルで、Flutter アプリのコードをダウンロードします。
アプリ プロジェクトの依存関係を取得するには、IDE のターミナル ウィンドウで次のコマンドを実行します。
IDE でコードを表示するには、そのナビゲーション メニュー()で [File] をクリックし、[Open Folder] を選択します。
リストから /home/ide-dev/app/
を選択し、[OK] をクリックします。
フォルダ内のファイルの作成者を信頼するには、[はい、この作成者を信用します] をクリックします。
app
フォルダの内容の概要は次のとおりです。
フォルダ / ファイル | 説明 |
---|---|
app | Flutter アプリを構成するサブフォルダとファイルが格納されたプロジェクトのルートフォルダ。 |
android/ios/linux/macos/web/windows | サポートされている各プラットフォームで Flutter アプリを実行するために必要なプラットフォーム固有のファイルが保存されています。 |
lib | 機能、ルーティング、データモデル、ユーザー インターフェースを含む、アプリケーションの中核となる Dart ファイルが保存されています。 |
test | アプリのウィジェットをテストするために使用される Dart テストが保存されています。 |
pubspec.yaml | アプリの依存関係、Flutter のバージョン、他の構成設定が保存されています。 |
analysis_options.yaml | アプリの静的解析の構成設定が保存されています。 |
これらのフォルダにあるファイルの一部を見てみましょう。
[エクスプローラ] メニューで /app/lib/models
フォルダをクリックし、metadata.dart
ファイルをクリックして開きます。
metadata.dart
ファイルには、Flutter アプリで使用されるデータモデルが保存されています。
メタデータ オブジェクトの属性は、Gemini API からの回答で返される JSON 属性にマッピングされます。fromJson
メソッドは、呼び出されたときにオブジェクト属性を初期化します。
[エクスプローラ] メニューで、/app/lib/main.dart
ファイルをクリックして開きます。
これは Flutter アプリのアプリケーション エントリ ポイントです。このファイル内のコードは、初期化タスクの実行後、マテリアル コンポーネントを使用してアプリの UI をビルドし、アプリのタイトル、テーマ、ルーティング構成を設定します。
アプリのルーティング構成を表示するには、[エクスプローラ] メニューで /app/lib/functionality/routing.dart
ファイルをクリックして開きます。
このファイルのコードは、アプリの /
、/chat
、/settings
のルートを定義します。
Flutter では、アプリのビルドに使用される宣言型クラスであるウィジェットというコンセプトが使用されます。Flutter では、ウィジェットを構成してより複雑なウィジェットをビルドし、ウィジェットツリーを形成することでレイアウトを作成します。Flutter での UI のビルドについて詳しくは、こちらのドキュメントをご覧ください。
アプリの UI 画面と機能の一部を担うコードを見てみましょう。[エクスプローラ] メニューで、/app/lib/ui/screens/quick_id.dart
ファイルをクリックして開きます。
このファイルには、アプリのウィジェットをビルドするクラスが保存されています。アプリのメインページをビルドするクラス GenerateMetadataScreen
が含まれており、routing.dart
ファイルで定義された /
パスから呼び出されます。この UI では、ユーザーはパソコンやモバイル デバイスから画像をアップロードしたり、デバイスのカメラで写真を撮影したりすることができます。
アプリで使用される他の UI 画面は、設定とチャットページ用であり、app/lib/ui/screens/
フォルダの settings.dart
ファイルと chat.dart
ファイルに実装されています。
アプリの初期化時、アプリにより使用される Gemini 生成 AI モデルのインスタンスを取得するために Vertex AI for Firebase Dart SDK が使用されます。これは _GenerateMetadataScreenState
クラスで実装されています。
ユーザーが画像を選択すると、アプリは画像とテキスト プロンプトを使用して Vertex AI Gemini API を呼び出します。使用されるテキスト プロンプトは、前述のタスクで Gemini 2.0 Flash モデルをテスト運用したときにテストしたものと同じです。
_sendVertexMessage()
メソッドには、プロンプトを送信するコードが含まれています。メソッドのコードの一部を以下に示します。
モデルから生成される JSON の回答はデコードされ、name
、description
、suggestedQuestions
が抽出されます。抽出された内容はローカルに保存され、アプリ UI に表示されます。
app
ルート プロジェクト フォルダに移動し、flutterfire_cli パッケージを有効にします。
Flutter アプリを Firebase に登録するには、次のコマンドを実行します。
コマンドを実行すると、firebase_options.dart
構成ファイルが Flutter プロジェクトの lib
フォルダに追加されます。
サポートされるプラットフォームをアプリ用に構成するには、Space キーを押して、web 以外のすべてのプラットフォームの選択を解除します。矢印キーを使用してプラットフォームをスクロールします。Enter キーを押します。
Flutter ウェブアプリが登録されて、Firebase で使用できるようになりました。
Flutter アプリにはチャット機能があり、ユーザーがアプリにアップロードした画像の詳細情報を確認したり、より最新の情報を持っている可能性のある他の外部データソースからの情報をリクエストしたりできます。そのためには、Gemini モデルをそれらのデータソースに接続(ground
)する方法が必要です。
この機能を実装するため、Flutter アプリは、先ほどデプロイした Reasoning Engine エージェントと統合されます。統合は、ビルドして Cloud Run にデプロイしたバックエンド アプリのエンドポイントに Flutter アプリを接続することにより実現します。
まず、バックエンド アプリの Cloud Run エンドポイントのホスト名を取得し、その値を環境変数に格納します。IDE のターミナル ウィンドウで、次のコマンドを実行します。
Flutter アプリの場合、バックエンド アプリのエンドポイントは ~/app/lib/config.dart
ファイルで構成されています。ファイル内の構成エントリを更新します。
変更を確認するには、IDE の [エクスプローラ] メニューで IDE-DEV/app/lib/config.dart
ファイルをクリックして開きます。以下のサンプルに従って、cloudRunHost
構成エントリの値が更新されたことを確認します。
チャット機能を実装する Flutter アプリのコードを見てみましょう。
IDE の [エクスプローラ] メニューで、/app/lib/ui/screens/chat.dart
ファイルをクリックして開きます。
ChatPage
クラスは、UI のチャットページ用の Flutter ウィジェットをビルドします。このページは、[詳細を表示] ボタンを押すと UI に表示されます。
チャット UI をビルドするため、このアプリでは flutter_chat_ui_package を使用します。これで、カスタマイズ可能なチャットのボイラープレート コードのほとんどが実装されます。build()
メソッドは、Chat
クラスを使用してウィジェットをビルドします。
listBottomWidget
は、前の Gemini 呼び出しからの回答で返される質問の候補のリストを表示するために使用され、ユーザーはチャット メッセージとして質問を選択できます。
_handleSendPressed()
コールバック メソッドは、ユーザーがチャット ウィンドウで [送信] をクリックしたときに呼び出されます。このメソッドは、新しいメッセージを構築して、そのメッセージをメッセージ リストに追加し、askAgent()
メソッドを使用してメッセージをバックエンドに送信します。
コードをスクロールして、askAgent()
メソッドを見つけます。
Reasoning Engine エージェントを使用して Gemini を呼び出すには、askAgent()
メソッドで、バックエンド アプリの Cloud Run エンドポイントにある /ask_gemini
URL にリクエストを送信します。リクエストのクエリ パラメータには、Gemini への前回の呼び出しで返された画像の name
と description
、およびユーザーのメッセージが含まれています。
その後、関数 _sendMessageToAgent()
を呼び出すことにより、バックエンドからの回答がチャット ウィンドウのメッセージのリストに追加されます。
Flutter アプリの構成が完了したので、アプリをビルドしてデプロイできます。このラボでは、アプリをウェブ アプリケーションとして実行するため、Flutter ウェブ用の開発サーバーである Fwr を使用します。
Flutter アプリのフォルダ内にいることを確認します。IDE のターミナル ウィンドウで、次のコマンドを実行します。
アプリ プロジェクトの依存関係を取得するには、次のコマンドを実行します。
プロジェクトを構築してウェブサーバーを起動するには、次のコマンドを実行します。
サーバーが起動して Flutter アプリにサービスを提供するまで待ちます。起動すると、コマンドの出力は次のようになります。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
Flutter アプリの機能をテストしましょう。
アプリをテストするには、まず画像をダウンロードしてパソコンに保存します。URL をコピーして、別個のブラウザタブで画像を表示します。
画像を右クリックして、パソコンに保存します。
同様に、以下の URL から Google Chrome Dino ピンの画像をダウンロードします。
Flutter アプリにアクセスするには、Qwiklabs の認証情報パネルからライブサーバーの URL をコピーし、新しいブラウザタブに貼り付けます。
アプリが読み込まれるまで数秒待ちます。次に、[ライブラリから選択] をクリックして落水荘の画像をアップロードします。
画像をアップロードすると、アプリが Vertex AI Gemini API を呼び出して、アプリの UI に表示される画像の名前と説明を含む回答を生成します。
アプリ UI の名前フィールドと説明フィールドに Gemini モデルの回答が反映されるまで数秒かかる場合があります。
[詳細を表示] をクリックします。
チャット ページが読み込まれ、前回の Gemini API 呼び出しで回答に含まれていた質問の候補が表示されます。
質問の提案のいずれかをクリックして、チャット エージェントからの回答を表示します。
エージェントがバックエンド アプリの Cloud Run エンドポイントに HTTPS 呼び出しを行った後、バックエンド アプリが Reasoning Engine エージェントを呼び出します。このエージェントは、Gemini を使用して Wikipedia から回答を返します。
チャット UI で [画像を削除] をクリックします。
[ライブラリから選択] をクリックして、先ほど保存した Google Chrome Dino ピンの画像をアップロードします。
画像をアップロードすると、アプリが Vertex AI Gemini API を呼び出して、アプリの UI に表示される画像の名前と説明を含む回答を生成します。
[詳細を表示] をクリックします。
チャット メッセージ ボックスに、次のように入力します。
エージェントがバックエンド アプリの Cloud Run エンドポイントに HTTPS 呼び出しを行った後、バックエンド アプリが Reasoning Engine エージェントを呼び出します。このエージェントは、Gemini を使用して Vertex AI Search データストアから回答を返します。
(省略可)Flutter アプリがモバイル レイアウトに収まることを確認するため、ブラウザ ウィンドウのサイズをモバイル デバイスと同程度のサイズに変更します。
これは、Flutter アプリが画面サイズやウィンドウ サイズに応じて表示を変化できることを示しています。Flutter のウィジェットとパッケージは、デバイス設定に基づいてアプリをレスポンシブにし、適応させるのに役立ちます。
ラボでの学習が完了したら、[ラボを終了] をクリックします。ラボで使用したリソースが Qwiklabs から削除され、アカウントの情報も消去されます。
ラボの評価を求めるダイアログが表示されたら、星の数を選択してコメントを入力し、[送信] をクリックします。
星の数は、それぞれ次の評価を表します。
フィードバックを送信しない場合は、ダイアログ ボックスを閉じてください。
フィードバック、ご提案、修正が必要な箇所については、[サポート] タブからお知らせください。
このラボでは、次のことを行いました。
Copyright 2024 Google LLC All rights reserved. Google および Google のロゴは、Google LLC の商標です。その他すべての社名および製品名は、それぞれ該当する企業の商標である可能性があります。
このコンテンツは現在ご利用いただけません
利用可能になりましたら、メールでお知らせいたします
ありがとうございます。
利用可能になりましたら、メールでご連絡いたします
1 回に 1 つのラボ
既存のラボをすべて終了して、このラボを開始することを確認してください