代码讲解.md 2.5 KB

S12 Task System 代码讲解

这一节只讲相对 S11 新增的内容:

把任务变成可持久化、可依赖、可认领、可完成的任务图。


1. 本节新增内容

  • Task dataclass:任务数据模型。
  • .tasks/:任务持久化目录。
  • create_task():创建任务。
  • save_task() / load_task():保存和读取任务。
  • list_tasks() / get_task():查看任务。
  • can_start():检查依赖是否完成。
  • claim_task():认领任务。
  • complete_task():完成任务并提示下游解锁。
  • 5 个任务工具:create_tasklist_tasksget_taskclaim_taskcomplete_task

2. Task 数据结构

Task 是一个 dataclass:

@dataclass
class Task:
    id: str
    subject: str
    description: str
    status: str
    owner: str | None
    blockedBy: list[str]

一条任务保存成 JSON 后大概是:

{
    "id": "task_1234567890_0001",
    "subject": "实现登录页面",
    "description": "完成表单和校验",
    "status": "pending",
    "owner": None,
    "blockedBy": ["task_1234567890_0000"]
}

3. 状态流转

任务状态有三种:

pending -> in_progress -> completed

claim_task() 做:

pending -> in_progress
owner = "agent"

complete_task() 做:

in_progress -> completed

4. blockedBy

blockedBy 是依赖任务 ID 列表:

blockedBy: list[str] = ["task_a", "task_b"]

意思是:

当前任务必须等 task_a 和 task_b 都 completed 后才能开始

can_start(task_id) 会检查所有依赖:

如果依赖任务不存在 -> 不能开始
如果依赖任务不是 completed -> 不能开始
全部完成 -> 可以开始

5. .tasks/ 持久化

每个任务是一个文件:

.tasks/
  task_1234567890_0001.json

这样任务不会只存在内存里,程序重启后仍然能读回来。


6. 工具层封装

底层函数:

create_task()
claim_task()
complete_task()

工具处理器:

run_create_task()
run_claim_task()
run_complete_task()

模型真正看到的是工具 schema:

{
    "name": "create_task",
    "input_schema": {...}
}

7. 本节课堂重点

任务系统让 Agent 从“临时执行”进入“可管理工作流”。

有了任务系统,Agent 可以表达:

有哪些任务
谁正在做
哪些被依赖阻塞
哪些已经完成
完成后解锁了什么