Lesson 07 · メモリ

状態はディスクに書き込まれ、圧縮されても存続します

「圧縮されても生き残る状態 — それは会話の外にあるからです。」

⏱ 約 10 分 · 📝 3 つのインタラクティブ要素 · 🧑‍💻 出典 shareAI-lab · s07_task_system.py

TodoWrite とタスクの違いは何ですか?

s03 の

TodoManager もタスクをリストできますが、それはメモリに保存されます。 s06 で述べた auto_compact がトリガーされるとすぐに、messages[] が summary に置き換えられ、TodoManager のステータスが消滅します(メモリ内にあるため)。

s07 の Task は異なります。各タスクは .tasks/task_42.json ファイルです。コンテキストが圧縮されたり、プロセスが再起動されたり、エージェントが置き換えられたりしても、ディスク ファイルが存在する限り、 タスクは引き続き存在します

# .tasks/task_12.json
{
  "id": 12,
  "subject": "Refactor auth middleware",
  "description": "Extract JWT logic to shared module",
  "status": "pending",
  "blockedBy": [8, 11],   # 必须先完成 #8 和 #11
  "owner": ""
}
選択ルール: 一時的な ToDo には todo を使用します (完了したら忘れてください)。永続的なタスク (セッション間で保持されるタスクや依存するタスク) には task を使用します。

BlockedBy · 依存関係グラフのテンパー

blockedBy はタスク ID のリストです。現在のタスクが「実行可能」になる前に、これらは completed でなければなりません。

s07 の実装には細かい詳細が含まれています。タスクが完了すると、他のすべてのタスクの BlockedBy リストから自動的に削除されます

def _clear_dependency(self, completed_id: int):
    # Scan every task, remove completed_id from their blockedBy
    for f in self.dir.glob("task_*.json"):
        task = json.loads(f.read_text())
        if completed_id in task.get("blockedBy", []):
            task["blockedBy"].remove(completed_id)
            self._save(task)

この方法では、エージェントは「どのタスクがブロック解除されているか」テーブルを個別に管理する必要がなく、.tasks/ をトラバースする限り、status=="pending" and not blockedBy で見つかったテーブルが実行可能になります。

依存関係グラフの相互作用

以下のウィジェットは、5 つのタスクの依存関係グラフを提供します。 「完了」をクリックすると、blockedBy が自動的に更新され、どのタスクが「実行可能」になる (緑色で強調表示される) ことがわかります。

圧縮した後でも生き残ることはできますか?

s06 は、auto_compact がmessages[] を概要に置き換えると述べました。ただし、タスクはディスク上にあるため影響を受けません。 テスト: エージェントに 5 つのタスクを実行させます。会話を圧縮した後、.tasks/ をスキャンし、同じ場所で会話を続けることができます。

Interactive

Widget 1 · 依存関係グラフ · [完了] をクリックして依存関係の更新を表示します

5 つのタスクのトポロジ関係。保留中のタスクのボタンをクリックしてステータスを変更し、blockedBy 配列と「次の実行可能ファイル」リストの変化を観察します。

Task 列表(.tasks/ 目录)
当前可执行(status=pending, blockedBy=[])
依赖关系图
Interactive

Widget 2 · 圧縮生存 · タスク生存 auto_compact

エージェントに 3 つのタスクを作成させ、auto_compact をトリガーして (メッセージがクリアされます)、復元します。タスクがまだ存在するかどうかを確認します。

.tasks/ 目录
messages[]
Interactive

Widget 3 · 依存関係チェーン · どのタスクを今アクティブ化できるかを答えるための画像を提供します

5 つのタスクの依存関係。回答: 特定の状況で、 実行できる次のステップは何ですか (複数選択可能)。

答对 0 / 4