【要約】[ADK] エージェントをツールとして呼ぶなら AgentTool ではなく sub_agents を使う [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
開発者がADKを用いてエージェントをツールとして組み込む際、従来のAgentToolを使用すると、子エージェントの挙動が親のセッションから隔離される問題があった。具体的には以下の課題が存在する。
- ・AgentToolは実行のたびに独立したRunnerを生成する。
- ・子エージェントの実行には、使い捨てのInMemorySessionServiceが使用される。
- ・親エージェントのイベントログに、子エージェントの動作が一切記録されない。
- ・このため、マルチエージェント間の複雑なやり取りの追跡が困難になる。
// Approach
ADKは、子エージェントを親のセッション内で実行しつつ、コンテキストを適切に分離する新しい手法を導入した。以下のステップで実装を行う。
- ・サブエージェントにmode='single_turn'を設定する。
- ・toolsではなくsub_agentsリストにエージェントを登録する。
- ・内部的にrun_nodeを用いて、親のセッション内でグラフワークフローのノードとして実行する。
- ・include_contentsを"none"に書き換えることで、会話履歴の混入を防ぎつつコンテキストを分離する。
// Result
新しい手法を採用することで、開発者はエージェント間の連携における可観測性を大幅に向上できる。これにより以下の成果が得られる。
- ・親エージェントのセッション内に、子エージェントのイベントが保持される。
- ・ツールとして呼び出されたエージェントの具体的な挙動をトレースできる。
- ・デバッグの効率が向上し、マルチエージェントシステムの構築・運用が容易になる。
Senior Engineer Insight
> 非常に合理的な設計変更だ。大規模なエージェントシステムでは、各コンポーネントの挙動を追跡できないことは致命的な運用リスクとなる。AgentToolのようにセッションを完全に切り離す手法は、デバッグの観点では不完全だ。親のセッション内で実行しつつ、include_contentsで論理的な分離を図る新手法は、可観測性とコンテキスト分離を両立させている。実戦投入においては、デバッグコスト削減のために新手法の採用を標準化すべきだ。