Skip to content

Checkpoint & Resume(状態永続化と再開)

エージェントの会話履歴・計画・中間成果物・ツール実行結果を反復ごとに永続ストアへ保存し、中断・障害・承認待ちからの再開を可能にする。長時間タスクを「全部やり直し」から守る。

別名

呼称出典
State Persistence一般的呼称
Durable Execution / Durable Stateワークフローエンジン系の慣用名
Checkpointing各種エージェントFWの機能名

問題

エージェントの「推論の文脈」はプロセスのメモリ上にしかなく、セッション中断・デプロイ・ネットワーク瞬断・プロセス再起動で全損する。数十分規模のタスクが90%地点で失われれば、トークンコストと時間を二重払いする。

人間の承認待ち(同期ゲート)でも、状態を保持できなければ承認後に最初からやり直しになる。AzureのHITLゲートでも、承認をまたぐ状態永続化が必須となる。

コンテキスト

適用する:

  • 数分〜数日規模の長時間タスク、Approval Gate等の人間待ちを含むフロー
  • デプロイやスケールインでプロセスが入れ替わる本番環境
  • Budget Guard打ち切り後に人間判断で継続再開したい場合

適用しない(不要な)ケース:

  • 数秒で終わる単発呼出や、やり直しコストが十分低い処理
  • 会話履歴に機密が多く永続化自体がリスクの場合。保存範囲の最小化を先に検討する

解決

反復の区切り(ツール実行完了・サブタスク完了・ゲート通過)ごとに、再開に必要な状態一式をスキーマ化して永続ストアへ書き込む。状態には会話履歴またはその圧縮版、タスク計画と進捗、中間成果物、ツール実行結果を含める。

再開時はチェックポイントから文脈を再構築してループへ復帰する。副作用のあるツール実行は「実行済みか」をチェックポイントに記録し、冪等性キーによって再開時の二重実行を防ぐ。

python
def run_agent(task, checkpoint_id):
    state = store.load(checkpoint_id) or init_state(task)

    while not state.done:
        action = llm(state.context)
        if action.kind == "tool":
            if not state.executed(action.idempotency_key):
                result = tool(action.name, action.args)
                state.record_tool(action.idempotency_key, result)
        else:
            state.apply(action)

        store.save(checkpoint_id, state)

        if state.waiting_for_approval:
            return state

    return state.result

実装の要点:

  • 再開に必要な最小状態をスキーマ化する。 履歴全量ではなく、圧縮履歴・計画・進捗・成果物・実行記録を明示的に管理する
  • 副作用の前後で実行記録を保存する。 冪等性キーと実行結果を使い、再開時の二重実行と結果の取り違えを防ぐ
  • スキーマとバージョンを管理する。 プロンプトや状態形式を改訂しても、古いチェックポイントを移行または安全に終了できるようにする

トレードオフ

  • ✅ 中断・障害・承認待ちが「やり直し」でなく「一時停止」になる
  • ✅ Budget Guard・Approval Gateと組み合わせて停止→再開のライフサイクルが成立する
  • ⚠️ 状態スキーマの設計と互換性管理は保守負担となる。プロンプト改訂で古いチェックポイントが再生不能になる場合もある
  • ⚠️ 会話履歴の永続化はプライバシー・機密リスクを伴う。保存範囲の最小化とアクセス制御が必須となる

クラウドパターンとの対応

クラウドパターン本パターンでの再定義
Event Sourcing状態を再構築可能な記録として永続化する発想を継承し、「推論の文脈」そのものを再構築対象とした
バッチ処理の Checkpoint/Restart長時間ジョブを区切りごとに保存して再開する古典を、LLM・ツール・承認を含む実行単位へ拡張した

関連パターン

  • Budget Guard — 打ち切り時の状態保全とセットで使い、停止後の再開を可能にする
  • Approval Gate — 承認待ちの間に状態を保持するために必須となる
  • Orchestrator-Workers — 長時間・多段の実行でサブタスク単位の再開を可能にする
  • ReAct — 長時間の自律ループ全般で反復状態を保全する

出典・参考

本文: CC BY 4.0 / コード片: MIT。GitHub で寄稿を受け付けています。