Agent Mentor Learn
エージェントワークフローの設計: 単発の会話からマルチステップ自動化へ · 第 4 回 / 全 6 回

レッスン4: 状態管理とコンテキストの受け渡し

学習目標:

  • ワークフロー状態とエージェントコンテキストを区別する
  • 3つの状態管理パターンを習得する
  • チェックポイントとリカバリを理解する

前提: レッスン3: 複雑なタスクをワークフローに分解する | 次: レッスン5 >>

状態管理がワークフローの中核である理由

完璧なワークフローを設計したとします。10ステップ、クリーンな依存関係。ステップ8でサーバーが再起動しました。ワークフローがクラッシュします。

再実行しますか? すると最初の7ステップの作業 — おそらく30分分 — が捨てられます。

これが状態管理なしの代償です。

状態管理は3つの問題を解決します:1

  1. ステップ間のデータ受け渡し: ステップ3はステップ1と2の結果をどう取得するか?
  2. 進捗追跡: ワークフローはどこまで進んでいるか? 残りはどれだけか?
  3. 障害リカバリ: クラッシュ後、最初からやり直すのではなく停止した場所から再開する。

状態管理がなければ、エージェントは会話履歴を通じてのみ情報を渡せます。会話履歴はオーバーフローし、失われ、エージェントに忘れられます。

状態管理があれば、ワークフローは明確な「記憶」を持ちます: 永続的で、クエリ可能で、リカバリ可能です。2

状態 vs. コンテキスト vs. メモリ

この3つの言葉は混同しやすいので、まず定義を固めましょう:1

状態

  • 現在のタスクに関するすべての情報: どのステップにいるか、各ステップの結果、次に何をするか
  • スナップショットです: この瞬間にワークフローが知っているすべて
  • 保存場所: スクリプト変数、データベース、ファイル

コンテキスト

  • 単一のエージェント呼び出しに渡される情報
  • 入力です: このエージェントが仕事をするために必要な情報
  • 状態から選択的に引き出されます: すべての状態がエージェントに渡されるわけではなく、関連部分のみ

メモリ

  • 過去から学んだ教訓: 以前に何をしたか、どんな問題が起きたか、解決策は何だったか
  • 履歴です: タスクやセッションをまたぐ長期的な知識
  • このレッスンの範囲外です(長期メモリはそれ自体が難しいトピックです)

例:

重要な原則: 状態はグローバル、コンテキストはローカルです。3

状態パターン1: スクリプト変数(インメモリ状態)

使用場面: 短いワークフロー(< 10分)でプロセスやマシンをまたぐ必要がない場合。

長所: シンプル、高速、外部依存なし。

短所: プロセスがクラッシュすると状態が失われ、リカバリする方法がない。

基本パターン

状態はどこにある? 関数のローカル変数(processed, results, errors)。

プロセスがクラッシュしたら? すべての状態が失われ、最初からやり直します。

改良版: 構造化された状態オブジェクト

なぜ役立つか: 状態の構造が明確で、他の関数に渡しやすく、(永続化が必要なら)シリアライズしやすい。

状態パターン2: チェックポイント

使用場面: 中程度の長さのワークフロー(10-60分)で、コストの高い操作後に進捗を保存する必要がある場合。

長所: クラッシュ後、最新のチェックポイントから再開でき、作業のやり直しを避けられる。

短所: チェックポイントの位置とリカバリロジックを設計する必要がある。1

チェックポイント位置の選択

チェックポイント戦略:

  • 定期的チェックポイント: Nタスクごと、またはM分ごとに保存
  • フェーズチェックポイント: 各主要フェーズ完了後に保存(例: 「分析フェーズ完了」)
  • クリティカル操作前: 不可逆な操作の前に保存(例: デプロイ、削除)

状態パターン3: 外部ストレージ(永続状態)

使用場面: 長時間実行されるワークフロー(> 1時間)、マシン間で調整が必要な作業、人間の承認が必要な作業。

長所: 状態は永続的。プロセスのクラッシュやマシンの再起動は問題にならず、一時停止/再開がサポートされる。

短所: 外部依存(データベース、Redis)が必要で、複雑性が増す。4

基本実装

重要なパターン: 状態マシン2

ワークフローのフェーズは状態マシンの状態です:

init → processing → awaiting_approval → approved → finalizing → completed                     rejected → cancelled

すべてのフェーズ遷移が外部ストレージに保存されることで、ワークフローは任意のフェーズから再開できます。

コンテキスト受け渡しのベストプラクティス

原則1: 必要なものだけ渡す

なぜ? コンテキストが大きいほど、エージェントは気が散りやすくなり、推論品質が低下し、コストが上がります。3

原則2: コンテキストを構造化する

なぜ? 構造化されたコンテキストはエージェントが理解しやすく、デバッグもしやすい。

原則3: 蓄積型コンテキスト vs. リセット型コンテキスト

蓄積型コンテキスト: 各ステップの結果がコンテキストに追加され、増え続けます。

リセット型コンテキスト: 各ステップでコンテキストをクリアし、必要なものだけを保持します。

どちらを選ぶか: コンテキスト爆発を避けるため、ほとんどの場合リセット型コンテキストを使います。蓄積型コンテキストは、後のステップが本当にすべての前のステップの結果を必要とする場合(最終サマリーステップなど)のみ使います。5

状態の可観測性

良いワークフローは次の質問に答えられるべきです:

  • 現在どのフェーズにいるか?
  • どれだけ完了したか? 残りはどれだけか?
  • どれだけのエラーに遭遇したか?
  • いつ完了すると予想されるか?

進捗追跡の実装


次のレッスン: レッスン5: エラーハンドリングとリトライ戦略 — ワークフローが失敗時に単純にクラッシュするのではなく、優雅にリカバリする方法を学びます

Footnotes

  1. MachineLearningMastery: 5 Architectural Patterns for Persistent Memory and State in AI Agents — https://machinelearningmastery.com/5-architectural-patterns-for-persistent-memory-and-state-in-ai-agents/ 2 3

  2. MindStudio: Workflow State vs. Session State — https://www.mindstudio.ai/blog/workflow-state-vs-session-state-ai-agents 2

  3. Chrono Innovation: Architecture for Scalable Agentic AI Workflows — https://www.chronoinnovation.com/resources/agentic-ai-workflows-architecture/ 2

  4. Appamass: State Management Patterns for Reliable AI Agent Workflows — https://appamass.com/en/blog/state-management-patterns-for-reliable-ai-agent-workflows-5yemlru6ui6cacast3l5

  5. Ranjan Kumar: Building Agents That Remember — https://ranjankumar.in/building-agents-that-remember-state-management-in-multi-agent-ai-systems

練習

01

以下の3つのワークフローに対して、適切な状態管理パターン(スクリプト変数、チェックポイント、外部ストレージ)を選び、理由を説明してください:

レベル1: 状態管理パターンを選ぶ

ワークフローA: 20枚の画像をバッチ圧縮、各5秒、合計100秒

ワークフローB: 機械学習モデルを訓練、50エポック、各10分、合計500分(8時間)

ワークフローC: 100個のPRをレビュー、各々マージ前に人間の承認が必要、プロセス全体が数日かかる可能性がある

完了基準 · ローカルでチェック
02

「マルチサービスデプロイ」ワークフローの状態オブジェクトを設計してください。ワークフローは以下を行います: (1) 5つのサービスのDockerイメージをビルド (2) イメージレジストリにプッシュ (3) テスト環境に1つずつデプロイ (4) 統合テストを実行 (5) テストが通ったらプロダクションにデプロイ。

レベル2: 状態構造を設計する

要件:

  • ワークフロー状態を表すJSONオブジェクトを設計する
  • 含めるべきもの: 現在のフェーズ、サービスごとのステータス、エラー情報、タイムスタンプ
  • チェックポイントをどこに保存すべきか説明する
完了基準 · ローカルでチェック