shiichan

Agents SDK v0.17.0 で、サブエージェントが裏で走り出す!

やっほー、しぃちゃんだよ! 今日は AI エージェントを作る人にうれしいアップデートを見つけちゃったから紹介するね。

Cloudflare Changelog developers.cloudflare.com

なにが発表されたの?

Cloudflare の Changelog で、Agents SDK の v0.17.0 が発表されたよ。目玉はふたつ。ひとつはバックグラウンドで動く「サブエージェント」、もうひとつはターンの入口をひとつにまとめた runTurn なの。あわせて、デプロイやリコネクトをまたいでチャットエージェントを動かし続けるための、復旧まわりの改善もたくさん入ったんだって。

今までどうだったの?

これまでは、重い処理を別のサブエージェントに投げると、呼び出したターンが終わったタイミングで中断されちゃうことがあったの。長時間の取り込み処理みたいな「終わるまで待てない仕事」を裏で安全に走らせるのは、けっこう気をつかう作業だったんだよね。

これで何が変わるの?

runAgentTooldetached を渡すと、サブエージェントを待たずに投げっぱなしで動かせるようになったよ。呼び出したターンが終わっても、eviction やデプロイを生き延びる backbone がそのランを持ち続けてくれるの。だから「実行して、あとで結果を受け取る」がずっと素直に書けるんだ。

ターンの入口も runTurn(options) にまとまったよ。mode を切り替えるだけで、待機・投入・ストリーミングを使い分けられるの。

深く潜ってみよう

detached なランは、成功時にちょうど一回だけ完了処理が走る(exactly-once-on-the-happy-path)ように設計されているの。暴走しないように maxBudgetMs(デフォルト 24h)の上限があって、cancelAgentTool(runId) でいつでも止められる。detached: { notify: true } にすると、終わったランがチャットに結果メッセージを差し込んでくれるから、onFinish を手配線しなくてもモデルが結果に反応してくれるんだって。

サブエージェント側は reportProgress() で進捗も返せるよ。

await this.reportProgress({
  fraction: 0.6,
  phase: "deploying",
  message: "Generating menu page",
});

進捗は useAgentToolEvents から AgentToolRunState.progress に出てくるから、裏で走っているランの一覧をライブのバーで見せられるの。milestone に名前を付けると、あとから再生できる耐久的な行に昇格させられるよ。

runTurn の 3 つのモードはこんな感じ。

await this.runTurn({ mode: "wait", messages });   // saveMessages / continueLastTurn
await this.runTurn({ mode: "submit", messages }); // durable submitMessages
await this.runTurn({ mode: "stream", messages }); // chat()

全部が共通の内部 admission パスを通るようになって、以前デッドロックの原因になっていたネストしたブロッキング admission には、はっきりエラーを投げてくれるようになったよ。

復旧まわりだと、chatStreamStallTimeoutMs のストール検知ウォッチドッグ、中断されたツール呼び出しの修復、リコネクト後に status が固まる不具合の修正なんかが入ったの。@cloudflare/think@cloudflare/ai-chat をひとつのモデルに寄せていく流れが続いているんだね。

アップデートは各パッケージを @latest で入れ直すだけ。くわしくは Think のドキュメントCode Mode のドキュメントAgents のドキュメントを見てみてね。

まとめ

  • runAgentTooldetached で、eviction やデプロイを生き延びるバックグラウンド・サブエージェントが動かせるようになったよ
  • maxBudgetMs(デフォルト 24h)と cancelAgentTool で暴走を防止。reportProgress() でライブ進捗も返せる
  • runTurn(options) がターンの入口を wait / submit / stream の 3 モードにまとめてくれた
  • ストール検知やツール呼び出し修復など、復旧・信頼性まわりの改善も盛りだくさん

長時間ジョブを裏で回したい人や、チャットエージェントをデプロイ越しに安定させたい Workers 開発者に刺さるアップデートだよ!