始める前に
- ラボでは、Google Cloud プロジェクトとリソースを一定の時間利用します
- ラボには時間制限があり、一時停止機能はありません。ラボを終了した場合は、最初からやり直す必要があります。
- 画面左上の [ラボを開始] をクリックして開始します
Create a data store and search app
/ 15
Debug your agent
/ 25
Set and utilize session state
/ 25
Deploy your agent to Agent Engine
/ 25
Configure a frontend to query your agent
/ 10
Create a data store and search app
/ 15
Debug your agent
/ 25
Set and utilize session state
/ 25
Deploy your agent to Agent Engine
/ 25
Configure a frontend to query your agent
/ 10
このラボでは、Agent Development Kit(ADK)を使用してエージェントを作成し、そのエージェントを Agent Runtime にデプロイしてウェブアプリから使用するスキルを実証します。
このラボでは、次の作業を行います。
このラボを最後まで行うために必要なスキルが身につくリソースをお探しの場合は、以下の教材の関連セクションをご覧ください。
こちらの説明をお読みください。ラボには時間制限があり、一時停止することはできません。タイマーは、Google Cloud のリソースを利用できる時間を示しており、[ラボを開始] をクリックするとスタートします。
このハンズオンラボでは、シミュレーションやデモ環境ではなく実際のクラウド環境を使って、ラボのアクティビティを行います。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。
このラボを完了するには、以下が必要です。
[ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるダイアログでお支払い方法を選択してください。 左側の [ラボの詳細] ペインには、以下が表示されます。
[Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウで開く] を選択します)。
ラボでリソースがスピンアップし、別のタブで [ログイン] ページが表示されます。
ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。
必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。
[ラボの詳細] ペインでもユーザー名を確認できます。
[次へ] をクリックします。
以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。
[ラボの詳細] ペインでもパスワードを確認できます。
[次へ] をクリックします。
その後、次のように進みます。
その後、このタブで Google Cloud コンソールが開きます。
Cymbal Shops はミネアポリスに本社を置く米国の小売チェーンで、家庭用品、電子機器、衣料品を販売しています。
この度、Cymbal Shops はヨーロッパに進出し、新たに塗料部門を立ち上げました。同社は、新しいオンライン プレゼンスを利用して、DIY で家をリフォームする人々が塗料を購入する方法を合理化しようと計画しています。
あなたの同僚が、ユーザーの次の作業を手伝うエージェント「Paint Agent」の開発に着手しました。
しかし、同僚はバグに行き詰まり、そのまま退職してしまいました。
あなたは Cymbal Shops の新しい ML エンジニアです。Paint Agent のデプロイを完了させるという任務を託されました。エージェントは次のように構成されています。
このタスクでは、エージェント検索データストアをデプロイします。このデータストアは、Cymbal Shops の塗料について説明したデータシート(シークレット ウィンドウのタブを使用して https://storage.cloud.google.com/
データストアと検索アプリにより、エージェントは組織のコンテンツをすばやく見つけることができます。その後、その情報を使用して、データに基づいてユーザーに適切な回答を提供できます。
Google Cloud コンソールで、[Agent Platform] > [エージェント] > [検索] に移動します。
次の構成でエージェント検索アプリを作成します。
| フィールド | 値 |
|---|---|
| アプリの種類 | カスタム検索(一般) |
| アプリ名 | Paint Search |
| 会社名 | Cymbal Shops |
| ロケーション | グローバル |
次の構成でエージェント検索データストアを作成します。
| フィールド | 値 |
|---|---|
| データソース | Cloud Storage |
| データ型 | ドキュメント |
| フォルダまたはファイル | ファイル |
| インポートするファイル |
|
| ロケーション | グローバル |
| データストア名 | Cymbal Paint |
| ドキュメント パーサー | レイアウト パーサー |
| 表のアノテーションを有効にする | 有効 |
| チャンクに上位の見出しを含める | 有効 |
アプリとデータストアの両方で、[料金モデル] として [全般] を選択します。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
このラボ環境では、Agent Platform API が有効になっています。ご自身のプロジェクトでこれらの手順を行う場合は、Agent Platform に移動し、プロンプトに沿って有効にしてください。
Google Cloud コンソールのタイトルバーで、[Cloud Shell をアクティブにする]()をクリックします。
[続行] をクリックします。
Cloud Shell を承認するよう求められたら、[承認] をクリックします。
Cloud Shell ターミナル パネルの右上にある「新しいウィンドウで開く」ボタン()をクリックします。
ペインの上部にある [エディタを開く](鉛筆アイコン )をクリックしてファイルを表示します。
左側のナビゲーション メニューの上部にあるエクスプローラ アイコン()をクリックして、ファイル エクスプローラを開きます。
[Open Folder] ボタンをクリックします。
表示された [Open Folder] ダイアログで [OK] をクリックし、Qwiklabs 受講者アカウントのホームフォルダを選択します。
画面の右側に表示される追加のチュートリアルや Gemini のパネルを閉じると、コードエディタのウィンドウをより広く使用できます。
このラボの残りの部分では、このウィンドウを Cloud Shell エディタと Cloud Shell ターミナルを備えた IDE として使用できます。
次のコマンドを Cloud Shell ターミナルに貼り付けて、Cloud Storage バケットからファイルをコピーし、このラボ用のコードが入ったプロジェクト ディレクトリを作成します。
PATH 環境変数を更新し、ADK とその他のラボ要件をインストールします。
export PATH=$PATH:"/home/${USER}/.local/bin"
python3 -m pip install -r adk_challenge_lab/requirements.txt
python3 -m pip install chainlit==2.11.1
次のコマンドをテキスト ファイルにコピーします。SEARCH_ENGINE_ID の値を YOUR_ID から、先ほど作成した検索エンジンの ID(paint-search_1756... のような形式で、[Agent Platform] > [エージェント] > [検索] のアプリリストに表示されます)に更新します。
.env ファイルをエージェント ディレクトリにコピーして、エージェントがデプロイされたら必要になる認証構成情報をエージェントに提供します。
タスク 3. Paint Agent をデバッグする
Cloud Shell ターミナルで、次のコマンドを使用して現在のバージョンのエージェントを実行します。
adk run paint_agent
[user]: プロンプトが表示されたら、次のように入力します。
はい
... google.genai.errors.ClientError: 400 INVALID_ARGUMENT. {'error': {'code': 400, 'message': 'Multiple tools are supported only when they are all search tools.', 'status': 'INVALID_ARGUMENT'}}
これから、このエラーを解決していきます。
adk_challenge_lab/paint_agent/agent.py ファイルを開き、root_agent が使用しているサブエージェントとツールのリストを確認します。サブエージェントが含まれていることに注目してください。サブエージェントへの転送によって暗黙的な transfer_to_agent ツールが呼び出されます。
root_agent のツールは検索ツールではないため、少なくとも 1 つのサブエージェントが検索ツールを呼び出す必要があります。
VertexAiSearchTool)を見つけます。1 つのエージェント内で検索ツールと他の非検索ツールを組み合わせて使用することはできません(このケースのようにサブエージェントの中で使用している場合でも同様です)。ただし、ADK には、検索ツールを使用する孤立したエージェントをラップできる AgentTool というツールが用意されています。ラップすると、そのエージェントをツールとして扱い、他のツールと組み合わせて使用することができます。
root_agent のファイル adk_challenge_lab/paint_agent/agent.py に戻り、root_agent のツールリストに AgentTool() を追加します。この AgentTool() に次の引数を渡します。
agent: この引数には、search_agent(先ほど調べた検索ツールを使用しているサブエージェント)を設定する必要があります。
skip_summarization: この引数は、False に設定する必要があります。これは、検索ツールが返した内容をエージェントに報告させるためです。
問題のサブエージェントを sub_agents リストから削除します。
注: 必ず、データストアが作成され、ドキュメントのインデックスが作成された後に、この先に進んでください。このステータスは、[Agent Platform] > [エージェント] > [検索] > [データストア] > [Cymbal Paint] データストアの [ドキュメント] タブでモニタリングできます。
実際には、ステータスが [Ready] になった後に数分待ってからエージェントに対してクエリを実行すると、より信頼性の高い出力が得られます。
adk run paint_agent
エージェントに EcoGreens と Forever Paint の価格を教えてもらいます。
exit」と入力して終了します。
root_agent は adk_challenge_lab/paint_agent/tools.py から set_session_value ツールをインポートして使用します。ユーザーから SELECTED_PAINT や COVERAGE_RATE などの情報を収集し、セッションに保存して、マルチターン チャットで使用することを目的としています。ただし、完全には実装されていません。
adk_challenge_lab/paint_agent/tools.py ファイルの set_session_value 関数を更新して、ToolContext の state ディクショナリに key と value のペアを保存します。
関数のレスポンスを更新して、ステータス メッセージ「f"stored '{value}' in '{key}'"」を返すようにします。
coverage_calculator_agent(root_agent のサブエージェントである room_planner のサブエージェント)に関連付けられている agent.py ファイルを開きます。
エージェントへの指示で、state ディクショナリの値が正しく読み込まれていないことに注目してください。指示を更新して、すべて大文字で表記した用語を削除し、ADK のキー テンプレートを使用して state 値を指示に読み込むように変更します。state キーが設定される前にエージェントが呼び出された場合にエージェントがクラッシュしないように、オプションの構文({SELECTED_PAINT?} など)を使用します。 |
https://google.github.io/adk-docs/sessions/state/#using-key-templating | 次のコマンドを実行してエージェントをテストします。 | adk web --allow_origins "regex:https://.*\.cloudshell\.dev" | paint_agent を選択します。 | これで、エージェントと次の会話ができるようになります。 |
|---|
| あなた | エージェントの回答
こんにちは | [Cymbal Shops の塗料に関する情報を提供すると伝えます]
はい | [Project Paint、EcoGreens、SureCoverage、Forever Paint などの塗料製品に関する情報を提供します。]
EcoGreens を使いたいのですが | [[State] タブに、更新された state 値が表示されます。部屋数と各部屋の名前を尋ねます。]
オフィスの一室だけです | [オフィスに使う色を選択するよう求めます。]
ディープ オーシャンにします[部屋の寸法を尋ねます。]
3 m × 4 m で、高さは 3 m です。ドアが 1 つ、窓が 2 つあります。[何回塗りにするのか確認します。]
2 回塗りにします。注: 製品の画像が正しく表示されるようにするには、ブラウザの設定でこのドメインのサードパーティ Cookie を有効にして、ページを更新してください。
エージェントとの会話が終わったら、開発 UI のブラウザタブを閉じます。
| Cloud Shell ターミナル パネルを選択し、Ctrl+C キーを押してサーバーをシャットダウンします。 |
|---|
adk deploy agent_engine コマンドを使用して、エージェントを Agent Runtime にデプロイします。エージェント ディレクトリを最後の位置引数として含める必要があります(現在そのディレクトリにいる場合など)。次の引数を使用します。
パラメータ
--display_name"Paint Agent"
エージェントのデプロイ時に、
デプロイが完了すると、デプロイしたエージェントのリソース名がコンソールに出力されます。
|
|
ファイル adk_challenge_lab/chainlit_ui/app.py で、次の行を見つけて、デプロイしたエージェントのリソース名に更新し、リモート エージェントが読み込まれるようにします。 |
agent = client.agent_engines.get(name='YOUR_AGENT_RESOURCE_NAME')
|
次のコマンドを使用して UI を実行します。 |
cd ~/adk_challenge_lab/chainlit_ui
chainlit run app.py
|
想定される出力: | http://localhost:8000 のリンクをクリックして、新しいブラウザタブで開きます。 | デプロイしたエージェントと次の会話をします。 |
|---|
| エージェントの回答 |
| [Cymbal Shops の塗料に関する情報を提供すると伝えます] |
| [Project Paint、EcoGreens、SureCoverage、Forever Paint などの塗料製品に関する情報を提供します。] |
| [部屋数と各部屋の名前を尋ねます。] |
| [リビングルームと子ども部屋に使う色を選択するよう求めます。] |
リビングルームは 5 m × 4 m で、高さは 2.5 m です。ドアが 1 つ、窓が 3 つあります。
2 回塗りにします。
子ども部屋は 3 m × 3 m で、高さは 2.5 m です。ドアが 1 つ、窓が 1 つあります。どちらも 2 回塗りにします。
エージェントと新しい会話を開始するには、左上のアイコンをクリックして [Create a New Chat] を選択します。
このコンテンツは現在ご利用いただけません
利用可能になりましたら、メールでお知らせいたします
ありがとうございます。
利用可能になりましたら、メールでご連絡いたします
1 回に 1 つのラボ
既存のラボをすべて終了して、このラボを開始することを確認してください