🧠 AI プロダクト動向

2026-09-03 発行(読了 5 分)

実プロダクトのアーキテクチャ・使用例から AI 開発の現在地を週 3 回・1 号 1 テーマで深掘り

今号のテーマ AGENT-DURABILITY

長時間稼働エージェントの状態管理 — 「会話の保存」から「プロセスの永続化」へ

エージェントが数分の対話ではなく数時間・数日単位のバックグラウンドタスクをこなすようになったことで、コンテナ再起動やタイムアウトはもはや例外ではなく前提になった。これまでチャットボットが会話履歴だけを保存してきたのに対し、いま各社が取り組んでいるのは「どのステップまで完了したか」という実行状態そのものをチェックポイントとして永続化する設計だ。何を保存し、何を保存しないかという粒度の判断も含め、具体例を追う。

TL;DR — 3 行で
📐 パターン 1: チェックポイントは「会話履歴の保存」ではなく「プロセス状態の永続化」

長時間稼働エージェントの標準構成は、ツール呼び出しなど各ステップの境界でエージェントの実行状態(変数・実行位置・保留中のタスク)をシリアライズし、外部ストレージへ書き込むというものだ。会話ログとは別に、ToolContext.stateのような実行状態そのものを永続化することで、プロセスが落ちても直前のステップから再開できるようにする。

バックグラウンドで数時間から数日動くエージェントが増え、コンテナのタイムアウトやスケールゼロは例外ではなく前提になった。インメモリの会話履歴だけを保持していると、再起動のたびに文脈は残っても「どこまで進んだか」という実行位置が失われる。この2つを分けて管理しないと、副作用のあるツール呼び出しまで巻き戻って再実行してしまう、というのが各社が同じ設計に落ち着いた理由だ。

Google ADK(Agent Development Kit)
ツール呼び出しごとに自動でチェックポイントし、DatabaseSessionServiceでToolContext.stateをSQLite/Cloud SQLへ永続化
コンテナがスケールゼロしても、Webhook到達時にセッションをストレージから復元し推論チェーンを中断箇所から再開する設計を公式ブログで解説している
📄 一次ソース
Mastra
1回のrunをJSONにチェックポイントし、別マシンでも同じスナップショットから再開できる設計
起動時にstatusがrunningのまま止まっている全runを検出し、最後のスナップショットから自動的に再実行する仕組みを公式ブログで公開している
📄 一次ソース
示唆: 長時間動くエージェントを設計するなら、会話履歴の永続化とは別に「どのステップまで完了したか」を表す実行状態を明示的にモデル化し、ステップ境界ごとに書き込む仕組みを最初から組み込むべき。
📐 パターン 2: 人間の承認待ちを「例外処理」ではなく「グラフの一時停止」として設計する

LangGraphのinterrupt()は、承認が必要な地点でグラフの状態をチェックポインタに保存し、再開の合図が来るまで無期限に待つ。呼び出し側はthread_idで「どの中断中の実行を再開するか」を指定し、人間の判断はCommand(resume=...)というJSONシリアライズ可能なペイロードとしてinterrupt()の戻り値になる。

承認待ちを個別のポーリングAPIやtry/exceptで実装すると、承認までの待ち時間が数分でも数日でも同じコードパスで扱うのが難しい。グラフの一時停止として扱えば、待機時間の長さに関係なく同じチェックポイント/再開の仕組みに乗る。これが「割り込みは例外ではなく状態遷移の一種」という設計に各フレームワークが収束した理由だ。

LangGraph
interrupt()でグラフ状態を保存し、Command(resume=...)で再開する一時停止パターン
checkpointerとthread_idを必須要件とし、中断中の実行を人間の判断が届くまで待たせる設計を公式ドキュメントが規定している
📄 一次ソース
示唆: 承認待ちやレビュー待ちのような不定長の待機は、専用のポーリング機構を自作せず、チェックポイント可能なグラフの一時停止として設計に組み込むと後から待機時間の制約に振り回されにくい。
📐 パターン 3: スナップショットの粒度設計 — 保存するのは本文ではなく参照

実行状態のスナップショットには、大きなデータそのものではなく参照(ID)だけを持たせ、必要になった時点で再取得する「claim check」パターンが標準になりつつある。Temporal上でエージェントを組む場合、イベント履歴には50MB・51,200イベントという上限があり、数KBを超えるペイロードは履歴に直接書かず外部ストレージへ逃がすことが推奨されている。

これはストレージ節約の話ではなく再開速度の話だ。スナップショットが肥大化するとシリアライズ・デシリアライズのコストが増え、再開のたびに大きなペイロードを読み込むことになる。ステップの状態を小さく保つことが、復元を高速かつどこでも安全に行うための前提条件だという認識に、各社のドキュメントが揃ってきている。

Mastra
ステップ状態に大きなドキュメント本文を持たせず、IDだけを保持して必要時に再取得
スナップショットを小さく・速く・どこでも安全に読み込めるものに保つためのベストプラクティスとして公式ブログが明記している
📄 一次ソース
Ably(Temporal上のAIエージェントチャット実装)
50MB・51,200イベントの上限を超える前にclaim checkパターンで大きなペイロードを外部ストレージへ逃がす
イベント履歴に会話全文を置くと実行がContinue-As-Newで分断され、単一クエリで全文を取得できなくなる問題を実例付きで解説している
📄 一次ソース
示唆: エージェントの状態設計では、まず「再開に絶対必要な最小の情報は何か」を先に決め、それ以外は参照だけを持たせる。スナップショットのサイズは後から効いてくるコストなので最初から意識しておく。
✍️ 編集後記 会話の続きを保存するのと、プロセスの続きを保存するのは別の設計課題だ。会話履歴だけを永続化してきたチャットボット時代の発想のままバックグラウンドエージェントを作ると、再起動のたびに「どこまでやったか」を失う。2026年に各社が収束したのは、実行位置そのものを一級市民として永続化するという、地味だが本質的な転換だった。
🔗 今号の動向ピックアップ
📚 過去号
2026-09-15
エージェント実行基盤のマネージド化 — 3社が同時に「実行環境を貸す側」に回ったOpenAIが9月10日、Codexハーネスをagents/environments/sessions/eventsの4プリミティブに集約した Agents API を公開ベータで公開。基盤自体の追加課金はなくトークン・ツール実費のみ。
2026-09-12
コンテキストは会話ログではない — Working Context / Session / Memory / Artifacts への分離が実装標準になったGoogle ADKは2026年9月、コンテキストを Working Context・Session・Memory・Artifacts の4層に分離し、閾値到達で非同期に要約するcompactionを実装したと公式ブログで説明した。
2026-09-10
Agent Skills という第3のレイヤー — プロンプトでもRAGでもなく「必要になるまで読まない」設計Agent Skillsは「メタデータ(~100トークン)→本文(<5000トークン推奨)→付随ファイル」の3段階でコンテキストに読み込む、プログレッシブディスクロージャー設計。
2026-09-08
エージェント評価の再設計 — テキスト一致から状態検証、そして「修正がテストになる」仕組みへAnthropicはテキスト一致の判定から、環境の状態が実際に変わったかを見る outcome/state チェックへの転換を公式に推奨している。
2026-09-01
コードレビューエージェントの設計 — 差別化は検出率ではなく、文脈の取り方と『直すところまで』の範囲に移ったGitHub Copilot・Qodo・Cursor Bugbot・Cloudflareの内製ツールが、diff単体の解析から脱却し、リポジトリ全体・PR履歴・過去の指摘への反応まで動的に文脈を取りに行く設計へ収束している
2026-08-29
構造化出力は「お願い」から「強制」へ — 3社がグラマー制約デコーディングで足並みを揃えた2026年OpenAI・Anthropic・Google の主要3社が、JSON Schema をトークン生成レベルで強制する「グラマー制約デコーディング」に共通で対応した
2026-08-27
マルチエージェント協調 — 割っていいのは「コンテキストの切れ目」だけAnthropic は Research 機能で並列サブエージェントを使い内部評価で90.2%の性能改善を報告するが、トークン消費は通常の約15倍になるとも明記している。
2026-08-25
エージェントのメモリ設計 — 生ログでも単一要約でもなく、書き換え可能な単位に分解するClaude は2026年7月、記憶を単一のローリング要約から個別の書き換え可能なエントリへ移行。ChatGPT は非同期の「Dreaming」処理で古い事実を時制ごと書き換える。
2026-08-22
プロンプトキャッシュはコスト最適化ではない — 「プレフィックス固定」というアーキテクチャ制約キャッシュ命中率はもはや副次指標ではなく、Manus はこれを「本番エージェントで最重要のメトリック」と明言している。
2026-08-20
接続ツールが増えるほど遅くなる問題 — コード実行と検索遅延ロードの2つの答えAnthropicは公式エンジニアリングブログで、MCPツールをコードAPIとして提示しファイルシステム越しにオンデマンドで読み込ませる方式により、あるタスクのトークン消費を150,000から2,000(98.7%減)に削減したと報告した
2026-08-18
MCPエージェントの認可設計 — 同意画面を「増やす」実装と「無くす」実装に分岐したMCPの権限設計は「サーバー単位のOAuth」から「ツールごとのスコープ」へ移り、WorkOSやCloudflareが個別ツール内での権限チェックを標準パターンとして提示している。
2026-08-15
エージェントの評価・観測性 — 「最終出力の一致」から「軌跡(トラジェクトリ)の妥当性」へAnthropic は Tasks/Graders/Transcripts の三要素でエージェント評価を構造化し、1回でも成功する確率 pass@k と毎回成功する確率 pass^k を分けて計測する運用を提示した。
2026-08-13
モデルルーティング — 1モデルに全部背負わせない設計が標準になったVercel AI GatewayやGitHub Copilot Autoは、ヒューリスティック分類→難易度ティア判定→プロバイダ違いのフォールバック、という二段構成のタスク別ルーティングをすでに標準実装にしている。
2026-08-11
コンテキスト圧縮はどこで行うべきか — API・モデル訓練・ハーネス、3層に割れた実装場所Anthropic は compaction をサーバーサイド API のオプションとして実装し、モデル本体は変更していない
2026-08-08
エージェントのコード実行基盤 — サンドボックスは「重い専用マシン」と「軽いアイソレート」に分かれ始めたCloudflare Sandboxes と Vercel Sandbox はどちらも「持続する専用マシン」型サンドボックスをGA化し、スナップショット復元でコールドブート30秒を2秒程度まで縮めた。
2026-08-06
RAG 構成パターンの現在地 — 二段構成の次は、検索そのものをエージェントに埋め込むPerplexity は Vespa 上で lexical・embedding のハイブリッド検索から cross-encoder rerank へ絞り込む多段構成を採り、Databricks は同じ構成を単一パラメータで追加できる機能として一般化した。
2026-08-04
ワークフロー型 vs エージェント型 — 複雑さを足す前に何を確かめるかAnthropic は「経路を誰が決めるか」で workflow と agent を定義し、単純な方から試すべきだと明言している。
2026-08-01
コンテキストエンジニアリング — 「何を見せるか」ではなく「何を見せないか」を設計する事前に全部読み込むのではなく、ファイルパスやURLなど軽量な参照を渡して実行時に取得する「Just-in-Time retrieval」がCursorやAnthropicの標準手法になった。
2026-07-30
マルチエージェント協調 — 「書き込みを一本化する」が唯一の合意点になった理由Cognition は2025年、複数エージェントの並行書き込みが矛盾した判断を生むとして「マルチエージェントを作るな」と主張したが、2026年4月に態度を転換し「書き込みは一本化し、エージェントは行動ではなく知性を提供する」構成に絞って実例を公開した
2026-07-28
エージェントのメモリ設計 — 保存容量ではなく「書き込みの境界線」を設計するAnthropic は Claude Managed Agents の記憶をファイルとして保存し、監査ログ・ロールバック・スコープ別パーミッションを標準機能として public beta で提供している
2026-W30
エージェントの評価・観測性 — 「良さそう」を数値にする前に何を測らないかを決めるAnthropic は Claude Code の品質劣化が6週間、内部の eval・コードレビュー・単体テストをすべてすり抜けていたと自ら公表し、変更ごとの広範な eval とソーク期間の導入を表明した