AnthropicはClaude Managed Agentsのsession event streamへevent deltasを追加した。生成中テキストを早く見せられるが、deltaは正本ではなく、負荷時に欠落し、再接続後に再送されず、履歴にも残らない。

何が変わったか

GET /v1/sessions/{session_id}/events/streamevent_deltas[]を追加すると、生成中のagent.messageまたはagent.thinkingをプレビューできる。agent.messageではevent_startの後にテキストのevent_deltaが届く。agent.thinkingは開始通知だけで、思考内容のdeltaは返らない。

購読できる値はこの2種類だけで、他の値は400になる。session thread単位のstreamでは利用できない。

変更前後の差

項目buffered eventのみevent deltas利用時
表示開始モデル要求完了後生成中に開始
完全性agent.messageが完全deltaは途中で欠ける場合あり
再接続event historyで復元可能失ったdeltaは再要求不可
永続化buffered eventを保存start・deltaは履歴に残らない
tool結果完全eventで確認preview対象外
正本agent.message変わらずagent.message

誰に影響するか

数十秒以上かかるAgent処理を利用者へ表示するUI、オペレーターが途中経過を見てinterruptする運用、SSE接続をモバイルやProxy越しに維持するサービス、セッション履歴を監査保存するシステムに影響する。バックエンドだけで結果を待つbatch処理では、deltaを導入する必要はない。

期限

強制移行期限はない。既存clientはdeltaを購読しなければ従来どおり完全eventだけを受け取る。低遅延UIが必要な画面から限定して有効化する。

必要な対応

UI上のpreview stateと、監査・再開に使うauthoritative stateを別に持つ。event_startで一時bufferを作り、event_deltaをevent IDとblock indexで連結する。完全なagent.messageが届いたらpreviewを置換し、span.model_request_endまでに完全eventが来なければ一時表示を閉じる。

切断時は欠けたdeltaを継ぎ足そうとせず、streamを再接続してevent historyから完全eventを取得する。

実装・移行手順

  1. 既存SSE clientが未知eventを無視できるか確認する。
  2. 対象画面だけevent_deltas[]=agent.messageを追加する。
  3. event IDごとのaccumulatorを実装し、block indexを維持する。
  4. 完全なagent.message受信時にpreviewを置換する。
  5. 切断、delta欠落、順序遅延、重複受信を故障注入する。
  6. 再接続後はevent historyを取得し、保存済みIDで重複排除する。
  7. previewをDBや監査ログへ最終回答として保存しない。

失敗しやすい点

画面へ表示できた文字列をそのまま最終回答としてDBへ保存する、SSE再接続後に古いpreviewへ新しいdeltaを連結する、Messages API用のaccumulatorを流用する、tool useやMCP結果もdeltaで来ると想定する、agent.thinkingから本文deltaが届くまでspinnerを閉じないことが問題になる。

リスク

欠落したpreviewによる誤解、完全eventとの二重表示、接続断後の文章混在、途中テキストを外部通知へ送る情報漏えい、delta量増加によるブラウザ描画負荷がある。プレビューには未確定表現が含まれるため、メール送信や業務実行の入力に使ってはいけない。

評価方法

  • 最初の文字が表示されるまでの時間
  • previewと最終agent.messageの不一致件数
  • SSE切断後の履歴復元成功率
  • 二重表示・重複保存件数
  • 未完previewが残る画面数
  • delta処理によるCPU・メモリ増加
  • 完全event受信前に外部処理へ渡った件数

ロールバック

query parameterからevent_deltas[]を外し、buffered eventのみの表示へ戻す。DB schemaは最終eventだけを正本にしておけばデータ移行は不要である。進行中のpreview bufferを破棄し、event historyから最後の完全なagent.messageを再描画する。

編集部分析

ストリーミング改善は体感速度を上げるが、データモデルまで低遅延化してはいけない。previewは画面の補助情報、buffered eventは業務記録という二層を崩すと、再接続や監査で矛盾が残る。UIの速さと記録の正確さを別々のSLOとして管理すべき変更である。

実務チェックリスト

  • [ ] previewと正本のstateを分離した
  • [ ] event IDとblock indexで連結している
  • [ ] 完全eventでpreviewを必ず置換する
  • [ ] 再接続時はevent historyを取得する
  • [ ] tool結果をpreview対象と誤認していない
  • [ ] 未完previewをDBへ保存しない
  • [ ] 切断・欠落・重複の故障試験を行った

一次情報