状態管理と引き継ぎ
対象読者: 複数工程の途中で情報が失われる問題を解決したい方、工程間の受け渡しを設計したい方
前提知識: オーケストレーションとは の基礎
複数工程のワークフローでは、工程の切れ目で情報が失われがちです。何を保持し、何を次へ渡すかを決めることが状態管理です。
会話履歴に頼らない
もっとも簡単な引き継ぎは、会話履歴をそのまま次工程へ持ち越す方法です。しかし履歴が長くなるほど必要な情報が埋もれ、失敗した工程だけを再実行することもできません。
| 方式 | 部分再実行 | 情報の見つけやすさ |
|---|---|---|
| 会話履歴のみ | できない | 履歴が長いほど困難 |
| 明示的な状態管理 | できる | 構造化されていて明確 |
何を状態として保持するか
graph LR
S1["工程1"] -->|成果物 + 前提| State["状態"]
State -->|必要分のみ| S2["工程2"]
S2 -->|成果物 + 前提| State保持するのは次の3種類です。
| 種類 | 例 |
|---|---|
| 成果物 | 生成したファイル、調査結果、決定事項 |
| 判断の前提 | 却下した案とその理由、確認済みの制約 |
| 進捗 | 完了した工程、残っている工程、失敗回数 |
一方、保持しなくてよいのは、試行錯誤の途中経過や、使い終わった中間データです。
引き継ぎの形式を決める
受け取る側が解釈に迷わないよう、形式をあらかじめ決めます。形式が固定されていれば、工程の中身を差し替えても前後に影響しません。
# 工程間で受け渡す形式の例
status: completed | failed | needs_review
output: 生成した成果物への参照
decisions: この工程で確定した事項
open_issues: 次工程へ持ち越す未解決事項open_issues を持たせておくと、判断できなかった点が黙って消えるのを防げます。
進捗を残すと再実行できる
どの工程まで完了したかを状態として持てば、失敗した工程から再開できます。これは失敗検知とリカバリの前提でもあります。全体をやり直す設計では、後半の工程で失敗するたびに最初からになります。
まとめ
- 会話履歴だけの引き継ぎでは、情報が埋もれ部分再実行もできない
- 状態として保持するのは、成果物・判断の前提・進捗の3種類
- 引き継ぎ形式を固定すると、工程の差し替えが容易になる
- 進捗を状態に持つことで、失敗した工程から再開できる
関連リンク
クイズ