AIエージェントに複雑な仕事をさせると、途中で指示を忘れたり、作業を重複させたりする問題が起きます。この記事では、AI自身に状態を覚えさせず、外部ファイルへ切り分ける「ステートレス設計」を解説します。記憶と処理の役割を分けることで、途中で停止しても再開できる安定した動作環境を作れます。
ステートレス設計とは何か
「ステートレス」とは、処理を行う側が過去の経過や状態を自分の中に保持しない仕組みのことです。
身近な例で例えると、「頭の中にすべての手順を記憶して作業する(ステートフル)」のではなく、「机の上に置かれた指示書と進捗メモを見ながら、その都度指示された作業を行い、終わったらメモを更新する(ステートレス)」という事務作業の動き方と同じです。
事務作業に例えた動きの流れ
- 机の上の「ルール指示書」と「タスク一覧」を読む。
- 今回行うべき作業を確認し、実行する。
- 作業結果を「成果物ファイル」に保存する。
- 「進捗メモ」に「完了」と書き込む。
この仕組みであれば、処理を行う人が途中で交代しても、机の上の書類(ファイル)が残っているため、次の人は前の状況を記憶していなくても作業を再開できます。
なぜAIに記憶を依存させてはいけないのか
通常のチャットAIとの会話では、過去のやり取りを元に会話が成立します。しかし、これは同じチャット画面(セッション)の中だけで保持される「一時的な記憶」です。
AI自身に記憶や状態を依存させると、以下の実務的な問題が発生します。
- モデル変更時の引き継ぎ不可: OpenAIのモデルからAnthropicのモデルなど、別のAIに切り替えたときに過去の記憶を引き継げません。
- 復旧の困難さ: 処理の途中でエラーが発生してプログラムが停止した場合、どこまで作業が進んでいたかが分からなくなります。
- 指示の曖昧化: 会話が長くなるにつれてAIの記憶が薄れ、最初に指示したルールや条件を無視し始めます。
AIを「記憶庫」ではなく「処理エンジン」にする
この問題を解決するため、AIは「指示通りに動く処理エンジン」とし、記憶や進捗状態はすべて「外部ファイル」で管理します。
具体的には、プロジェクトフォルダ内に以下のテキストファイルを配置し、AIが実行されるたびにこれらのファイルを読み書きさせます。
| ファイル名 | 記述する内容 | 役割 |
|---|---|---|
rule.md | 守るべき文章ルールや禁止事項 | 品質を一定に保つための枠組み |
knowledge.md | 作業に必要な専門情報やマニュアル | 参照データを固定する |
tasks.csv | やるべき作業項目の一覧 | 工程の順序を定義する |
state.md | 現在どこまで終わっているかの進捗履歴 | 途中からの再開を可能にする |
この「AIの外側で環境を整えて出力を制御する」という考え方は、ハーネスエンジニアリングの実践に基づいています。
ブログ執筆の自動化における動作事実
私がブログ記事の執筆を自動化する際、以前はAIに対して「構成を作って、終わったら本文を書いて」とチャット上で連続して指示を出していました。しかし、途中で「構成を作る」という前段の条件を無視して本文を書き始める問題が発生しました。
そこで、処理の流れを以下のように変更しました。
tasks.csvに「構成案作成」「本文執筆」「ファクトチェック」「誤字脱字確認」と工程を書き出す。- AIが1つの工程を完了するたびに、
state.mdに「構成案作成:完了」と書き込ませる。 - 次のAIの処理を実行する際は、
state.mdを読み取らせ、「未完了」となっている「本文執筆」から作業を開始させる。
この構成に変更した結果、AIが途中で工程を飛ばす問題や、作業が重複するミスが解消されました。
なお、複数のルールファイルを整理する手法については、AIエージェントのルールを細分化する設計手法に整理しています。
ステートレス設計がもたらす実務上の利点
処理と記憶を分離する設計には、以下の具体的な利点があります。
AIモデルの交換が容易になる
ルールや進捗状況が外部ファイル(MarkdownやCSV)として完全に独立しているため、使用するAIモデルをGPTからClaude、またはGeminiへ切り替えても、同じファイルを読み込ませるだけで何事もなかったかのように作業を継続できます。
作業の途中再開が可能になる
プログラムのエラーや通信障害で処理が停止した場合でも、state.md に最後に完了した工程が記録されていれば、新しいセッションを立ち上げて「state.md を確認し、未完了の工程から再開してください」と指示するだけで復旧できます。過去の会話履歴を遡って学習させる必要はありません。
ステートレス設計における実務上の注意点
この設計を実用化するにあたっては、以下の注意点と対処法が存在します。
プロンプトキャッシュによる費用と遅延の抑制
毎回の処理で rule.md や knowledge.md などの外部ファイルをすべてAIに読み込ませると、実行するたびに入力データの費用(トークン費用)が発生し、処理の遅延も大きくなります。
これに対しては、主要なAIモデルが提供している「プロンプトキャッシュ機能(一度読み込ませた指示データを一時的に保存して再利用する仕組み)」を併用することが実務上の前提条件となります。これにより、費用と処理時間を抑えられます。
外部ファイル増大時のアプローチ
参照するべき専門情報(knowledge.md)の分量が極めて大きくなった場合、ファイルを丸ごとAIに読み込ませる手法は、AIが一度に処理できる情報量の上限に達した段階で破綻します。
情報量が増大した場合は、ファイルをそのまま読み込ませるのではなく、キーワードや関連度に応じて必要な部分だけを自動で切り出してAIに渡す仕組み(検索拡張生成など)へ移行する必要があります。
まとめ:AIと状態管理の役割を分ける
AIエージェントを安定して動かすためには、AIの記憶容量に頼るのではなく、システム側で状態を管理する環境を作ることが重要です。
- AIは目の前の処理(計算や文章生成)に専念させる。
- 進捗、ルール、ルール対象の知識はすべて外部ファイルで保持する。
まずは、AIに毎回指示しているルールを rule.md という1つのファイルに切り出し、実行時に「このファイルを読んでから作業してください」と指示を出すところから始めてみてください。