登録して招待リンクを共有すると、動画再生報酬と紹介報酬を獲得できます。

cv usk
@cv_usk
AI / Software Research Notes AI Agent, LLMOps, MLOps, Software Architecture 投稿は個人の意見です。
参加 May 2026
258 フォロー中    220 ファン
# ADK 2.0の便利だけど知られていない機能 🌍 実行中のエージェントを途中で安全にキャンセルし、それまでの処理結果は保持できたら理想的だと思いませんか? ADK 2.0のキャンセル機能は、AbortController/AbortSignalを使ってエージェントの実行をグレースフルに中断する仕組みです。キャンセルシグナルはRunner、LlmAgent、Models、Toolsへと伝播し、コミット済みのイベントは保持されます。 📌 タイトル:エージェント実行のキャンセル 🔗 URL: 🧩 概要 エージェント実行のキャンセルは、AbortControllerとAbortSignalのパターンで実現されます。AbortControllerからシグナルを発行すると、Runner→LlmAgent→Models→Toolsの順にキャンセルが伝播します。重要な点として、キャンセル時点ですでにコミットされたイベントは保持され、例外をスローせずグレースフルに完了します。AbortSignal.timeout()を使えばタイムアウトベースの自動キャンセルも可能で、AbortSignal.any()で複数のシグナルを組み合わせることもできます。 🛠 使い方 AbortControllerを作成し、そのシグナルをRunnerに渡します。 ```python from adk import App, AbortController, AbortSignal app = App(agent=my_agent) # 手動キャンセル controller = AbortController() task = "long task", signal=controller.signal) # 必要なタイミングでキャンセル controller.abort() # タイムアウトベースの自動キャンセル(2秒) signal = AbortSignal.timeout(2000) result = await "time-limited task", signal=signal) # 複数シグナルの組み合わせ combined = AbortSignal.any([ AbortSignal.timeout(5000), user_cancel_signal ]) result = await "task", signal=combined) ``` 🏗 本番システムへの組み込み方 ・ユーザー操作(キャンセルボタン)と連動したAbortControllerを実装し、UIからのキャンセルを可能にする ・AbortSignal.timeout()でAPI呼び出しの最大実行時間を制限し、リソースの無駄遣いを防ぐ ・AbortSignal.any()でユーザーキャンセルとタイムアウトの両方に対応する ・キャンセル後のコミット済みイベントを活用し、部分的な結果を返却する設計にする 💡 ユースケース ⏱ LLM呼び出しにタイムアウトを設定し、応答が遅い場合に自動キャンセル 🖱 ユーザーがUIのキャンセルボタンを押した際にエージェント実行を即座に中断 🔀 複数のエージェントを並列実行し、最初に完了したもの以外をキャンセル 💰 コスト上限に達した時点でLLM呼び出しを打ち切る ⚠️ 注意点 キャンセルはグレースフルに完了するため、abort()を呼んだ瞬間に即座に停止するわけではありません。現在実行中のオペレーション(LLM推論やツール実行)が完了するまで若干の遅延が生じる場合があります。また、コミット済みのイベントは保持されるため、キャンセル後の状態が中途半端にならないよう、ワークフロー設計時にキャンセルポイントを意識することを推奨します。ツール内部でシグナルを監視して早期リターンする実装も有効です。 ✨ キャンセル機能により、エージェント実行のライフサイクルを安全にコントロールできます。タイムアウトと組み合わせることで、本番環境での予測可能性が大きく向上します。 #ADK# #AIAgent#
もっと見る