nikkie-ftnextの日記

イベントレポートや読書メモを発信

Agent Development Kit で AgentTool はどのように Gemini に見えているか知りたく、OpenTelemetry によるトレースを読む

はじめに

七尾百合子さん、お誕生日 154日目 おめでとうございます!1 nikkieです。

ADKの動きを「前世から合鍵2くらい全部知りたいのですが、ログに加えてテレメトリまで使ってだいぶ前進しました!

目次

本当に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_agentinstructionでは、ツールとして渡したエージェントに言及していると腑に落ちました。

ちなみにgoogle.adk.tools.google_searchツールを持ったエージェント(ShortsScriptwriter)がいるのですが、google_searchツールは何も情報を持っていませんでした。

{"tools": [{"google_search": {}}]}

GeminiのAPI側でなにかやっているんでしょうかね?

終わりに

GoogleADKAgentToolを渡した時、GeminiにはAgentToolがどのように見えるのか確かめました。
AgentToolLlmAgentnamedescription、そして引数に文字列を1つ渡すということしか見えていません。
だから、instructionでツールの使い方を詳しく説明しているのだなと納得しました。

OpenTelemetryでまだよく分かっていないところがあるのですが、gcp.vertex.agent.llm_requestという項目はopentelemetry-instrumentation-google-genaiによるものではなさそうです。
試行錯誤の過程でまずgoogle-genaiが依存するHTTPXの計装(opentelemetry-instrumentation-httpx)だけを試したのですが、そのときからこの項目が出ていることに気づきました。
もしかして、ADKの依存で入るopentelemetry-exporter-gcp-trace4なのかな?(宿題事項)


  1. 矢吹可奈さん、お誕生日おめでとうございます!
  2. スペードのQ、ミリオンライブ!のヤンデレ楽曲です
  3. こちらで得た知見を使っています:2025年7月30日(水)のリリース - nikkie-ftnextの日記