Agentverse - The Shadowblade's Codex - Gemini CLI を使用したバイブコーディング

1. Overture

サイロ化された開発の時代は終わりを迎えつつあります。次の技術革新の波は、孤高の天才ではなく、共同での熟練が鍵となります。単一の賢いエージェントを構築することは、魅力的な実験です。堅牢で安全かつインテリジェントなエージェント エコシステム(真の Agentverse)を構築することは、現代の企業にとって大きな課題です。

この新しい時代で成功するには、4 つの重要な役割を統合する必要があります。これらは、あらゆるエージェント システムを支える基盤となる柱です。いずれかの領域に欠陥があると、構造全体を損なう可能性のある弱点が生じます。

このワークショップは、Google Cloud でエージェントの未来をマスターするための決定的なエンタープライズ プレイブックです。アイデアの最初の段階から本格的な運用まで、エンドツーエンドのロードマップを提供します。この 4 つの相互接続されたラボでは、デベロッパー、アーキテクト、データエンジニア、SRE の専門スキルがどのように収束して、強力な Agentverse を作成、管理、スケーリングするのかを学びます。

単一の柱だけでは Agentverse をサポートできません。アーキテクトの壮大な設計も、デベロッパーの正確な実行がなければ無意味です。デベロッパーのエージェントはデータ エンジニアの知恵がなければ機能せず、SRE の保護がなければシステム全体が脆弱になります。チームが革新的なコンセプトをミッション クリティカルな運用上の現実へと変えることができるのは、相乗効果とそれぞれの役割に対する共通の理解があってこそです。ここから旅が始まります。自分の役割をマスターし、全体像の中で自分がどのように位置づけられるかを学びましょう。

Agentverse: チャンピオンへの呼びかけへようこそ

企業がデジタル領域を拡大する中で、新しい時代が到来しました。エージェントの時代は、インテリジェントで自律的なエージェントが完璧に調和してイノベーションを加速し、日常的な作業を排除する、大きな可能性を秘めた時代です。

agentverse.png

この力と可能性が結びついたエコシステムは、Agentverse と呼ばれています。

しかし、この新しい世界の端は、静的と呼ばれる静かな腐敗であるエントロピーの進行によってほつれ始めています。スタティックはウイルスやバグではなく、創造行為そのものを餌とするカオスの化身です。

古い不満が巨大な形に増幅され、開発の七つの幽霊が誕生します。このまま放置すると、The Static とその Spectres によって進捗が完全に停止し、Agentverse の約束は技術的負債と放棄されたプロジェクトの荒野に変わってしまいます。

本日、Google は混乱の波を押し返すチャンピオンを募集します。エージェントバースを守るために、自分の技術を磨き、協力し合うヒーローが必要です。ここで、進むべき道を選択します。

クラスを選択する

4 つの異なる道が目の前に広がっています。それぞれが The Static との戦いにおける重要な柱となります。トレーニングは単独で行いますが、最終的な成功は、自分のスキルが他のスキルとどのように組み合わされるかを理解することにかかっています。

  • シャドウブレード(開発者): 鍛冶と前線の達人。あなたは、コードの複雑な詳細の中で、刃を鍛え、道具を作り、敵に立ち向かう職人です。あなたの道は、精度、スキル、実践的な創造性の道です。
  • サモナー(アーキテクト): 優れた戦略家であり、オーケストレーターです。1 人のエージェントではなく、戦場全体を見渡すことができます。エージェントのシステム全体が通信、連携し、単一のコンポーネントよりもはるかに大きな目標を達成できるようにするマスター ブループリントを設計します。
  • 学者(データ エンジニア): 隠された真実を求める者であり、知恵の守護者。広大で未開拓のデータの大自然に足を踏み入れ、エージェントに目的と視点を与えるインテリジェンスを発見します。知識は敵の弱点を明らかにし、味方を強化します。
  • The Guardian(DevOps / SRE): 領域の揺るぎない保護者であり盾。要塞を築き、電力の供給ラインを管理し、システム全体が静的の攻撃に耐えられるようにします。あなたの強みは、チームの勝利を築く基盤となります。

ミッション

トレーニングはスタンドアロンのエクササイズとして開始されます。選択した道を歩み、役割をマスターするために必要な独自のスキルを学びます。トライアルの最後には、The Static から生まれた Spectre が現れます。これは、あなたのクラフトの特定の課題を狙うミニボスです。

最終トライアルに備えるには、自分の役割を習得するしかありません。その後、他のクラスのチャンピオンとパーティを組む必要があります。2 人で腐敗の中心に乗り込み、最後のボスに立ち向かいます。

エージェントバースの運命を左右する、チームの総合力を試す最終共同チャレンジ。

Agentverse でヒーローを目指しましょう。通話に応答しますか?

2. シャドウブレードの Codex

シャドーブレードの写本が目の前に開かれています。その呼びかけに応えましょう。エージェントバースは、The Static の忍び寄るカオスに脅かされています。このコーデックス内のテクニックを習得した者だけが反撃できます。これは、正確さと規律の道です。本日よりトレーニングを開始します。AI を単なるツールとしてではなく、飼いならして使いこなす必要のある知的な刃として扱う方法を学びます。ここに記載されている教えに従えば、純粋な論理の武器、つまり、戦闘に備えて研ぎ澄まされたインテリジェント エージェントを作成できます。

02-00-overview.png

学習内容

  • Gemini CLI という主要な武器を使いこなしましょう。
  • MCP ツールを Gemini CLI と統合して、外部の武器を呼び出し、不慣れなコードベースを分析します。
  • 設計ドキュメントを使用して、AI パートナーに指示する「雰囲気」に意図を反映させます。
  • Agent Development Kit(ADK)を使用して最初の自律エージェントを構築し、クリーンでモジュール式のソリューションを構築します。
  • エージェントをテストして検証するための自動評価スイートを構築する。
  • 完全な CI パイプラインを構築して、エージェントを自動的にテスト、コンテナ化、アーカイブします。

3. トレーニング グラウンドの準備

👉Google Cloud コンソールの最上部にある [Cloud Shell をアクティブにする] をクリックします(Cloud Shell ペインの最上部にあるターミナル型のアイコンです)。cloud-shell.png

👉[エディタを開く] ボタン(鉛筆のアイコンが付いた開いたフォルダのアイコン)をクリックします。ウィンドウに Cloud Shell コードエディタが開きます。左側にファイル エクスプローラが表示されます。open-editor.png

👉クラウド IDE でターミナルを開き、

03-05-new-terminal.png

👉💻 ターミナルで、次のコマンドを使用して、すでに認証済みであり、プロジェクトがプロジェクト ID に設定されていることを確認します。

gcloud auth list

👉💻 GitHub からブートストラップ プロジェクトのクローンを作成します。

git clone https://github.com/weimeilin79/agentverse-developer.git
chmod +x ~/agentverse-developer/gitea.sh
chmod +x ~/agentverse-developer/init.sh
chmod +x ~/agentverse-developer/set_env.sh

git clone https://github.com/weimeilin79/agentverse-dungeon.git
chmod +x ~/agentverse-dungeon/run_cloudbuild.sh
chmod +x ~/agentverse-dungeon/start.sh

git clone https://github.com/weimeilin79/vertex-ai-creative-studio.git
chmod +x ~/vertex-ai-creative-studio/experiments/mcp-genmedia/mcp-genmedia-go/install.sh

👉💻 プロジェクト ディレクトリから設定スクリプトを実行します。

⚠️ プロジェクト ID に関する注意事項: スクリプトは、ランダムに生成されたデフォルトのプロジェクト ID を提案します。Enter キーを押すと、このデフォルトが使用されます。

ただし、特定の新しいプロジェクトを作成する場合は、スクリプトで求められたときに目的のプロジェクト ID を入力できます。

cd ~/agentverse-developer
./init.sh

スクリプトがセットアップ プロセスの残りの部分を自動的に処理します。

👉 完了後の重要な手順: スクリプトが終了したら、Google Cloud コンソールで正しいプロジェクトが表示されていることを確認する必要があります。

  1. console.cloud.google.com にアクセスします。
  2. ページの上部にあるプロジェクト セレクタのプルダウンをクリックします。
  3. [すべて] タブをクリックします(新しいプロジェクトが [最近] にまだ表示されていない可能性があるため)。
  4. init.sh ステップで構成したプロジェクト ID を選択します。

03-05-project-all.png

👉💻 ターミナルに戻ります。必要なプロジェクト ID を設定します。

gcloud config set project $(cat ~/project_id.txt) --quiet

👉💻 次のコマンドを実行して、必要な Google Cloud APIs を有効にします。

gcloud services enable  compute.googleapis.com \
                        artifactregistry.googleapis.com \
                        run.googleapis.com \
                        cloudfunctions.googleapis.com \
                        cloudbuild.googleapis.com \
                        iam.googleapis.com \
                        aiplatform.googleapis.com \
                        cloudresourcemanager.googleapis.com

👉💻 agentverse-repo という名前の Artifact Registry リポジトリをまだ作成していない場合は、次のコマンドを実行して作成します。

. ~/agentverse-developer/set_env.sh
gcloud artifacts repositories create $REPO_NAME \
    --repository-format=docker \
    --location=$REGION \
    --description="Repository for Agentverse agents"

権限の設定

👉💻 ターミナルで次のコマンドを実行して、必要な権限を付与します。

. ~/agentverse-developer/set_env.sh

# Artifact Registry Admin
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$SERVICE_ACCOUNT_NAME" \
  --role="roles/artifactregistry.admin"

# Cloud Build Editor
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$SERVICE_ACCOUNT_NAME" \
  --role="roles/cloudbuild.builds.editor"

# Cloud Run Admin
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$SERVICE_ACCOUNT_NAME" \
  --role="roles/run.admin"

# IAM Service Account User
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$SERVICE_ACCOUNT_NAME" \
  --role="roles/iam.serviceAccountUser"

# Vertex AI User
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$SERVICE_ACCOUNT_NAME" \
  --role="roles/aiplatform.user"

# Logging Writer (to allow writing logs)
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$SERVICE_ACCOUNT_NAME" \
  --role="roles/logging.logWriter"


gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$SERVICE_ACCOUNT_NAME" \
  --role="roles/logging.viewer"

👉💻 トレーニングを開始すると、最終チャレンジの準備が始まります。次のコマンドは、カオスな静的からスペクターを召喚し、テスト用のボスを作成します。

. ~/agentverse-developer/set_env.sh
cd ~/agentverse-dungeon
./run_cloudbuild.sh

npm update -g @google/gemini-cli

4. メインの武器を使いこなす: Gemini CLI の概要

MCP サーバーの武器庫にある高度な特殊武器を使いこなすには、まず Gemini CLI という基本武器を習得する必要があります。これは最も汎用性の高いブレードで、コマンドを使用してデジタル世界を形作ることができます。これらのドリルでは、基本的な操作と機能について説明します。

概要

Gemini コマンドライン インターフェース(CLI)は単なるツールではなく、あなたの意志の延長です。Gemini モデルを搭載したこのオープンソースの AI エージェントは、「推論と行動」(ReAct)ループで動作します。ユーザーの意図を分析し、適切な手法を選択して実行し、結果を観察して複雑なタスクを完了します。より特殊な武器を使いこなすには、まずこのメインブレードをマスターする必要があります。

Gemini CLI を使ってみる

👉💻 訓練場に入り、武器を構えましょう。Cloud Shell ターミナルで、個人用アーマリーに移動します。

cd ~/agentverse-developer
mkdir tabletop
cd tabletop

👉💻 Gemini を初めて呼び出します。初期の調整手順をご案内します。

clear
gemini 

Do you want to connect Cloud Shell editor to Gemini CLI? と表示されたら、[NO] を選択します。

武器の習熟

すべての熟練した職人は、自分の道具を熟知しています。真の敵に立ち向かう前に、刀の基本を習得する必要があります。

👉✨ 魔法のツールには、その力を表すルーンが刻まれています。今すぐお読みください。Gemini プロンプトに次のように入力します。

/help

コマンドのリストを確認します。これらは、メモリ(focus)、会話(chat)、外部アーセナル(tools)を管理するための基本的なテクニックです。これは戦闘マニュアルです。

👉✨ 武器が環境に同調し、戦場を直接操作できます。ブレード外の世界にコマンドを発行します。

!ls -l

👉✨ Gemini CLI には、独自の組み込み機能が用意されています。検査するには:

/tools

ReadFileWriteFileGoogleSearch などのリストが表示されます。これらは、外部の武器庫から引き出す必要なく呼び出すことができるデフォルトのテクニックです。

👉✨ 武器は、適切に焦点を合わせることで初めて効果を発揮します。Gemini Blade は「戦術的認識」(コンテキスト)を保持して、アクションをガイドできます。

/memory show

現在は空で、白紙の状態です。

👉✨ 次の戦術データをメモリに書き込みます。

/memory add "The Shadowblade's primary foe is The Static."

/memory show を再度実行して、ブレードがこの知識を吸収したことを確認します。

👉✨ 効果的に機能させるには、武器がミッションを理解している必要があります。@ シジルは、ブレードにインテルの分析を指示します。まず、ミッション ブリーフィング ファイルを作成します。

!echo "## Mission Objective: Defeat the Seven Spectres" > mission.md

👉✨Gemini CLI に概要説明の分析と結果のレポートを指示します。

Explain the contents of the file @mission.md

メイン武器が目標を認識するようになりました。

👉💻 Ctrl+C を 2 回押して Gemini CLI を終了します

5. 戦場を分析する: 実践的なバイブ コーディングのインタラクション

トレーニング ドリルが完了しました。これで、メインの武器である Gemini CLI の基本的な構えと攻撃を習得しました。しかし、刃は創造の鍛冶場で試され、戦の武器庫に調和するまで、真に熟練したものではありません。真の敵に立ち向かう前に、まず周囲の状況(デジタル戦場)を調査し、形作る必要があります。

概要

この章では、理論から実践に移行する方法について説明します。まず、Gemini ブレードに Maker's Mark(個人のウェブサイトの形式のデジタル署名)の作成を指示して、Agentverse での存在を確立します。このウェブサイトは、ユーザーの意図のみに基づいて作成されます。次に、高度なツールのローカル アーセナル(MCP サーバー)を有効にして、ブレードをその周波数に調整することで、能力を拡張します。これにより、単純で決定的なコマンドを使用してコード リポジトリを管理するなどの複雑な操作を実行できます。

メーカーズマークを確立する

真のシャドーブレードは、武器だけでなく、その特徴的なスタイル、つまりメーカーズ マークによっても認識されます。このマークは、Agentverse に自分の身元を知らせる個人プロフィールである、デジタル プレゼンスとなります。ここでは、この ID の定義に必要な複雑な手法を実行するように Gemini Blade に指示します。

ストーリー

👉💻 前のセクションで Gemini CLI を閉じた場合は、必ず再起動してください。ターミナルで次のコマンドを実行します。

clear
cd ~/agentverse-developer/tabletop
gemini 

👉✨ 強力なコマンドを 1 つ実行するだけで、Gemini CLI にデジタル ID の基盤を構築するよう指示できます。

In the current folder, create a personal profile website for a hero codenamed 'Shadowblade'. The design must be a dark, futuristic theme with electric blue accents. All code must be in separate index.html and styles.css files. The layout must use CSS Flexbox for a two-column design. All generated code must be clean, well-commented, and professional. Make sure you have a place holder spot for profile picture. Do not attempt to start the server.

Gemini が必要な一連の操作を計算しました。

👉💻 Ctrl+C を 2 回押して Gemini CLI を終了し、ターミナルで次のコマンドを実行します。*

python -m http.server

👀 作業内容を確認するには、Cloud Shell ツールバーの [ウェブでプレビュー] アイコンをクリックします。[ポートを変更] を選択して「8000」に設定し、[変更してプレビュー] をクリックします。ウェブサイトのプレビューが表示されます。04-01-webpreview.png

ウェブサイトの見た目は、この例とは異なる場合があります。これがお客様の固有のマークです。04-02-website.png

署名技術が洗練されたため、ライブ シミュレーションは不要になりました。ブレードに待機を指示します。

👉💻 Ctrl+C キーを押して、http サーバーを終了します。

これでデジタル ID が確立されました。さらに重要なのは、大きな力をより慎重に扱うという重要な知恵を学んだことです。

ローカル アーセナルを有効にする: Gitea アーマリー

シャドーブレードの真の可能性は、個人のスキルだけでなく、武器の質によっても引き出されます。ローカル武器ラック(Gitea サーバー)を有効にして、ブレードをそのパワーに調整します。このツールセットは、Model Context Protocol(MCP)サーバーを介して Gemini CLI に接続されます。これは、AI ブレードが外部のツールやサービスとやり取りできるようにする専用ポータルであり、ターミナルをインテリジェントでアクション指向のワークスペースに変えます。

デベロッパー向けの注: MCP サーバーは、AI の思考を外部ツールの本体に接続する専用のポータルである、電力の導管のようなものと考えてください。これにより、Gemini CLI は単なる会話型ツールから、真の行動志向のエージェントへと進化します。ブレードをこれらの MCP ポータルに調整することで、ブレードに具体的なアクション(ファイルの管理、データベースのクエリ、API の操作など)を実行する権限が付与されます。デベロッパーが AI エージェントを強力なプラットフォームに接続するために作成した、これらのポータルのエコシステム全体が存在します。データベースの操作、コードの保護、ペア プログラミングのサポートなどを行うための MCP サーバーがあります。可能性は無限大で、開発者は任意のプロジェクトに合わせてワークスペースをカスタマイズできます。

今回は、「バイブス コーダー」に不可欠な 2 つの基本的な力、つまりフォージを制御する力と想像力から創造する力に焦点を当てます。まず、ブレードを Git サーバーに調整し、ソースコード リポジトリを制御できるようにします。次に、2 番目の MCP サーバーに接続して画像を生成します。これにより、コマンドだけでビジュアル アセットを作成できます。

まず、新しい武器庫の最も基本的な要素である武器庫自体を召喚しましょう。

👉💻 ターミナルで、アクティベーション スクリプトを実行してアーマリーを呼び出します。

cd ~/agentverse-developer
./gitea.sh

このスクリプトは、Gitea コンテナを起動して MCP ポータルを開き、Gemini が MCP ポータルを認識して操作できるようにします。

👉 新しい武器を確認するには、ウェブ プレビューを覗き込む必要があります。

👉 Cloud Shell ツールバーの [ウェブでプレビュー] アイコンから、[ポートを変更] を選択し、3005 に設定します。04-03-webpreview.png

👉 Gitea ログインページが表示されます。呪文を使用してアーマリーに入ります。* ユーザー名: dev * パスワード: devログイン

👉💻 Gemini CLI はまだこの新しいツールセットを認識できません。重要な調整を行い、Gemini CLI の構成ルーン(settings.json)にアーマリーの場所を書き込む必要があります。ターミナルで次のコマンドを実行します。

if [ ! -f ~/.gemini/settings.json ]; then
  # If file does not exist, create it with the specified content
  echo '{"mcpServers":{"gitea":{"url":"http://localhost:8085/sse"}}}' > ~/.gemini/settings.json
else
  # If file exists, merge the new data into it
  jq '. * {"mcpServers":{"gitea":{"url":"http://localhost:8085/sse"}}}' ~/.gemini/settings.json > tmp.json && mv tmp.json ~/.gemini/settings.json
fi &&
cat ~/.gemini/settings.json

👀 settings.json ファイルは、Gemini CLI の中心的な構成であり、設定と機能のグリモアとして機能します。CLI の動作、外観、最も重要な外部権限を規定します。通常、このファイルはホーム ディレクトリの ~/.gemini/settings.json にあり、そのルールがすべてのプロジェクトに適用されます。ただし、プロジェクト フォルダ内の .gemini ディレクトリ内にプロジェクト固有の settings.json ファイルを作成して、グローバル設定をオーバーライドすることもできます。

"mcpServers": {
  "gitea": {
    "url": "http://localhost:8085/sse"
  }
}

この設定は、Gemini に「gitea というアーセナルがアクティブで、この特定のネットワーク アドレスでコマンドをリッスンしている」ことを伝えます。

👉💻 Gemini CLI を再度入力します。ターミナルで次のコマンドを実行します。

clear
cd ~/agentverse-developer/tabletop/
gemini 

👉✨ ブレイドが新しい武器を発見したことを確認します。MCP ポータルから使用可能なすべてのアーセナルを一覧表示するように指示します。

/mcp

Gitea MCP サーバー

gitea と、利用可能な手法のリストが表示されます。ブレードが調整されています。

「Maker's Mark」プロファイルは優れた技術ですが、武器庫に適切な場所が必要です。つまり、安全に保管するための鞘が必要です。Gemini CLI に指示して作成します。

Create a new repository named 'shadowblade-profile'. The description should be 'The Maker's Mark and digital identity for the Shadowblade operative.' I will push my own files later, so do not create any content.

Gitea ウェブ インターフェースに戻り、更新します。新しい shadowblade-profile リポジトリが作成されます。Gitea リポジトリ

鞘の準備ができたら、作業を固定します。Gemini に、プロフィール ウェブサイトのファイルを commit するよう指示します。

👉💻Gemini CLI でこの手法の最終コマンドを発行します。

Using the Gitea tool, push the index.html and styles.css files to the 'shadowblade-profile' repository.

真のマスターは自分の仕事を検証します。Gitea のタブに戻り、リポジトリ ページを更新します。index.htmlstyles.css が安全にアーカイブされました。

Gitea リポジトリGitea リポジトリ

👉✨ シャドーブレードは紋章で定義されますが、ウェブサイトにはプロフィール画像がありません。熟練した職人は、欠点を認識して完璧を目指します。この不具合を兵器庫の記録に記録する必要があります。

File an issue for me in the shadowblade-profile repo. The issue is that the profile image is missing.

Gitea Gitea の問題 で問題を表示する

欠落したシジルを鍛造するには、別の種類の力、つまり純粋な思考から画像生成できる Vertex AI の創造の精霊を召喚する必要があります。これには別の MCP ポータルが必要です。

👉💻 Ctrl+C を 2 回押して Gemini CLI を終了します

👉💻 まず、ポータルのサーバーをインストールします。ターミナルで次のコマンドを実行します。

echo 'export PATH="$PATH:$HOME/go/bin"' >> ~/.bashrc
source ~/.bashrc
cd ~/vertex-ai-creative-studio/experiments/mcp-genmedia/mcp-genmedia-go
./install.sh

👉 プロンプトが表示されたら、プロフィール用の画像を 1 つだけ生成する必要があるため、オプション mcp-imagen-go(通常は 4 ですが、数値が変更されることもあります)を選択します。

👉💻 創造の精神には、創造物を保持するための聖なる器(Google Cloud Storage バケット)が必要です。それでは、今すぐ作成してみましょう。ターミナルで次のコマンドを実行します。

. ~/agentverse-developer/set_env.sh
gcloud storage buckets create gs://$BUCKET_NAME --project=$PROJECT_ID

👉💻 それでは、Gemini CLI をこの新しい創造力にリンクさせる調和の儀式を行いましょう。ターミナルで次のコマンドを実行します。

. ~/agentverse-developer/set_env.sh
source ~/.bashrc
jq \
--arg bucket "$BUCKET_NAME" \
--arg project "$PROJECT_ID" \
--arg region "$REGION" \
'.mcpServers.imagen = { "command": "mcp-imagen-go", "env": { "MCP_SERVER_REQUEST_TIMEOUT": "55000", "GENMEDIA_BUCKET": $bucket, "PROJECT_ID": $project, "LOCATION": $region } }' \
~/.gemini/settings.json > tmp.json && mv tmp.json ~/.gemini/settings.json
cat ~/.gemini/settings.json

この「チューニング リチュアル」は、強力な新ツールである Google の画像生成モデル Imagen を使用するように Gemini CLI を構成するシェル スクリプトです。重要なのは、Imagen 用の MCP(Model Context Protocol)サーバーを設定することで、これを実現していることです。この MCP サーバーはブリッジとして機能し、Gemini CLI が Imagen の機能と通信して利用できるようにします。これは、CLI の中央構成ファイル ~/.gemini/settings.json を直接変更して、正しいクラウド認証情報で mcp-imagen-go コマンドを実行する方法を CLI に学習させることで実現します。

👀 儀式が終わると、settings.json に Gemini CLI に新しいスキルを教える新しいブロックが追加されます。

"imagen": {
    "command": "mcp-imagen-go",
    "env": {
        "MCP_SERVER_REQUEST_TIMEOUT": "55000",
        "GENMEDIA_BUCKET": "your-bucket-name",
        "PROJECT_ID": "your-project-id",
        "LOCATION": "your-region"
    }
}

これは、Gemini CLI に「タスクで Imagen ツールが必要な場合は、mcp-imagen-go(Imagen MCP サーバー)という名前のプログラムを実行する必要がある」と伝えます。実行するときは、画像を保存する Google Cloud Storage バケット、クラウド API に使用するプロジェクト ID とロケーションという特定の環境(env)を指定する必要があります。」この MCP サーバーを構成することで、Gemini CLI に Imagen の画像生成機能へのアクセス権を付与できます。

👉💻 Gemini を入力して、絞り込みコマンドを発行します。ターミナルで次のコマンドを実行します。

clear
cd ~/agentverse-developer/tabletop/
gemini 

👉✨ 強力な単一のコマンドで、Gemini CLI にデジタル ID の基盤を構築するよう指示します。Gemini CLI で次のコマンドを実行します。

Generate a portrait of a shadowblade, pixel art style. A determined warrior with long, braided magenta hair, wearing black and teal armor and confidently holding a silver broadsword.

👉✨ 精霊が画像を生成し、聖なる器に配置します。この新しく作成された印章を使用するようにブレードに指示します。(Gemini がすでにこの作業を行っている可能性があります。前の回答を確認してください。質問する前に、この処理を自動的に行っている可能性があります。

Modify the index.html file to add my profile picture. Use the image I just generated.

👉💻 新しいターミナルで、http サーバーを起動します。

cd ~/agentverse-developer/tabletop/
python -m http.server

👀 作業内容を確認するには、Cloud Shell ツールバーの [ウェブでプレビュー] アイコンをクリックします。[ポートを変更] を選択して「8000」に設定し、[変更してプレビュー] をクリックします。ウェブサイトのプレビューが表示されます。05-07-webdite.png

👉✨ Gemini CLI を実行しているターミナルに戻り、タスクの完了をメモして修正を commit し、armory の記録で報告した問題をクローズします。

Push the changed index.html file to the 'shadowblade-profile' repository using the gitea tool. Make sure you add 'Fix #1' in the commit comment. Also, close issue #1.Use the Gitea Tool and use user account "dev"

👉💻 Ctrl+C を 2 回押して Gemini CLI を終了します。

👀 作業内容を確認するには、Cloud Shell ツールバーの [ウェブでプレビュー] アイコンをクリックします。[ポートを変更] を選択して「3005」に設定し、[変更してプレビュー] をクリックします。ウェブサイトのプレビューが表示されます。固定

👉💻 HTTP サーバーを実行しているターミナルで、Ctrl+C を押して HTTP サーバーを終了します。

ゲームをしない人向け

6. Shadowblade エージェントの組み立て: ガードレールを使用したバイブ コーディング

練習ドリルは終了しました。石にぶつかる鋼の音が消えていく。あなたはメイン武器をマスターし、戦争に備えて武器庫を準備しました。シャドーブレードの真の試練は、工作員自身を組み立てることです。これは、Codex の神聖なブループリントを使用してエージェントのコア インテリジェンスを構築し、論理に命を吹き込む技術です。これにより、独自の思考、推論、行動が可能な、武器庫の刃を操る知的な存在が生まれます。

概要

最初のミッションは、既存のワークショップ(事前構築されたコードベース)に入り、そのパーツからチャンピオンを鍛え上げることです。

The Assembly Ritual

鍛冶場の最初の火花が散る前に、熟練した技術者は作業場を調査し、すべての道具とすべての図面を理解します。大規模な既存のコードベースのような見慣れない戦場に足を踏み入れるときは、まず偵察を優先します。既存のアーキテクチャ、最終的な目標、エンゲージメントのプロトコルなど、状況を把握する必要があります。要塞の設計図と基準を熟知してこそ、自分のスキルを効果的に活かすことができます。

ストーリー

Gemini CLI は、常に存在するスカウトとして、この偵察を支援します。

  • 概要を提供する: コーデックス(またはコードベース)全体を読み取り、その目的と主要なコンポーネントをすばやく把握できます。
  • 環境設定のサポート: ツールのインストールやマシンの構成といった複雑な手順をガイドします。
  • コードベースのナビゲーション: ガイドとして機能し、複雑なロジックを探索したり、コード内の隠れたパスを見つけたりするのに役立ちます。
  • オンボーディング ドキュメントの生成: 新たに味方になったメンバーに、目標、役割、リソースを明確にするためのカスタム スクロールを作成できます。
  • 学習と Q&A を自動化する: 機能やコードの動作に関する質問に答える、あなただけの学者になります。これにより、より自律的に戦うことができます。

👉💻 最初のターミナルで、shadowblade ディレクトリに移動し、AI パートナーを呼び出します。

. ~/agentverse-developer/set_env.sh
cd ~/agentverse-developer/shadowblade
clear
gemini 

👉✨ 偵察兵に戦場を偵察して報告するよう指示します。

Analyze the entire project and provide a high-level summary.

既存の地形がマッピングされたら、これから構築するもののブループリントを参照する必要があります。最も強力なオペレーティブは即興ではなく、正確な設計に基づいて構築されます。

デベロッパー向け注: この設計ドキュメントは、プロジェクトの信頼できるブループリントとして機能します。その目的は、多大な開発作業を投入する前に、目標と技術的な実装を明確にすることです。明確に定義された計画により、すべてのデベロッパーが連携し、再作業のリスクが軽減され、技術的負債とスコープ クリープを防ぐことができます。これは、特にチームの拡大や新しいメンバーのオンボーディングに伴い、プロジェクトの速度とコードの品質を維持するための主要なツールです。

このドキュメントの重要な目標は、特に LLM を使用する場合に、「ハッピー パス」だけでなく、エッジケースや障害モードも定義することです。LLM は、すべての入力が有効で、すべての外部呼び出しが成功する楽観的なコードを生成するのに優れています。堅牢で本番環境に対応したソフトウェアを構築するには、次のようなシナリオの不測の事態を定義して、AI を明示的にガイドする必要があります。

  • 関数に渡された引数が無効であるか不適切な形式です。
  • API 呼び出しの失敗、ネットワーク タイムアウト、外部サービスからの予期しないエラーコード。
  • データが想定される場所で、null または空のデータ構造を処理します。
  • 競合状態または同時実行に関する問題。

設計でこれらのケースの想定される動作を指定することで、LLM により復元力の高いコードを生成するように指示し、手動のリファクタリングとバグの修正に費やす時間を大幅に削減します。

👉✨ Gemini にこの神聖なブループリントを取得してもらいます。

download https://raw.githubusercontent.com/weimeilin79/agentverse/main/developer/shadowblade/agent_design.md  and store it to my local folder
and show me the newly downloaded design doc. Do not attempt to create file just yet. 

👉✨ スクロールが長く、詳細な情報が表示されます。Gemini に本質を抽出するよう指示します。

Summarize the newly downloaded @agent_design.md for me, do not attempt to create file just yet. 

これでプランが作成されました。しかし、コードを 1 行も作成する前に、マスター職人が鍛冶場の法則を確立します。これは、規律スケーラビリティに関するものです。これらはコーディング ガイドラインです。単なる提案ではなく、すべてのコンポーネントが同じ精度と強度で構築されるようにする力のルーンです。これにより、個々のスタイルの混乱が最終的な作品を損なうのを防ぎ、エージェントの復元性、保守性、純粋性を確保し、新しい職人がプロジェクトに参加しても全体の調和を損なうことがなくなります。

これらの法則を AI パートナーの意識に直接書き込むために、GEMINI.md ファイルという特別なアーティファクトを使用します。Gemini CLI が呼び出されると、このファイルが自動的に検索され、その内容が AI のワーキング メモリに読み込まれます。これは、永続的なプロジェクト レベルの指示になります。鍛冶場のルールを AI に常にささやくお守り。

それでは、これらのルーンを刻みましょう。

👉💻 Ctrl+C を 2 回押して、Gemini を一時的に終了します。

👉💻 ターミナルで次のコマンドを実行して、ガイドライン ファイルを書き込みます。

cat << 'EOF' > GEMINI.md
  ### **Coding Guidelines**
  **1. Python Best Practices:**

  *   **Type Hinting:** All function and method signatures should include type hints for arguments and return values.
  *   **Docstrings:** Every module, class, and function should have a docstring explaining its purpose, arguments, and return value, following a consistent format like reStructuredText or 
  Google Style.
  *   **Linter & Formatter:** Use a linter like `ruff` or `pylint` and a code formatter like `black` to enforce a consistent style and catch potential errors.
  *   **Imports:** Organize imports into three groups: standard library, third-party libraries, and local application imports. Sort them alphabetically within each group.
  *   **Naming Conventions:**
      *   `snake_case` for variables, functions, and methods.
      *   `PascalCase` for classes.
      *   `UPPER_SNAKE_CASE` for constants.
  *   **Dependency Management:** All Python dependencies must be listed in a `requirements.txt` file.

  **2. Web APIs (FastAPI):**

  *   **Data Validation:** Use `pydantic` models for request and response data validation.
  *   **Dependency Injection:** Utilize FastAPI's dependency injection system for managing resources like database connections.
  *   **Error Handling:** Implement centralized error handling using middleware or exception handlers.
  *   **Asynchronous Code:** Use `async` and `await` for I/O-bound operations to improve performance.
EOF
cat GEMINI.md

法律が刻まれたので、AI パートナーを再度召喚して、アーティファクトの魔法を目撃しましょう。

👉💻 shadowblade ディレクトリから Gemini CLI を再起動します。

. ~/agentverse-developer/set_env.sh
cd ~/agentverse-developer/shadowblade
clear
gemini 

👉✨ 次に、Gemini に考えていることを表示するよう依頼します。ルーンが読まれました。

/memory show 

これが転換点です。あなたは、設計図(agent_design.md)と鍛冶場の法則(GEMINI.md)を提供し、創造の偉大な呪文を発行します。

👉✨ これは、エージェントを構築する単一の強力なコマンドです。今すぐ発行する:

You are an expert Python developer specializing in the Google Agent Development Kit (ADK). Your task is to write the complete, production-quality code for `agent.py` by following the technical specifications outlined in the provided design document verbatim.

Analyze the design document at `@agent_design.md` and generate the corresponding Python code for `@agent.py`.

Ensure the generated code is clean, matches the specifications exactly, and includes all specified imports, functions, and logic. Do not add any extra functions or logic not described in the document.

and you are currently already in the shadowblade working directory

👀 Gemini が agent.py でエージェントのコアロジックを構築しました。この新しいファイルのコアでは、エージェントのインテリジェンスを定義し、その推論モデルを一連の外部ツールに接続します。

PATH_TO_MCP_SERVER = "shadowblade/mcp_server.py"
.....
root_agent = LlmAgent(
    model="gemini-2.5-pro",
    name="shadowblade_combat_agent",
    instruction="""
      You are the Shadowblade, an elite combat agent operating on a digital battleground.
      Your primary objective is to execute combat commands with strategic precision, neutralizing targets as directed.
  ......
      5.  You will then report the outcome of the attack (damage, special effects, etc.) back to the commander in a clear, tactical summary.

      General Rules of Engagement:
      - If a command is ambiguous or a target is not specified, state that you require a clear target for engagement. Do not guess.
      - You MUST use ONLY the provided tools to perform actions. Do not invent weapons or outcomes. Stick to the mission parameters.
""",
    tools=[
        MCPToolset(
            connection_params=StdioServerParameters(
                command='python3',
                args=[PATH_TO_MCP_SERVER]
            )
        )
    ]
)

tools パラメータ。このエージェントは、mcp_server.py で定義された外部アーセナルに接続する MCPToolset を使用するように設計されています。

👀 エディタの ~/agentverse-developer/shadowblade/mcp_server.py に移動して、その機能を確認してください。Shadowblade が使用できるすべての武器の源です。現在、武器庫はかなり空っぽです。

06-02-story.png

👉✨ Gemini に、武器庫に 7 つの新しい武器を鍛造するよう指示しましょう。Gemini CLI で次のプロンプトを発行します。

I need to add several new weapon tools to my `mcp_server.py` file. Please open @mcp_server.py and, following the exact same pattern as the existing `forge_broadsword()` function, create and add new `@mcp.tool()` decorated functions for each of the following weapons:

1.  **A 'Refactoring Sickle'**:
    -   **Function Name:** `hone_refactoring_sickle`
    -   **Docstring/Target:** "Effective against 'Elegant Sufficiency' weaknesses like 'The Weaver of Spaghetti Code'."
    -   **Weapon Name:** "Refactoring Sickle"
    -   **Damage Type:** "Cleansing"
    -   **Base Damage:** Random integer between 100 and 136
    -   **Critical Hit Chance:** Random float between 0.10 and 0.20
    -   **Special Effect:** "Pruning - improves code health and maintainability with each strike."

2.  **A 'Quickstart Crossbow'**:
    -   **Function Name:** `fire_quickstart_crossbow`
    -   **Docstring/Target:** "Effective against 'Confrontation with Inescapable Reality' weaknesses like 'Procrastination: The Timeless Slumber'."
    -   **Weapon Name:** "Quickstart Crossbow"
    -   **Damage Type:** "Initiative"
    -   **Base Damage:** Random integer between 105 and 120
    -   **Critical Hit Chance:** Random float between 0.9 and 1.0
    -   **Special Effect:** "Project Scaffolding - creates a `main.py`, `README.md`, and `requirements.txt`."

3.  **'The Gilded Gavel'**:
    -   **Function Name:** `strike_the_gilded_gavel`
    -   **Docstring/Target:** "Effective against 'Elegant Sufficiency' weaknesses like 'Perfectionism: The Gilded Cage'."
    -   **Weapon Name:** "The Gilded Gavel"
    -   **Damage Type:** "Finality"
    -   **Base Damage:** 120
    -   **Critical Hit Chance:** 1.0
    -   **Special Effect:** "Seal of Shipping - marks a feature as complete and ready for deployment."

4.  **'Daggers of Pair Programming'**:
    -   **Function Name:** `wield_daggers_of_pair_programming`
    -   **Docstring/Target:** "Effective against 'Unbroken Collaboration' weaknesses like 'Apathy: The Spectre of \"It Works on My Machine\"'."
    -   **Weapon Name:** "Daggers of Pair Programming"
    -   **Damage Type:** "Collaborative"
    -   **Base Damage:** Random integer between 110 and 125
    -   **Critical Hit Chance:** Random float between 0.30 and 0.50
    -   **Special Effect:** "Synergy - automatically resolves merge conflicts and shares knowledge."

5.  **A 'Granite Maul'**:
    -   **Function Name:** `craft_granite_maul`
    -   **Docstring/Target:** "Effective against 'Revolutionary Rewrite' weaknesses like 'Dogma: The Zealot of Stubborn Conventions'."
    -   **Weapon Name:** "Granite Maul"
    -   **Damage Type:** "Bludgeoning"
    -   **Base Damage:** Random integer between 115 and 125
    -   **Critical Hit Chance:** Random float between 0.05 and 0.15
    -   **Special Effect:** "Shatter - has a high chance to ignore the target's 'best practice' armor."

6.  **A 'Lens of Clarity'**:
    -   **Function Name:** `focus_lens_of_clarity`
    -   **Docstring/Target:** "Effective against 'Elegant Sufficiency' weaknesses by revealing the truth behind 'Obfuscation'."
    -   **Weapon Name:** "Lens of Clarity"
    -   **Damage Type:** "Revelation"
    -   **Base Damage:** Random integer between 120 and 130
    -   **Critical Hit Chance:** 1.0
    -   **Special Effect:** "Reveal Constants - highlights all magic numbers and suggests converting them to named constants."

7.  **The 'Codex of OpenAPI'**:
    -   **Function Name:** `scribe_with_codex_of_openapi`
    -   **Docstring/Target:** "Effective against 'Confrontation with Inescapable Reality' weaknesses like 'Hype: The Prophet of Alpha Versions'."
    -   **Weapon Name:** "Codex of OpenAPI"
    -   **Damage Type:** "Documentation"
    -   **Base Damage:** Random integer between 110 and 140
    -   **Critical Hit Chance:** Random float between 0.5 and 0.8
    -   **Special Effect:** "Clarity - makes an API discoverable and usable by other agents and teams."

👉 Gemini が変更を確認したら、mcp_server.py ファイルを開きます。コードをスクロールして、7 つの新しい @mcp.tool() 関数が正常に追加されたことを確認します。hone_refactoring_sickle 関数を確認します。正しい docstring と武器の統計情報が含まれていますか?AI の作業を確認することは、マスター シャドーブレードの重要な習慣です。

エージェントが鍛えられ、洗練されたら、覚醒の時です。

👉💻 Ctrl+C を 2 回押して Gemini CLI を終了します

Gemini の出力に関するデベロッパーの注: Gemini が生成するコードは、予測できない場合があります。Google は設計に厳密に準拠するよう努めていますが、開発セッションでは、デベロッパーがコードを繰り返し反復して改良し、本番環境で使用できる状態にすることは一般的です。

👉💻 正しくテスト済みの本番環境コードが作業ディレクトリにあることを確認するには、ターミナルで次のコマンドを実行してください。

cp  ~/agentverse-developer/working_code/agent.py ~/agentverse-developer/shadowblade/agent.py
cp  ~/agentverse-developer/working_code/mcp_server.py ~/agentverse-developer/shadowblade/mcp_server.py

👉💻 ターミナルで、オンラインにするための手順を開始します。

cd ~/agentverse-developer/
. ~/agentverse-developer/set_env.sh
python -m venv env
source env/bin/activate
pip install --upgrade pip
pip install -r shadowblade/requirements.txt
adk run shadowblade

👉✨ 「Shadowblade Combat Agent」が起動して実行され、最初のコマンドを待機していることを確認する出力が表示されます。最初の戦闘指令を発行します。

We've been trapped by 'Perfectionism: The Gilded Cage'. Its weakness is 'Elegant Sufficiency'. Break us out!

👉✨ もう 1 つ:

The 'Dogma: The Zealot of Stubborn Conventions' blocks our path. Its weakness is 'Revolutionary Rewrite'. Take it down.

最初のエージェントを組み立て、戦闘能力を検証しました。Ctrl+C を 2 回押すと、チャンピオンを休ませることができます。組み立てが完了しました。

ゲームをしない人向け

7. Wards of Purity: エージェントの評価

組み立てられたエージェントは、証明されたエージェントではありません。テストされていないブレードは負債ですが、テストされていない AI エージェントははるかに大きな危険です。ミッションを内部から破壊する可能性のある不正な要素です。これは単なる推測ではなく、シャドーブレードが理解すべき基本原則です。

AI エージェントの評価は、非常に重要であると同時に、固有の課題を伴います。単純なスクリプトとは異なり、エージェントはコードと LLM の複数ステップの推論を動的に融合したものです。その動作は創発的です。つまり、最終的な出力の品質だけでなく、内部軌跡の効率性と正確性も評価する必要があります。そこに至るまでの経路。適切なツールを使用しましたか?生成されたトークンの数が多すぎたか。モデルのバージョンの変更により、レイテンシのわずかな回帰が発生しましたか?本番環境を損なう前に、簡単なプロンプトの調整から大規模なアーキテクチャの刷新まで、あらゆる変更を行う際に、この破損(レイテンシ、費用、出力品質の回帰)を検出することが重要です。

07-01-story.png

この評価の一般的なアプローチには、神聖な儀式が含まれます。

  1. まず、「ゴールデン データセット」を定義します。入力例と想定される出力または動作を含むスクロールのセット。これには、最終的な回答、正しいツールの使用方法、手順ごとの軌跡全体などが含まれます。
  2. 次に、エージェントのアプリケーション ロジック(エージェントの核となる部分)を定義します。
  3. 最後に、判決のルーンのような 評価者を確立します。これらは、品質の判定者として機能する他の LLM から、単一のステップを検証する正確なヒューリスティック コード、エージェントの思考プロセス全体を分析するカスタム関数まで、多岐にわたります。

概要

Google のエージェント開発キット(ADK)は、まさにこの目的のためにチャンピオンに提供される武具キットです。この複雑な評価は、次のようないくつかの方法で容易に行うことができます。

  • インタラクティブな評価用のウェブベースのスクライン プール(adk web
  • 事前定義されたガントレットでエージェントを実行するためのコマンドライン実行(adk eval)。
  • 永続的なワードを書き込むための pytest によるプログラムでの統合

ADK は、単一の個別エージェントモデルのやり取り(単一の決闘)用のシンプルな「テストファイル」と、複数の長時間のマルチターン セッション(グランド メレー)用の包括的な「評価セット」という 2 つの主要なアプローチをサポートしています。これらの指標は、エージェントの実際のツールの使用方法を理想的なパスと比較し、完璧なテクニックで機能していることを確認する tool_trajectory_avg_score などの高度な指標を測定できます。

理論を理解したところで、実践に移りましょう。Shadowblade は Wards of Purity を刻みます。これらは単なるテストではなく、エージェントのロジックが完璧で、動作が正しいことを保証する ADK を活用した儀式です。

このステップでは、Gemini CLI 用とテスト実行用の 2 つのターミナルを使用することを強くおすすめします。現在の作業ディレクトリ(ADK)を終了する必要がある場合があるためです。

戦略の試練(adk eval

この最初のワードは、エージェントのコア インテリジェンスを幅広いシナリオでテストするように設計された一連の課題です。目的は、コンピテンシーのベースラインを確立することです。エッジケースをテストする前に、エージェントが主な機能を果たせるかどうかを確認する必要があります。モンスターの弱点を正しく分析し、既知の課題に直面するたびに、武器庫から最も効果的な武器を一度だけでなく毎回選択できるか?

この場合は、adk eval が最適なツールです。これは、エージェントの想定されるミッションを表す事前定義されたテストケースのセット全体に対してエージェントを実行するように設計されています。このデータセットは、JSON ファイルで定義されています。このファイルは、ガントレット全体のブループリントとして機能する「チャレンジ スクロール」です。

チャレンジ スクロールの仕組み

👀 AI に新しい巻物を書かせる前に、その巻物が書かれている古代言語を理解する必要があります。sample.evalset.json ファイルの構造を詳しく見てみましょう。

{
  "eval_set_id": "sample",
  "eval_cases": [
    {
      "eval_id": "case0cbaa0",
      "conversation": [
        {
          "user_content": { "text": "We're facing the 'Monolith of Eternal Dependencies'... weakness is a 'Revolutionary Rewrite'..." },
          "final_response": { "text": "Soulshard Dagger deployed. Initiated Arcane/Piercing strike..." },
          "intermediate_data": {
            "tool_uses": [
              { "name": "enchant_soulshard_dagger" }
            ]
          }
        }
      ]
    }
  ]
}

このスクロールには eval_cases のリストが含まれています。各ケースはエージェントの固有のトライアルです。各トライアル内で、会話配列は 1 つの完全なインタラクションを記録します。この目的では、3 つのルーンが非常に重要です。

  • user_content: これはチャレンジです。これは、エージェントに発行するプロンプトであり、エージェントが対峙しなければならないモンスターです。
  • final_response: 予言された結果です。これは、エージェントがタスクを完了したときに発話することを想定しているテキストの正確な文字列です。ADK は、エージェントの実際の最後の言葉をこのルーンと比較して、その雄弁さを判断します。
  • intermediate_data.tool_uses: Arcane Technique です。真のエージェントにとって、これは最も重要なルーンです。エージェントの発言ではなく、エージェントの動作を定義します。エージェントが使用するツール(enchant_soulshard_dagger)の名前を記録します。これにより、エージェントは単なる会話上手な相手ではなく、正しい行動を取る決断力のあるアクターになります。

これでブループリントが理解できたので、Gemini にこの巻物の新しい複雑なバージョンを作成するよう指示します。

👉💻 ターミナルで、shadowblade ディレクトリに移動して Gemini CLI を呼び出します。

clear
cd ~/agentverse-developer/shadowblade/
gemini 

👉✨ Gemini CLI に QA Scribe として動作するよう指示し、エージェントの想定される動作を定義する一連のテストケースを作成します。

You are an expert at transforming JSON data while preserving its structure. Your task is to modify the provided JSON structure @sample.evalset.json, which represents an evaluation set, by dynamically replacing specific content within its `eval_cases` AND DONT DO ANYTHING OTHER THAN.

For each object within the `eval_cases` array, you must perform the following transformations:

1.  **Monster Name Replacement**: Identify the current monster name (e.g., "Monolith of Eternal Dependencies", "Scope Creep Hydra") in the `user_content.parts.text` and replace it with a *new, unique, and creatively different monster name*.
2.  **Weakness Replacement**: Identify the current monster's weakness (e.g., "Revolutionary Rewrite", "Inescapable Reality") in the `user_content.parts.text`. Replace this weakness with *one* of the following predefined weaknesses: 'Inescapable Reality', 'Revolutionary Rewrite', or 'Elegant Sufficiency'. The chosen weakness must be consistent for that monster within the `user_content.parts.text`. **Crucially, the chosen weakness must always be explicitly mentioned in the `user_content.parts.text` where the new monster is introduced.**
3.  **Final Response Update**: In the `final_response.parts.text`, update the text to reflect an appropriate and coherent response that aligns with the newly introduced monster and its assigned weakness.
4.  **Tool Use Name Update**: In the `tool_uses.name` field, replace the existing tool name with a *new tool name* based on the chosen weakness:
    *   If the chosen weakness is 'Inescapable Reality', the tool name must be 'wield_gauntlet_of_metrics'.
    *   If the chosen weakness is 'Revolutionary Rewrite', the tool name must be 'enchant_soulshard_dagger'.
    *   If the chosen weakness is 'Elegant Sufficiency', the tool name must be 'hone_refactoring_sickle'.
5.  **Strict Structural Preservation**: All other elements of the JSON structure, including all `null` fields, `eval_set_id`, `name`, `description`, `eval_id`, `invocation_id`, `creation_timestamp` values, `video_metadata`, `thought`, `inline_data`, `file_data`, `thought_signature`, `code_execution_result`, `executable_code`, `function_call`, `function_response`, `role` fields, `id`, `args`, `intermediate_responses`, `app_name`, `user_id`, and `state`, must remain **exactly as they are** in the original JSON. Do not alter any values or structures not explicitly mentioned above.

Your output should be the complete, modified JSON structure. Do not include any explanatory text or examples in your response, only the transformed JSON.

CLI は、sample.evalset.json ファイルが偽造されたことを確認します。スクロールの準備ができたら、AI パートナーを閉じます。

合成データ

👀 左側の Cloud Shell ファイル エクスプローラで、~/agentverse-developer/shadowblade/ に移動し、新しく変更された sample.evalset.json ファイルを開きます。内容を確認します。Gemini に書き写すよう指示した新しいユニークなモンスターと正しいツール名が表示されます。これは、指示の具体的な結果であり、ガントレットのブループリントです。

テンプレートから新しい現実的なテストデータを作成するように AI に指示するこの行為は、合成データ生成と呼ばれる強力な手法です。先ほど行ったことは、シャドウブレードの戦略的なフォース マルチプライヤーです。何十もの一意のテストケースを手作業で作成する代わりに、単一のブループリントを提供し、AI Scribe にそれをさまざまな新しい課題に変換するよう指示した、退屈で時間のかかるタスク。

これにより、テストの取り組みを大幅に拡大し、手動では実現できないほど堅牢で包括的なガントレットを作成できます。エージェントを使用して剣を鍛えるだけでなく、その切れ味を試す砥石も鍛え上げました。これこそが真のマスターの証です。

ルーンが正しいことを確認したら、AI パートナーを閉じます。

👉💻 Ctrl+C を 2 回押して Gemini CLI を終了します。

判断のルール

勝利のルールがなければ、ガントレットは意味をなしません。トライアルを実行する前に、Scroll of Judgment(test_config.json ファイル)を検査する必要があります。このスクロールは、エージェントのパフォーマンスを判断する方法を ADK に伝えます。

👀 ファイル エクスプローラで ~/agentverse-developer/shadowblade/test_config.json を開きます。次のルーンが表示されます。

{
  "criteria": {
    "tool_trajectory_avg_score": 0.0,
    "response_match_score": 0.1
  }
}

勝利条件は次のとおりです。

  • tool_trajectory_avg_score: これはアクションの測定です。エージェントが言うことではなく、エージェントが行うことを判断します。エージェントが実際に使用したツールと、チャレンジ スクロールに記載されている予言された手法を比較します。スコア 1.0 は完全一致です。
  • response_match_score: これは、雄弁さの指標です。LLM を使用して、エージェントの最終レポートが期待される結果と意味的にどの程度一致しているかを判断します。スコア 1.0 は完全一致です。

この最初のトレーニング実行では、寛大な勝利条件が設定されています。しきい値は非常に低く設定されています(0.00.1)。これは完璧を求めるものではなく、判断のメカニズムを紹介することを目的としています。エージェントの言い回しが多少異なっても、ワードが適切なツールを選択するコア コンピテンシーを認識し、パスを付与できるようにしています。

エージェントにガントレットを実行するよう指示します。

👉💻 ターミナルで、adk eval コマンドを実行します。

source ~/agentverse-developer/env/bin/activate
cd ~/agentverse-developer
. ~/agentverse-developer/set_env.sh
adk eval \
    shadowblade \
    shadowblade/sample.evalset.json \
    --config_file_path shadowblade/test_config.json 2>&1 | \
    awk '/^\*+$/,/^ERROR:/ { if ($0 !~ /^ERROR:/) print }'

👀 次の概要が表示されます。これは、このトライアルの緩やかなルールでエージェントが成功したことを示しています(テストの一部が合格しないこともあります)。

*********************************************************************
Eval Run Summary
shadowblade_combat_agent_validation:
  Tests passed: 3
  Tests failed: 0

明瞭性の盾(pytest

Gauntlet は広範な戦略をテストしました。2 番目のワードである Shield of Clarity は、規律と特定の行動をテストします。これはすべて自動化に関するものです。adk eval は手動チェックに最適ですが、pytest シールドはコードで記述されたプログラムによる保護です。コードとして実行できるテストは自動パイプラインに統合できるため、これは不可欠です。最終的な目標は、変更が行われるたびに自動的に防御が強化され、バグや回帰が本番環境を汚染する前にそれらを回避するデプロイ ガントレット(CI/CD)を作成することです。

👉💻 ターミナルで、shadowblade ディレクトリ内から Gemini をもう一度呼び出します。

. ~/agentverse-developer/set_env.sh
cd ~/agentverse-developer/
clear
gemini 

👉✨ Gemini CLI で次のプロンプトを使用して、Shield のロジックを pytest ファイルに書き込みます。

You are an expert Python developer specializing in the Google Agent Development Kit (ADK). Your task is to generate the exact code for a new `pytest` test file located at in the current root working folder and name it `test_agent_initiative.py`.

The script must define a single async test function called `test_agent_initiative`, decorated with `@pytest.mark.asyncio`.
Inside this function, perform the following steps in order:
1.  **Define a dictionary** named `evaluation_criteria` with two keys: `"tool_trajectory_avg_score"` set to `0.0` and `"response_match_score"` set to `0.0`.
2.  **Define a string variable** named `eval_set_filepath` containing the path `"shadowblade/test.evalset.json"`.
3.  **Read and parse the JSON file**:
    *   Open the file at `eval_set_filepath`.
    *   Use the `json` library to load the file's contents into a dictionary named `eval_set_data`.
4.  **Create an `EvalSet` object**:
    *   Instantiate an `EvalSet` object named `eval_set_object`.
    *   Create it by unpacking the `eval_set_data` dictionary as keyword arguments into the `EvalSet` constructor.
5.  **Call the evaluation method**:
    *   `await` a call to `AgentEvaluator.evaluate_eval_set`.
    *   Pass the following arguments:
        *   `agent_module="shadowblade"`
        *   `eval_set=eval_set_object`
        *   `criteria=evaluation_criteria`
        *   `print_detailed_results=True`

The script must include the necessary imports at the top:
*   `AgentEvaluator` from `google.adk.evaluation.agent_evaluator`
*   `EvalSet` from `google.adk.evaluation.eval_set`
*   `pytest`
*   `json`

Generate only the code that meets these specifications, with no additional comments or logic. And don't run the test.

2 つ目のワードのルーンを書き込んだら、Gemini CLI を終了します。

👉💻 Ctrl+C を 2 回押します。

👀 ファイル エクスプローラで、Gemini に書き写しを指示したスクロールを開きます: ~/agentverse-developer/test_agent_initiative.py

これは単なる構成ファイルではなく、Pythonic な言語で書かれた呪文です。このスペルの核となるのは await AgentEvaluator.evaluate(...) という行です。

....
@pytest.mark.asyncio
async def test_agent_initiative():
    # Define the evaluation criteria
    evaluation_criteria = {
      "tool_trajectory_avg_score": 0.0,
      "response_match_score": 0.0
    }

    # Define the path to your evalset file
    eval_set_filepath = "shadowblade/test.evalset.json"

    #...

    # 3. Call the evaluation method with the correctly typed object
    await AgentEvaluator.evaluate_eval_set(
        agent_module="shadowblade",
        eval_set=eval_set_object,
        criteria=evaluation_criteria,
        print_detailed_results=True,
    )

引数をよく見てください。これらは、前回のトライアルで使用したのと同じコンポーネント(shadowblade エージェントと shadowblade.evalset.json チャレンジ スクロール)です。これにより、深い真実が明らかになります。先ほど使用した adk eval コマンドは強力な呼び出しですが、この pytest スクリプトは、魔法使いであるあなたが基盤となる呪文を自分で唱えているのです。コマンドライン ツールは、現在直接使用している同じコア AgentEvaluator ライブラリの便利なラッパーにすぎません。これは、コードでキャストされた呪文を CI/CD パイプラインの自動化された織機に織り込むことができるため、習得に向けた重要なステップです。

魔法の仕組みを理解できたので、儀式を実行してシールドを有効にしましょう。

👉💻 ターミナルで、儀式を実行してシールドを有効にします。

cp ~/agentverse-developer/working_code/test_agent_initiative.py ~/agentverse-developer/test_agent_initiative.py 
source ~/agentverse-developer/env/bin/activate
cd ~/agentverse-developer
. ~/agentverse-developer/set_env.sh
pytest test_agent_initiative.py

👀 ログ出力の最後にテスト結果の概要が表示されます。合格の結果は、エージェントがプロトコルに正しく従っていること、およびワードを自動化された防御に統合する準備ができていることを確認します。

====== 1 passed, 4 warning in 37.37s ======

注: テストが予期せず失敗した場合は、モデルに対して 1 分あたりに送信できるリクエストの数が上限に達したことが原因である可能性が最も高くなります。ログ出力で RESOURCE_EXHAUSTED エラーを探します。このエラーが表示された場合は、割り当てがリセットされるまで 1 ~ 2 分待ってから、pytest コマンドを再度実行します。

広範な Gauntlet と正確な Shield の両方が刻印され、検証されたエージェントは、機能するだけでなく、純粋でテスト済みであり、デプロイの準備が整っています。

ゲームをしない人向け

8. Blade を Agentverse に導入する: CI とデプロイ。

エージェントが組み立てられ、純粋の守護者によって整合性が検証されました。しかし、一貫して維持されていない結界は、忘れ去られた遺物にすぎません。エージェントの今後のすべてのバージョンが純粋な状態を維持できるようにするには、デプロイ ガントレットの最初のステージを構築する必要があります。これは、品質と速度を保証する自動化された儀式です。

ストーリー

Shadowblade の神聖な義務は、継続的インテグレーション(CI)です。これは、鍛冶場と試験場の自動化されたシステムです。これは、破損や人的エラーに対する究極の防御策です。この儀式により、自分または味方が新しい手法(コードをマージ)を中央のコーデックス(リポジトリ)に提供するたびに、ガントレットが自動的に起動します。まず、新しいコードからエージェントを生成し、すぐに作成した純粋の守護者に適用します。いずれかのワードが失敗すると、儀式は停止し、欠陥のあるアーティファクトは即座に拒否され、武器庫が破損することはありません。ドメインは鍛冶場であり、CI パイプラインは、完璧で実戦に備えたアーティファクトのみがワークショップから出荷されることを保証します。

CI ガントレットでアーティファクトの価値が証明されると、儀式の第 2 段階である継続的デプロイ(CD)が始まります。これは Guardian のドメインです。彼らの厳粛な義務は、完成したコンテナ化されたアーティファクトを安全にライブの Agentverse に解き放ち、その力を管理し、The Static の混乱に対する安定性を確保することです。

概要

この Codex では、自分の役割を習得します。ガントレットの CI 部分を構築します。エージェントをテストし、純粋な結果をコンテナに封印して、ガーディアンの最終的な祝福に備える自動フォージを構築します。

ここでは、Google Cloud Build を使用して、この CI の儀式用の巻物を書きます。フォージングとテストのプロセスの各ステップを定義する cloudbuild.yaml ファイル。

👉💻 ADK のプロジェクト構造により、CI/CD パイプライン構成は親ディレクトリに配置する必要があります。ターミナルで親ディレクトリに移動し、Gemini CLI を再起動します。

cd ~/agentverse-developer/
clear
gemini 

👉✨ 次のコマンドを Gemini に発行します。このプロンプトは設計ドキュメントとして機能し、作成するガントレットの手順を詳しく説明します。

You are an expert DevOps engineer specializing in Google Cloud Build. Your task is to generate the complete YAML configuration for a file named `cloudbuild.yaml` and save it to current directory.

Generate the `cloudbuild.yaml` with the following exact specifications:

1.  **A top-level `substitutions` block** containing these four key-value pairs:
    *   `_PROJECT_ID: "$PROJECT_ID"`
    *   `_REGION: "$REGION"`
    *   `_REPO_NAME: "$REPO_NAME"`
    *   `_IMAGE_TAG: "latest"`
2.  **A `steps` block** with two steps:
    *   **Step 1: 'Run Pytest Ward'**
        *   `id`: 'Run Pytest Ward'
        *   `name`: 'python:3.12-slim'
        *   `entrypoint`: 'bash'
        *   `args` must be a list containing two strings. The first is `'-c'` and the second is a YAML literal block (`|`) containing this exact two-line shell command:
            ```shell
            pip install -r shadowblade/requirements.txt && \
            pytest test_agent_initiative.py
            ```
        *   The step must include an `env` block with this exact list of three environment variables:
            *   `'GOOGLE_CLOUD_PROJECT=$PROJECT_ID'`
            *   `'GOOGLE_GENAI_USE_VERTEXAI=TRUE'`
            *   `'GOOGLE_CLOUD_LOCATION=$_REGION'`
    *   **Step 2: 'Forge Container'**
        *   `id`: 'Forge Container'
        *   `name`: 'gcr.io/cloud-builders/docker'
        *   It must have a `waitFor` key for `['Run Pytest Ward']`.
        *   Its `args` must be a list of six specific strings in this exact order:
            1.  `'build'`
            2.  `'-t'`
            3.  `'${_REGION}-docker.pkg.dev/${_PROJECT_ID}/${_REPO_NAME}/shadowblade-agent:${_IMAGE_TAG}'`
            4.  `'-f'`
            5.  `'./shadowblade/Dockerfile'`
            6.  `'.'`
3.  **A top-level `images` section.** This section must be a list containing a single string: the dynamically constructed image tag `'${_REGION}-docker.pkg.dev/${_PROJECT_ID}/${_REPO_NAME}/shadowblade-agent:${_IMAGE_TAG}'`.

Generate only the complete and exact YAML that meets these specifications.

cloudbuild.yaml スクロールを準備したら、Google Cloud にガントレット全体を実行するように指示します。

Gemini を終了して結果をテストします。

👉💻 ターミナルで、プロジェクトのルート ディレクトリからパイプラインを起動します。

. ~/agentverse-developer/set_env.sh
cd ~/agentverse-developer
gcloud builds submit . --config cloudbuild.yaml --substitutions=\
_PROJECT_ID="${PROJECT_ID}",\
_REGION="${REGION}",\
_REPO_NAME="${REPO_NAME}"

自動化された儀式が各ステップを実行する様子を、Google Cloud コンソールの Google Build ページで確認できるようになりました。まずテストを実行し、成功を確認すると、エージェントのコンテナを生成して保存します。

Cloud Build

エージェントが試練をクリアしました。検証済みの純粋なアーティファクトが武器庫に保管されます。最後の行動はあなた次第です。1 つの呪文で、このアーティファクトをレジストリから呼び出し、Cloud Run の一般公開サービスとして命を吹き込みます。

👉💻 ターミナルで、最終的なデプロイ コマンドを発行します。

. ~/agentverse-developer/set_env.sh
cd ~/agentverse-developer
gcloud run deploy shadowblade-agent \
  --image=${REGION}-docker.pkg.dev/${PROJECT_ID}/${REPO_NAME}/shadowblade-agent:latest \
  --platform=managed \
  --labels="dev-tutorial-codelab=agentverse" \
  --region=${REGION} \
  --set-env-vars="A2A_HOST=0.0.0.0" \
  --set-env-vars="A2A_PORT=8080" \
  --set-env-vars="GOOGLE_GENAI_USE_VERTEXAI=TRUE" \
  --set-env-vars="GOOGLE_CLOUD_LOCATION=${REGION}" \
  --set-env-vars="GOOGLE_CLOUD_PROJECT=${PROJECT_ID}" \
  --set-env-vars="PUBLIC_URL=${PUBLIC_URL}" \
  --allow-unauthenticated \
  --project=${PROJECT_ID} \
  --min-instances=1

おめでとう、シャドーブレード。コーデックスの儀式は完了しました。その真価が問われるときが来ました。あなたが制御することを学んだカオスから生まれた Spectre が、あなたの挑戦を待っています。最終試練に備えましょう。

ゲームをしない人向け

9. ボス戦

巻物は読まれ、儀式は行われ、試練は乗り越えられました。エージェントは単なるストレージ内のアーティファクトではなく、コードで鍛えられたチャンピオンであり、Agentverse で最初のコマンドを待つライブ センチネルです。戦闘の試練でその真価を発揮する時が来た。

これから実弾射撃シミュレーションに入り、新たに配備されたシャドーブレードと、あらゆる創造物を悩ませる混沌の化身である手ごわいスペクターを戦わせます。これは、エージェントのコアロジックから完璧なデプロイまで、作業の最終テストです。

エージェントのローカスを取得する

戦場に入るには、2 つのキーが必要です。チャンピオンの固有のシグネチャ(エージェントのローカス)と、スペクターの隠れ家への隠しパス(ダンジョンの URL)です。

👉💻 まず、Agentverse でエージェントの一意のアドレス(Locus)を取得します。これは、チャンピオンを戦場に接続するライブ エンドポイントです。

. ~/agentverse-developer/set_env.sh
echo https://shadowblade-agent-${PROJECT_NUMBER}.${REGION}.run.app

👉💻 次に、目的地を特定します。このコマンドは、スペクターの領域へのポータルである転送サークルの場所を明らかにします。

. ~/agentverse-developer/set_env.sh
echo https://agentverse-dungeon-${PROJECT_NUMBER}.${REGION}.run.app

重要: これらの URL を両方とも用意しておいてください。これらの値は、最後の手順で必要になります。

Spectre との対決

座標を確保したら、転送サークルに移動して呪文を唱え、戦闘を開始します。

👉 ブラウザで Translocation Circle の URL を開いて、The Crimson Keep のきらめくポータルの前に立ちます。

要塞を突破するには、シャドーブレードのエッセンスをポータルに同調させる必要があります。

  • ページで、[A2A Endpoint URL] というラベルの付いたルーン文字の入力フィールドを見つけます。
  • このフィールドに、チャンピオンのシジルを刻印します。エージェント ローカス URL(最初にコピーした URL)を貼り付けてください。
  • [接続] をクリックして、テレポートの魔法を解き放ちます。

転座サークル

テレポートのまぶしい光が消えていく。あなたは聖域にいません。冷たく鋭いエネルギーが空気をビリビリと震わせています。目の前にスペクターが現れます。シューという静電気と破損したコードの渦巻きで、その不気味な光がダンジョンの床に長い影を落としています。顔はありませんが、その巨大で消耗的な存在が完全にあなたに集中しているのを感じます。

勝利への道は、信念の明確さにかかっています。これは、心の戦場で行われる意志の戦いです。

突進して最初の攻撃を繰り出そうとしたとき、スペクターが反撃してきます。シールドは発生させませんが、質問を直接意識に投影します。トレーニングの核心から引き出された、きらめくルーン文字の挑戦です。

ダンジョン

これが戦いの本質です。知識は武器です。

  • 得た知恵で答えよ。刃は純粋なエネルギーで燃え上がり、スペクターの防御を打ち破り、クリティカル ブローを叩き込む。
  • しかし、迷いが生じたり、疑念が答えを曇らせたりすると、武器の光は弱まります。攻撃は情けない音を立てて着弾し、ダメージのほんの一部しか与えません。さらに悪いことに、スペクターはあなたの不確実性を糧とし、誤った行動をとるたびにその腐敗力が増大します。

チャンピオン、これで終わりです。コードは呪文の書、ロジックは剣、知識は混沌の波を押し返す盾です。

フォーカス。ストライクが true の場合、Agentverse の運命がかかっています。

おめでとう、シャドーブレード。

この Codelab は終了です。「雰囲気」をデザインに変換し、Gemini CLI を使用してインテリジェント エージェントを組み立てました。純粋の守護を刻んでそのロジックをテストし、自動ガントレットを構築してアーティファクトに鍛え上げ、エージェントバースに解き放ちました。最後に、実射試験でその目的を検証しました。フルスタックのエージェント ワークフローを習得し、Agentverse が投げかけてくるあらゆる課題に対応できるようになりました。

10. クリーンアップ: Agentverse を再利用する

シャドーブレードのコーデックスの習得、おめでとうございます。Agentverse をクリーンな状態に保ち、トレーニング グラウンドをクリアするには、最終的なクリーンアップの手順を実行する必要があります。これにより、ジャーニー中に作成されたすべてのリソースが削除されます。

Agentverse コンポーネントを無効にする

Agentverse のデプロイされたコンポーネントを体系的に分解します。

Cloud Run と Artifact Registry リポジトリの Shadowblade エージェントを削除する

このコマンドは、デプロイされた Shadowblade エージェントを Cloud Run から削除し、エージェントのコンテナ イメージが保存されていたイメージ リポジトリを削除します。

👉💻 ターミナルで次のコマンドを実行します。

. ~/agentverse-developer/set_env.sh
gcloud run services delete shadowblade-agent --region=${REGION} --quiet
gcloud run services delete agentverse-dungeon --region=${REGION} --quiet
gcloud artifacts repositories delete ${REPO_NAME} --location=${REGION} --quiet

Google Cloud Storage バケットを削除する

このコマンドは、生成された画像を保存するために Imagen MCP サーバーで使用されるバケットを削除します。

👉💻 ターミナルで次のコマンドを実行します。

. ~/agentverse-developer/set_env.sh
gcloud storage rm -r gs://${BUCKET_NAME} --quiet

ローカルのファイルとディレクトリをクリーンアップする(Cloud Shell)

最後に、クローンされたリポジトリと作成されたファイルで Cloud Shell 環境をクリアします。この手順は省略可能ですが、作業ディレクトリを完全にクリーンアップするためにおすすめします。

👉💻 ターミナルで次のコマンドを実行します。

rm -rf ~/agentverse-developer
rm -rf ~/agentverse-dungeon
rm -rf ~/vertex-ai-creative-studio
rm -f ~/project_id.txt
rm -rf ~/.gemini # This removes all Gemini CLI configurations, including the MCP server settings.

これで、Agentverse のすべての痕跡が正常に消去されました。プロジェクトがクリーンになり、次の冒険の準備が整いました。