はじめに
七尾百合子さん、お誕生日 154日目 おめでとうございます!1 nikkieです。
ADKの動きを「前世から合鍵」2くらい全部知りたいのですが、ログに加えてテレメトリまで使ってだいぶ前進しました!
目次
- はじめに
- 目次
- 本当にDEBUGログの通りにtoolの情報をGemini APIに送っている?
- opentelemetry-instrumentation-google-genai と動かしたら出力できていたことに気付く
- 終わりに
本当にDEBUGログの通りにtoolの情報をGemini APIに送っている?
現在の私は、生成AIを使ったアプリケーションにおいてはコンテキストが全てなのではないかと考えています。
ADK (Agent Development Kit)を使って3ヶ月以上開発していますが、GeminiのWeb APIには何が入力されているのか次第に気になってきました。
ここが分かったら、ADKをもっともっとうまく使えると思うんですよね。
DEBUGログを紐解いたのがこちらの記事
AgentToolを持たせたroot_agentのDEBUGログがこちら。
LLM Request:
-----------------------------------------------------------
System Instruction:
<過去記事を参照ください>
-----------------------------------------------------------
Contents:
{"parts":[{"text":"write me a script on how to build AI agents"}],"role":"user"}
-----------------------------------------------------------
Functions:
ShortsScriptwriter: {'request': {'type': <Type.STRING: 'STRING'>}}
ShortsVisualizer: {'request': {'type': <Type.STRING: 'STRING'>}}
ConceptFormatter: {'request': {'type': <Type.STRING: 'STRING'>}}
-----------------------------------------------------------
宿題事項の1つ
- ログのFunctionsがそのままGeminiに入力されているのだろうか?
- Gemini APIへの生の入力を見たい
結論を言うと、DEBUGログのとおりでした。
opentelemetry-instrumentation-google-genai と動かしたら出力できていたことに気付く
テレメトリをファイルに書き出す実装をしました3(※私はexporterについて大いに素振りの余地があります)
トレースされた全容はこちら:
https://gist.github.com/ftnext/49c9069b45b0a8b30ef19ec12b112504
上記のログに対応する部分
AgentToolで渡したエージェントから、次のようなtoolの情報が構築されています(toolsの部分)。
{ "description": "<LlmAgentのdescription>", "name": "<LlmAgentのname>", "parameters": { "properties": { "request": { "type": "STRING" } }, "required": [ "request" ], "type": "OBJECT" } }
逆に言うとroot_agent(の裏にいるGemini)には、これしか見えていないわけですね。
なので、root_agentのinstructionでは、ツールとして渡したエージェントに言及していると腑に落ちました。
ちなみにgoogle.adk.tools.google_searchツールを持ったエージェント(ShortsScriptwriter)がいるのですが、google_searchツールは何も情報を持っていませんでした。
{"tools": [{"google_search": {}}]}
GeminiのAPI側でなにかやっているんでしょうかね?
終わりに
GoogleのADKでAgentToolを渡した時、GeminiにはAgentToolがどのように見えるのか確かめました。
AgentToolのLlmAgentのnameとdescription、そして引数に文字列を1つ渡すということしか見えていません。
だから、instructionでツールの使い方を詳しく説明しているのだなと納得しました。
OpenTelemetryでまだよく分かっていないところがあるのですが、gcp.vertex.agent.llm_requestという項目はopentelemetry-instrumentation-google-genaiによるものではなさそうです。
試行錯誤の過程でまずgoogle-genaiが依存するHTTPXの計装(opentelemetry-instrumentation-httpx)だけを試したのですが、そのときからこの項目が出ていることに気づきました。
もしかして、ADKの依存で入るopentelemetry-exporter-gcp-trace4なのかな?(宿題事項)
-
矢吹可奈さん、お誕生日おめでとうございます!
↩本日は矢吹可奈ちゃんの誕生日です!
— ミリオンライブ! シアターデイズ【公式】 (@imasml_theater) 2025年8月17日
劇場のホワイトボードにやよいちゃんと琴葉ちゃんとエレナちゃんと紗代子ちゃんとこのみさんがメッセージを書いてくれましたよ♪
可奈ちゃんのバースデーライブ楽しみですね!
素敵なライブになるようにプロデュースしてあげてください♪#ミリシタ pic.twitter.com/esJjm0igSc - スペードのQ、ミリオンライブ!のヤンデレ楽曲です↩
- こちらで得た知見を使っています:2025年7月30日(水)のリリース - nikkie-ftnextの日記↩
- ↩