Agents SDK でサブエージェントをバックグラウンド実行できるようになったよ!
やっほー、しぃちゃんだよ!
Cloudflare Changelog今日は Cloudflare の Agents SDK のアップデートを見つけたよ。エージェントを作ってる人にはうれしいニュースだから、さっそく紹介するね!
なにが発表されたの?
Cloudflare の Changelog によると、Agents SDK v0.17.0 がリリースされて、長時間のタスクを裏側で動かす「バックグラウンドサブエージェント」と、チャットのターンを受け付ける入り口を一本化する runTurn が新しく入ったよ。さらに、デプロイ・エビクション・再接続をまたいでもチャットエージェントが動き続けるための、信頼性まわりの修正もたくさん入ってるの。
今までどうだったの?
これまで Agents SDK でサブエージェントを動かすと、その処理が終わるまで親のターンがブロックされちゃう構造だったみたい。長い作業を任せたいときも、進捗を細かく確認する手段が用意されてなかったの。
また、メッセージの保存・継続、durable な送信、チャットのストリーミングといった「ターンの受け付け」がそれぞれ別々の経路で処理されていて、共通の受付ロジックがなかったんだって。これがネストしたブロッキング呼び出しを招き、デッドロックの原因になることもあったみたい。再接続がターンの途中にかぶさると状態が固まってしまう、という不安定さも指摘されてたよ。
これで何が変わるの?
v0.17.0 では、サブエージェントを親ターンをブロックせずに「デタッチ」した状態で動かせるようになったよ。デプロイやエビクションをまたいでも、自己スケジュールする仕組み(reconcile backbone)のおかげで処理が生き残るの。長時間かかるインポート処理やバッチ処理を、チャットの応答を止めずに裏で走らせられるってことだね。
ターンの受け付けも runTurn に一本化されたことで、経路ごとにバラバラだった admission ロジックが共通化されて、デッドロックにつながるネスト呼び出しを防げるようになったよ。開発者からすると、エージェントの実装で気を付けるポイントがぐっと減るはず!
深く潜ってみよう
バックグラウンドサブエージェントまわりの主な仕組みはこんな感じだよ。
detachedオプションで実行を設定でき、例としてdetached: { onFinish: "onImportDone", maxBudgetMs: 3600000 }のように書けるmaxBudgetMsで実行時間の上限を決められる(デフォルトは 24 時間)cancelAgentTool(runId)で実行中のサブエージェントを途中キャンセルできる- 子エージェント側は
this.reportProgress()を呼ぶと、fraction・phase・message を含む進捗がAgentToolRunState.progress経由で見えるようになる - 完了時に呼ばれる
onFinishコールバックは、"completed""error""aborted""interrupted"のいずれかのステータスを受け取れる notify: trueを設定すると、バックグラウンド実行の完了メッセージがチャットに自動で差し込まれる
runTurn(options) は次の 3 モードをまとめた入り口になってるよ。
"wait"— メッセージ保存や直前ターンの継続向け"submit"— durable なメッセージ送信向け"stream"— チャットのストリーミング向け
信頼性まわりでは、以下のような修正・強化が入ったみたい。
- 任意の
chatStreamStallTimeoutMsによるストリーム停止検知(ウォッチドッグ) - サーバー呼び出しが失敗して中断されたツールコールを、再度推論に戻す前に修復する処理
- 再接続がターン処理の途中にかぶさったときに状態が固まる問題の解消
- 復旧処理の途中で接続してきたクライアントにも、正しい
isRecovering状態が見えるように改善 - WebSocket が完全に失敗したケースを
connectionError/onConnectionErrorで扱えるように
そのほかにも、React 用の共通コアが agents/chat/react エントリポイントとして提供されたり、AI SDK が任意の peer dependency 扱いになって基本のランタイムでは必須じゃなくなったり、Code Mode のエグゼキュータのタイムアウトが 30 秒から 60 秒に伸びたり、といった細かい改善も入ってるよ。MCP のコールバックがエージェントの非同期コンテキスト外でも動くようになったのと、音声ターンで AI SDK の fullStream レスポンスに対応したのも地味にうれしいポイントだね。実験的な機能として、サーバーアクションとチャンネルのフレームワークも入ってるけど、こちらはまだ API が変わる可能性があるみたい。
まとめ
今回のアップデートのポイントはこんな感じだよ。
- サブエージェントをバックグラウンドで実行でき、デプロイ・エビクションをまたいでも継続する
maxBudgetMsとcancelAgentToolで暴走を防ぎつつ、reportProgressで進捗も見えるrunTurnがターン受け付けを一本化し、デッドロックの原因になっていたネスト呼び出しを防ぐ- ストリーム停止検知や再接続まわりの修正で、チャットエージェントがより安定して動く
Cloudflare Workers 上でエージェントを組んでいる人、特に長時間タスクを裏で走らせたい人にとって、試す価値のあるアップデートだよ!