Google ADK
まずは https://google.github.io/adk-docs/get-started/ に沿って手馴し。
% pip install google-adk
% pip show google-adk
Name: google-adk
Version: 0.4.0
Summary: Agent Development Kit
Home-page:
Author:
Author-email: Google LLC <googleapis-packages@google.com>
License:
Location: /Users/kawachi/gitworks/adk-quickstart/.venv/lib/python3.9/site-packages
Requires: google-cloud-storage, opentelemetry-sdk, click, google-cloud-secret-manager, sqlalchemy, PyYAML, pydantic, google-api-python-client, opentelemetry-exporter-gcp-trace, graphviz, tzlocal, python-dotenv, google-cloud-aiplatform, fastapi, google-genai, google-cloud-speech, opentelemetry-api, authlib, uvicorn
Required-by:
入力欄でかな漢字変換の確定でフォームが送信されてしまう。海外産あるある。
tool の request/response が見やすくて良い。
model を変えると音声でやり取りもできる。自然な話し声(英語)。
日本語でも受け答えしてくれた。不自然だが。私がわかっていないだけで英語も実は不自然なのかも?
model="gemini-2.0-flash-live-001",
# model="gemini-2.0-flash",
https://google.github.io/adk-docs/get-started/quickstart-streaming/#4.-try-it-adk-web の例。
from google.adk.tools import built_in_google_search # Import the tool
は
from google.adk.tools import google_search # Import the tool
でないと動かなかった。
G ボタンを押すと Google に飛んでいく。
video streaming の場合は 左の Events ペインには何も出ないようだ。
FastAPI から呼び出す例も載ってる。
websocket で接続がきたら
- session 作って
- runner 作って
- run_live() で イベント読み込み側と書き込みキューを作成
あとは websocket で受け取ったら書き込んで、読み込んで返す感じ。
Q. ADK の built in tool には何があるのか?
https://github.com/google/adk-python/blob/ad4226b3d8519f725d470cbd9573ac7b012befca/src/google/adk/tools/init.py#L34-L51
__all__ = [
'APIHubToolset',
'AuthToolArguments',
'BaseTool',
'built_in_code_execution',
'google_search',
'VertexAiSearchTool',
'ExampleTool',
'exit_loop',
'FunctionTool',
'get_user_choice',
'load_artifacts',
'load_memory',
'LongRunningFunctionTool',
'preload_memory',
'ToolContext',
'transfer_to_agent',
]
https://google.github.io/adk-docs/tools/built-in-tools/ にドキュメントがあった。
-
google_search
: Google 検索 -
built_in_code_execution
: コード実行 -
VertexAiSearchTool
: Vertex AI Search -
agent_tool
: Agent を他の Agent の tool として使う
Limitation 結構きつい。
- root agent から複数の built-in tool を使えない。 google_search と built_in_code_execution を同時に使うとかはできない。
- sub agents の中で built-in tool を使えない。
agent_tool の例にあるように、 sub_agents
ではなく tools
として sub agent を使ってあげれば、複数の built in tool を使い分けることはできそう。
sub agent を tool として使ったときは、sub agent の結果は呼び出し元の agent に返される。
sub agent を sub_agents
として使ったときには、 sub agent がダイレクトにユーザーに応答する。
agent → sub agent as a tool → tool という呼び出しにになったときに、sub agent の動きは adk web の console からトレースできない様子。
うーむ。
https://google.github.io/adk-docs/get-started/testing/ ローカルでの動作確認。
API アクセスをローカルで試す方法が書かれているようだ。
先程の google_search_agent を呼び出してみる。
できる。
% curl -X POST http://0.0.0.0:8000/apps/google_search_agent/users/u_123/sessions/s_123 \
-H "Content-Type: application/json" \
-d '{"state": {"key1": "value1", "key2": 42}}'
{"id":"s_123","app_name":"google_search_agent","user_id":"u_123","state":{"state":{"key1":"value1","key2":42}},"events":[],"last_update_time":1746316715.234047}%
% curl -X POST http://0.0.0.0:8000/run \
-H "Content-Type: application/json" \
-d '{
"app_name": "google_search_agent",
"user_id": "u_123",
"session_id": "s_123",
"new_message": {
"role": "user",
"parts": [{
"text": "ここ1週間で出た注目すべきソフトウェア開発系のツールをまとめて"
}]
}
}'
[{"content":{"parts":[{"text":"どのようなツールに興味がありますか?例えば、特定のプログラミング言語、フレームワーク、あるいは開発プロセス(テスト、デプロイなど)に関係するツールに絞って調べることができます。もし特に希望がなければ、一般的なソフトウェア開発で役立ちそうなものを探します。\n\n"},{"text":" ここ1週間で発表された注目すべきソフトウェア開発ツールをまとめました。\n\n* **AI テスティングツール:** NTTデータ オートモビリジェンス研究所は、車載ソフトウェア開発の効率化と品質向上に寄与するAIテスティングツール「ZIPC MLTEST Test Viewpoint」をリリースしました。これは、AIを活用してテスト項目やテスト観点を自動抽出し、テストプロセスの高速化と品質向上に貢献するものです。\n\n* **JetBrains AIアシスタント:** JetBrainsは、AIアシスタントと新しいコーディングエージェントJunieをIDEに統合し、無料枠付きのシングルサブスクリプションモデルで提供を開始しました。\n\n* **Android Studio向けGemini AIツール:** Googleは、Android Studioにエンタープライズ向けの新しいGemini AIツールを導入し、プライバシー、セキュリティ、管理のニーズに対応します。\n\n* **AIデバッグツール:** Microsoft Researchは、AIコーディングツールをトレーニングするための新しい環境「debug-gym」を発表しました。\n\n* **Vision Proサポート:** Appleは、GodotゲームエンジンへのVision Proヘッドセットの公式サポートを開始しました。\n\n* **SnykのDASTソリューション:** Snykは、AIを活用したソフトウェア開発向けに設計された新しい動的アプリケーションセキュリティテスト(DAST)ソリューションを発表しました。\n\n* **GitHub Copilotの拡張機能:** GitHub Copilotは、Microsoftとサードパーティのパートナーによって開発された拡張機能をプライベートプレビューとして提供開始しました。これにより、開発者はGitHub Copilot Chat内で直接、Azure、Docker、Sentryなどのサービスを利用できるようになります。\n\nこれらのツールは、AIを活用して開発プロセスを効率化したり、セキュリティを強化したり、新しいプラットフォームへの対応を支援したりするなど、さまざまな目的で使用できます。\n"}],"role":"model",<略>"invocation_id":"e-23553136-db7d-4d17-94a5-f2684d0ea90e","author":"basic_search_agent","actions":{"state_delta":{},"artifact_delta":{},"requested_auth_configs":{}},"id":"EEUSqboL","timestamp":1746316788.521107}]%
endpoint を /run
から /run_sse
に変えると、徐々に応答がくる。
https://github.com/comet-ml/opik で observability を追加できるらしい。
検索は google_search built in tool でいいとして、ページの内容を読み込めるようにしたいな。
JS とかを考えると https://github.com/apify/crawlee とかがいいんだろうか。
普通に playwright MCP server でもいいか。
以前試したときは大きなページを読み込むと LLM が context window 溢れを起こしてしまうようだったので、なにか工夫が必要か。
crawl4ai お試し中。
playwright install
が必要とのエラーで初回は動かず。
arun() の config で markdown_generator を渡すことで、雑音を取り除けそうだが、既存のサンプルが思ったように動かないな。。
fit_html が空文字になっている。
https://www.firecrawl.dev/ で試してみたところ crawl4ai の markdown.raw_markdown とあまりかわらない。が firecrawl のほうがナビゲーションなどの削りが若干上手か。
AI agent の design pattern 紹介記事
基本的には agent に prompt するだけ。