AnthropicはClaude Managed Agentsのsession event streamへevent deltasを追加した。生成中テキストを早く見せられるが、deltaは正本ではなく、負荷時に欠落し、再接続後に再送されず、履歴にも残らない。
何が変わったか
GET /v1/sessions/{session_id}/events/streamへevent_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を取得する。
実装・移行手順
- 既存SSE clientが未知eventを無視できるか確認する。
- 対象画面だけ
event_deltas[]=agent.messageを追加する。 - event IDごとのaccumulatorを実装し、block indexを維持する。
- 完全な
agent.message受信時にpreviewを置換する。 - 切断、delta欠落、順序遅延、重複受信を故障注入する。
- 再接続後はevent historyを取得し、保存済みIDで重複排除する。
- 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へ保存しない
- [ ] 切断・欠落・重複の故障試験を行った