# ADK 2.0の便利だけど知られていない機能
🌍 長時間かかるエージェントワークフローが途中で失敗したとき、最初からやり直さずに続きから再開できたら便利だと思いませんか?
ADK 2.0のResumabilityConfigは、ワークフローの実行状態をイベントログとして記録し、失敗時にinvocation_idを指定して途中から再開できる機能です。
📌 タイトル:ワークフローの再開 (ResumabilityConfig)
🔗 URL:
🧩 概要
ResumabilityConfig(is_resumable=True)をAppに設定すると、ワークフロー実行中に完了したタスクがイベントとして記録されます。失敗時にはinvocation_idを指定して再開でき、組み込みエージェントはそれぞれの状態を自動的に復元します。SequentialAgentはcurrent_sub_agentから再開し、LoopAgentはtimes_loopedの値を保持して残りの反復を実行し、ParallelAgentは未完了のサブエージェントのみを実行します。これにより、大規模なパイプラインで一部のステップが失敗しても、完了済みのステップを再実行する無駄を省けます。
🛠 使い方
AppにResumabilityConfigを設定し、再開時にinvocation_idを渡します。
```python
from adk import App, ResumabilityConfig
app = App(
agent=my_workflow,
resumability_config=ResumabilityConfig(is_resumable=True)
)
# 初回実行
result = await "process data")
invocation_id = result.invocation_id
# 失敗後の再開(同じinvocation_idを指定)
resumed_result = await
input="process data",
invocation_id=invocation_id
)
```
カスタムエージェントで再開に対応する場合は、BaseAgentStateを拡張して独自の状態を保存します。
🏗 本番システムへの組み込み方
・invocation_idをデータベースやメッセージキューに保存し、リトライ時に参照できるようにする
・ツールの冪等性を担保する(ツールは少なくとも1回実行され、再開時に再実行される可能性がある)
・カスタムエージェントではBaseAgentStateを拡張し、再開に必要な中間状態を明示的に定義する
・長時間ワークフローでは定期的にチェックポイントとなるステップを設け、再開の粒度を細かくする
💡 ユースケース
📊 数十ステップの大規模データ処理パイプラインで、途中失敗からの効率的な復旧
💰 外部API呼び出しを含むワークフローで、API課金の無駄な再実行を回避
🔄 不安定なネットワーク環境での長時間エージェント実行の信頼性向上
🏭 バッチ処理ジョブで一部アイテムの処理失敗時に残りを継続処理
⚠️ 注意点
ツールは再開時に少なくとも1回実行されるため、副作用を持つツール(データベース書き込み、外部API呼び出しなど)は必ず冪等に設計してください。同じ入力で複数回実行しても結果が変わらないことを保証する必要があります。また、ParallelAgentの再開では完了判定がサブエージェント単位であるため、サブエージェント内部の途中状態は保持されない点に留意してください。
✨ ResumabilityConfigにより、長時間ワークフローの運用が劇的に楽になります。特にコストのかかるステップを含むパイプラインでは、導入効果が大きいです。
#
ADK# #
AIAgent#