デベロッパーにとって、「フロー」状態は神聖なものです。この魔法のような領域にいるとき、アイデアはほぼ何の苦労もなく、コードに変換されます。このフローの最大の敵は、手間のかかる作業です。ドキュメントを読んだり、フレームワークを選んだり、コンテキストを切り替えたりすれば、このクリエイティブな領域から離れることになります。
そこで、エージェント開発キット(ADK)をアップデートしました。今回のアップデートと Gemini CLI を組み合わせると、手間を減らし、エージェントの「バイブ コーディング」体験を促進できます。この組み合わせにより、適切なコンテキストがすべて提供され、Gemini とシームレスな会話ができるようになるので、これまでにないスピードとスムーズさで、皆さんのハイレベルなアイデアを実用的なエージェントに変えることができます。エージェントで現実世界の問題を解決するために費やす時間が増え、ゼロからコーディングする時間を大幅に短縮できます。
今回のアップグレードの中心となるのが、刷新された llms-full.txt
ファイルです。ADK リポジトリに含まれているこのファイルは、ADK フレームワーク全体を綿密に整理した要約ガイドのようなものです。ADK のすべてのコンポーネント、機能、ベスト プラクティスを詳しく記述した地図だと考えることができます。
具体的には、ファイルを 50% 以上小さくして(トークン数が少なくなります!)、LLM が簡単に理解できるようにしました。これが優れたコーディング体験の鍵になります。コンテキスト ウィンドウを消費したり、「コンテキストの腐敗」を起こしたりすることなく、Gemini が ADK を完全に理解できるようになるからです。
つまり、Gemini CLI と組み合わせることで、強力なコーディング アシスタントをはるかに低コストで高精度な ADK のスペシャリストに変えることができます。CLI はフレームワークをネイティブで深く理解し、ハイレベルな計画であっても、正確で自然なマルチエージェント コードに直接変換できます。プロトタイプまでの時間を劇的に短縮し、実用的なエージェントを数分で生成できるので、コーディングに多大な時間を費やすことなく、自由に実験や反復作業を行うことができます。
実際のシナリオがどのようなものになるか、見てみることにしましょう。ここでは、Github の問題の優先順位付けや担当割りを簡単に行えるように、ADK で問題ラベル付け AI エージェントを作成してみます。わずか数ステップで、シンプルなアイデアを実際に動作する ADK エージェントにすることができます。
adk-python から作業ディレクトリに llms-full.txt
をダウンロードします。
まず、Gemini CLI をブレーンストーミングのパートナーとして、ハイレベルな計画を作成します。
デベロッパー: ADK フレームワークを使って、Gemini で Github の個人リポジトリ(https://github.com/google/adk-python)の問題にラベルを付ける AI エージェントを作りたいと考えています。GitHub の問題を読んで、あらかじめ定義してあるラベルを付ける必要があります(最初に一般的なラベルをいくつか考えてください)。どうすればいいか、計画を立ててもらえますか。@llms-full.txt
Gemini CLI:
計画: GitHub 問題ラベル付けエージェント
目的は、Python ベースの AI エージェントを作ることです。このエージェントは、GitHub の問題を分析して、リポジトリであらかじめ定義されているラベルから、関連があるものを適用します。ADK フレームワークを使って、エージェントのロジックと、分析用の Gemini モデルをオーケストレーションします。
フェーズ 1: プロジェクトの設定と構成
1. プロジェクトの初期化: 新しい Python プロジェクト ディレクトリを設定します。
2. 依存関係のインストール: google-adk
ライブラリと、PyGithub
などの GitHub API クライアント ライブラリをインストールします。
3. GitHub 認証: repo
権限を持つ GitHub パーソナル アクセス トークン(PAT)を作成し、エージェントが問題を読み取ってラベルを適用できるようにします。このトークンは環境変数として安全に構成します。
フェーズ 2: GitHub 用カスタムツールの開発
エージェントには、GitHub を操作するためのツールが必要です。そこで、github_tools.py
ファイルを作成し、エージェントに公開する以下の関数を含めます。
get_issue(repo_name, issue_number)
: 特定の GitHub の問題のタイトルと本文を取得します。get_available_labels(repo_name)
: リポジトリに存在するすべてのラベルのリストを取得します。apply_label(repo_name, issue_number, label)
: 特定の問題に特定のラベルを適用します。
フェーズ 3: ラベル付けエージェントの作成
ADK フレームワークを使い、main.py
ファイルに新しいエージェント
を定義します。
1. エージェントの定義: エージェントを設定し、Gemini モデル(例: gemini-1.5-flash
)を使うようにします。
2. ツールの組み込み: フェーズ 2 のカスタム GitHub ツールをエージェントに提供します。
3. 中核となる指示(プロンプト): エージェントのシステム プロンプトで、以下の明確なワークフローに従うよう指示します。
get_issue
ツールを使って問題の内容を把握します。get_available_labels
ツールを使って有効なオプションを確認します。apply_label
ツールを使って選択したラベルを問題に追加します。
フェーズ 4: アプリケーション エントリポイントの作成
main.py
に、エージェントを実行できるシンプルなコマンドライン インターフェース(CLI)を作成します。この CLI は、GitHub リポジトリ名と問題番号を入力として受け取り、エージェントを起動してラベル付けタスクを実行します。
お望みであれば、この計画を実装することもできます。
コードを 1 行も書くことなく、ロジックを定義できました。
次に、ADK の llms-full.txt
を使って、この計画を実際のエージェントに変換します。
デベロッパー: ありがとう。次に、Python ADK を使ってこの計画のコードを生成してください。@llms-full.txt(Gemini CLI は、ADK の llms-full.txt
を参照し、計画を正しい ADK コードに変換します。)
Gemini CLI
import argparse
import asyncio
from google.adk.agents import Agent
from google.adk.runners import Runner
from google.adk.sessions import InMemorySessionService
from google.genai import types
from github_tools import get_issue, get_available_labels, apply_label
labeling_agent = Agent(
name="github_labeler",
model="gemini-1.5-flash",
instruction="""You are an AI agent that labels GitHub issues.
1. First, use the 'get_issue' tool to read the issue's title and body.
2. Then, use the 'get_available_labels' tool to see all possible labels for the repository.
3. Analyze the issue content and choose the most relevant label from the available options.
4. Finally, use the 'apply_label' tool to add the chosen label to the issue.
5. Respond with a confirmation message stating which label was applied.
""",
tools=[get_issue, get_available_labels, apply_label],
)
from github import Github
from config import GITHUB_TOKEN
g = Github(GITHUB_TOKEN)
def get_issue(repo_name: str, issue_number: int) -> str:
"""Fetches the title and body of a specific GitHub issue."""
repo = g.get_repo(repo_name)
issue = repo.get_issue(number=issue_number)
return f"Title: {issue.title}\nBody: {issue.body}"
def get_available_labels(repo_name: str) -> list[str]:
"""Retrieves the list of all existing labels for the repository."""
repo = g.get_repo(repo_name)
labels = [label.name for label in repo.get_labels()]
return labels
def apply_label(repo_name: str, issue_number: int, label: str) -> str:
"""Applies a given label to a specific issue."""
repo = g.get_repo(repo_name)
issue = repo.get_issue(number=issue_number)
issue.add_to_labels(label)
return f"Successfully applied label '{label}' to issue #{issue_number}."
(requirements.txt と label_config.py も生成されますが、簡潔にするため、ここでは省略します。)
ADK フレームワークを正しく使い、完全に動作する実用的なエージェント アプリケーションが即座にできあがります。必要なコンテキストが llms-full.txt
ファイルで提供されるため、CLI がすべてのボイラープレートを生成してくれます。
生成されたコードを使ってローカルでテストします。バグを見つけたり、改善点が思い浮かんだりするかもしれません。たとえば、ラベル付けを終えた ADK エージェントにサマリーを作成させたくなることもあるでしょう。皆さんはフロー状態にとどまったまま、ただ変更を依頼することができます。
デベロッパー: エージェントに「some_new_label」という新しいラベルを追加してもらえますか?
Gemini CLI は、スクリプトのコンテキストを保持しているので、コードをリファクタリングして変更を実装してくれます。手動でコードを編集したり、勢いを失ったりすることはありません。
この反復ループが新しいワークフローとなります。
1: エージェントのロジックのアイデアを出す。
2: Gemini CLI で ADK コードを生成する。
3: すぐにテストする。
4: シンプルな会話型リクエストで改善する。
クリエイティブなゾーンを離れることを余儀なくさせる典型的な手間なしに、エージェントが完璧になるまで、このサイクルを繰り返すことができます。