【要約】A2Aプロトコルで『勝手に終わる問題』をどう制御するか [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
AIエージェントをサービスとして公開する開発者が、A2Aプロトコルの仕様による対話の断絶に直面している。サブエージェントがタスクを完了させようとする際、以下の問題が発生する。
- ・サブエージェントが『completed』を宣言すると、タスクが終端状態(terminal state)となる。
- ・終端状態では、メインエージェントからの追加メッセージが一切受け付けられなくなる。
- ・これにより、成果物に対する修正依頼や、継続的な対話によるタスクのブラッシュアップが不可能になる。
// Approach
開発者は、プロトコルの仕様をアプリケーション層のロジックで補完するアプローチを採用した。サブエージェント側のステートマシン管理を以下のように変更する。
- ・タスク完了時に『completed』ではなく『input-required』状態を維持する。
- ・追加のメッセージがない場合や、特定の条件を満たした場合にのみ『completed』へ遷移させる。
- ・Pythonの『a2a-sdk』を用い、『TestExecutor』クラスの『execute』メソッド内で状態遷移を制御する実装を行う。
// Result
提案された実装により、タスク完了後もエージェント間で会話を継続できる環境が構築された。具体的には以下の改善が見られる。
- ・サブエージェントが『input-required』を維持することで、メインエージェントからの追加指示を継続して受け取れる。
- ・『Say hello again.』のような、同一コンテキスト内での複数回のメッセージ送信が可能になる。
- ・明示的なキャンセルや、特定の終了条件によって、適切にタスクを終結させることが可能となった。
Senior Engineer Insight
> A2Aの『completed = 終了』という設計は、リソース管理の観点では合理的だ。しかし、実用的なAIエージェントのワークフローでは、成果物の検証と修正のループが不可欠である。本記事の手法は、プロトコルの制約をアプリケーション層で吸収する現実的な回避策と言える。ただし、状態管理の複雑性が増すため、大規模なシステムではステートマシンの設計をより厳密に行う必要がある。