# ADK 2.0の便利だけど知られていない機能
🌍 数分〜数時間かかる処理をエージェントのツールとして扱いたい場合、どうすればよいでしょうか?
ADK 2.0の `LongRunningFunctionTool` は、長時間実行されるタスクのオーケストレーションを管理するための専用クラスです。実際の重い処理は別サーバーで実行しつつ、エージェント側では進捗管理と状態遷移を制御できます。
📌 タイトル:Long Running Function ツール
🔗 URL:
🧩 概要
`LongRunningFunctionTool` は、長時間かかるタスクをエージェントワークフローに統合するためのクラスです。処理は4つのフェーズで進行します。開始フェーズでタスクを発行し、初期更新フェーズで進捗を通知し、続行/待機フェーズでクライアントが次のアクションを判断し、フレームワーク処理フェーズでエージェントランナーが一時停止を管理します。重要なのは、このクラスはオーケストレーションを管理するものであり、実際の長時間タスクの実行自体は行わないという点です。
🛠 使い方
ツール関数はステータスとチケットIDを含む辞書を返し、フレームワークがその状態を管理します。
```python
from adk import LongRunningFunctionTool
def start_training(model_name: str, dataset: str) -> dict:
"""モデルトレーニングを開始する"""
# 外部サーバーにリクエストを送信
ticket_id = external_api.start_job(model_name, dataset)
return {
"status": "in_progress",
"ticket_id": ticket_id,
"message": "トレーニングを開始しました"
}
tool = LongRunningFunctionTool(func=start_training)
```
エージェントランナーは返された状態に基づいて実行を一時停止し、クライアントが「続行」か「待機」かを決定します。実際の計算処理は別サーバーで行い、ツール関数はその進捗確認と状態報告のみを担当します。
🏗 本番システムへの組み込み方
・実際の重い計算処理は専用のコンピュートサーバーで実行し、ツール関数はAPIコールのみ行う
・チケットIDを使った進捗追跡の仕組みを構築し、ポーリングまたはWebhookで状態を更新する
・タイムアウトとエラーハンドリングを適切に設定し、タスクの失敗を検知できるようにする
・クライアント側で待機/続行の判断ロジックを実装し、ユーザー体験を損なわないようにする
💡 ユースケース
🤖 機械学習モデルのトレーニングジョブの管理と進捗追跡
🎬 動画エンコードやレンダリングなど時間のかかるメディア処理
📦 大規模データのETLパイプラインの実行管理
🧪 長時間かかるテストスイートやベンチマークの実行と結果取得
⚠️ 注意点
`LongRunningFunctionTool` はオーケストレーション(状態管理と進捗追跡)を管理するものであり、実際の長時間タスクを実行するものではありません。重い処理は必ず別のサーバーやサービスで実行してください。また、セッションの有効期限やメモリ管理にも注意が必要です。長時間のタスクではセッションが切断されるリスクがあるため、状態の永続化を検討してください。
✨ 長時間タスクをエージェントワークフローにシームレスに統合できるこの機能は、実用的なAIシステム構築において非常に強力です。計算処理とオーケストレーションの責務を明確に分離しましょう。
#
ADK# #
AIAgent#