learn-claude-code-s07_task_system.py

0 阅读1分钟

原址

s07_task_system.py,本质上是在前面几个章节基础上,第一次把“Agent 的工作”从一次性对话升级成了持久化任务系统(Task System)

前面的演进:

  • s01:循环

  • s02:工具

  • s03:Todo

  • s04:Subagent

  • s05:Skill

  • s06:Context Compact

这些都还是“当前会话内”的能力。

而 s07 开始:

Agent 不再只是“聊天时临时做事”,而是开始维护一个长期存在的任务板(Task Board)。

官方文档对它的定位是:

“A file-based task graph with ordering, parallelism, and dependencies”
—— 基于文件的任务图,支持顺序、并行、依赖关系。 (learn.shareai.run)

一、这一章到底解决什么问题

先看一个真实问题。

假设用户说:

做一个博客系统:
1. 后端 API
2. 数据库设计
3. 登录系统
4. 前端页面
5. Docker 部署

如果没有 Task System:

  • agent 只能靠 messages 记忆

  • 容易忘

  • 中途打断就丢

  • 无法恢复

  • 无法依赖管理

  • 无法多 agent 协作

所以 s07 引入:

Task = 外部持久化状态

核心思想:

把 Agent 的“脑内计划”
变成“磁盘上的任务图”

这是 AI Agent 从 Demo 到工程化的关键一步。

二、s07 的核心架构(最重要)

这一章只有一个真正核心:

任务文件 = Agent 的长期记忆

整体结构:

User Request
    ↓
Agent
    ↓
TaskManager
    ↓
tasks.json

任务被写入磁盘:

[  {    "id": "task-1",    "title": "Build API",    "status": "todo",    "deps": []
  }
]

于是:

  • 关闭程序后还能恢复

  • 多 agent 能共享

  • 可以追踪状态

  • 可以做依赖调度

这就是后面:

  • s08 Background Tasks

  • s09 Agent Teams

  • s11 Autonomous Agents

的基础。

三、你应该重点理解的 5 个概念

1. Task 数据结构

通常类似:

@dataclass
class Task:
    id: str
    title: str
    status: str
    deps: list[str]

它本质就是:

任务节点(Node)

注意:

deps

这是整个章节最重要字段。

它代表:

当前任务依赖谁

例如:

Task C depends on A/B

图结构:

A ──┐
    ├──> C
B ──┘

这已经不是 Todo List。

而是:

DAG(有向无环图)

这是工作流系统的基础。

2. 任务状态(status)

通常:

todo
doing
done

或者:

pending
running
completed
failed

Claude Code 真正内部也是类似状态机: (Claude Wiki)

pending -> running -> completed/failed/killed

为什么一定需要状态?

因为 Agent 需要:

  • 知道哪些能执行

  • 哪些执行完

  • 哪些失败

  • 哪些阻塞

这就是:

Workflow Runtime

的雏形。

3. 文件持久化(Persistence)

这是 s07 最大升级。

前面所有章节:

状态都在内存

s07:

json.dump(tasks, f)

或者:

json.load(f)

开始:

状态外部化

意义巨大。

因为:

LLM 上下文 ≠ 系统真实状态

真正生产级 Agent:

  • 必须把状态存磁盘

  • 或数据库

  • 或 Redis

  • 或任务队列

否则:

context 一炸
系统就失忆

4. Task CRUD

这是经典后端思想。

四件事:

操作

含义

Create

创建任务

Read

查询任务

Update

更新状态

Delete

删除任务

所以你会看到类似:

create_task()
list_tasks()
update_task()

本质:

AI Agent 开始拥有“后端”

5. 调度(Scheduling)

最关键逻辑:

if all(dep.done for dep in task.deps):
    runnable.append(task)

这是:

依赖解析器

含义:

只有依赖完成
当前任务才能执行

例如:

1. 先建数据库
2. 再写 API
3. 再写前端

不能乱序。

这就是:

工作流引擎

的最小实现。

四、这一章最关键的“认知升级”

这里是整个 learn-claude-code 非常重要的一次跃迁。

前面:

Agent = 会聊天的循环

s07 后:

Agent = 状态机 + 工作流系统

区别巨大。

五、代码里几个最值得学习的地方

1. 为什么用 JSON 文件

因为:

最低成本的持久化

它有几个优点:

  • 人类可读

  • 调试容易

  • 无数据库

  • 跨平台

  • 能直接 git diff

这是 AI Agent 原型里非常常见的方案。

很多 Claude Code 类项目:

memory/
tasks/
sessions/

其实都是 JSON 文件。

2. 为什么任务必须有 ID

例如:

id = str(uuid.uuid4())

因为:

title 不可靠

可能有:

"build api"
"build api"

但 ID 唯一。

后面:

  • mailbox

  • multi-agent

  • worktree

全部靠 ID 串联。

3. 为什么依赖关系比 Todo 更高级

Todo:

线性列表

Task Graph:

图结构

这是从:

个人待办

升级成:

工程 orchestration

比如:

Backend Team
Frontend Team
DevOps Team

之间的协调。

六、这一章和后续章节的关系(非常重要)

s07 是整个“并发 Agent 系统”的地基

后续章节全依赖它。

s08 Background Tasks

会变成:

Task 异步执行

任务不再阻塞主循环。

s09 Agent Teams

会变成:

多个 Agent 共同处理 Task Board

s10 Team Protocols

会增加:

任务审批
任务交接
状态同步

s11 Autonomous Agents

会变成:

Agent 自动认领任务

即:

while True:
    claim_unassigned_task()

七、你应该重点学习的代码片段(按重要度)

第一优先级

任务依赖:

deps

这是整个系统灵魂。

第二优先级

任务状态流转:

todo -> doing -> done

这是 Workflow Engine 基础。

第三优先级

JSON 持久化:

save_tasks()
load_tasks()

这是生产级 Agent 的必要条件。

第四优先级

可运行任务筛选:

runnable_tasks()

这是调度器。

八、这一章本质上在模仿什么系统

它其实在模仿:

1. Jira

任务管理
状态
依赖
负责人

2. Airflow

DAG 调度

3. Temporal / Prefect

Workflow Runtime

4. Claude Code 内部 Task Runtime

官方资料里明确提到: (Claude Wiki)

Task System = coordination backbone

即:

协调主干

九、为什么这一章特别重要

因为:

真正复杂 AI 系统
一定是“任务驱动”
而不是“对话驱动”

这句话非常关键。

ChatBot:

message-driven

Production Agent:

task-driven

区别:

Chat

Agent

临时上下文

长期状态

单轮响应

生命周期

线性对话

DAG 工作流

用户驱动

调度驱动

s07 就是这个分水岭。

十、一句话总结 s07

s07 做的事情可以浓缩成一句话:

把 Agent 的计划,
从“脑中的 Todo”
升级成“磁盘上的任务图”

这是 AI Agent 工程化真正开始的地方。 (learn.shareai.run)