3小时白干了!Agent崩溃让我想砸键盘,直到我用上Task System断点续传
·

Agent重构50个文件,跑了3小时突然崩溃——所有进度丢失。 即使有上下文压缩的transcripts,Agent也无法精确恢复:哪些文件已修改?哪些待修改?下一步该做什么?本文用Task System实现任务持久化,让Agent从"临时工具"升级为"可恢复的生产系统"。
重启即失忆:跨天任务的噩梦
你让Agent处理一个跨天任务:
Day 1, 17:00: Agent正在重构第15个文件,进度30%
Day 1, 18:00: 你关机下班
Day 2, 09:00: 重新启动Agent
Agent: "你好!我是你的编程助手。今天有什么可以帮你的?"
你: "继续昨天的重构任务"
Agent: "什么是重构任务?"
你: 😱
即使有上下文压缩的transcripts,Agent也无法精确恢复:
- 哪些文件已修改?
- 哪些待修改?
- 中间生成的临时文件在哪?
- 下一步该做什么?
小李 frustrated: “这就像一个程序员每天下班前把所有代码删掉,第二天从头开始!”
核心洞察:从"会话"到"系统"
聊天软件 vs 项目管理系统
会话(Session)模式像微信聊天:
- 实时对话,历史记录
- 但关机后所有上下文丢失
- 无法分配任务、追踪进度
系统(System)模式像Jira/禅道:
- 任务持久化到数据库
- 状态追踪(待办/进行中/已完成)
- 依赖管理(任务B依赖任务A)
- 崩溃后可恢复
代码实现:Task System核心逻辑(70行)
class TaskSystem:
"""文件持久化的任务管理系统"""
def __init__(self, tasks_dir: Path):
self.dir = tasks_dir
self.dir.mkdir(exist_ok=True)
def create_task(self, title: str, description: str,
dependencies: list = None) -> str:
"""创建新任务"""
task_id = str(uuid.uuid4())[:8]
task = {
"id": task_id,
"title": title,
"description": description,
"status": "pending",
"dependencies": dependencies or [],
"created_at": datetime.now().isoformat(),
"updated_at": datetime.now().isoformat(),
"result": None
}
# 持久化到JSON文件
with open(self._task_file(task_id), 'w') as f:
json.dump(task, f, indent=2)
return task_id
def update_task(self, task_id: str, status: str = None,
result: str = None) -> bool:
"""更新任务状态"""
task = self.get_task(task_id)
if not task:
return False
if status:
task["status"] = status
if result:
task["result"] = result
task["updated_at"] = datetime.now().isoformat()
with open(self._task_file(task_id), 'w') as f:
json.dump(task, f, indent=2)
return True
def get_next_tasks(self) -> list:
"""获取可执行的任务(依赖已满足)"""
all_tasks = {t["id"]: t for t in self.list_tasks()}
ready = []
for task_id, task in all_tasks.items():
if task["status"] != "pending":
continue
# 检查依赖是否都已完成
deps_satisfied = all(
all_tasks.get(dep, {}).get("status") == "completed"
for dep in task["dependencies"]
)
if deps_satisfied:
ready.append(task)
return ready
def get_task_graph(self) -> str:
"""获取任务依赖图的可视化文本"""
tasks = self.list_tasks()
lines = ["Task Dependency Graph:", "=" * 40]
for task in tasks:
deps = ", ".join(task["dependencies"]) if task["dependencies"] else "None"
status_emoji = {
"pending": "⏳",
"in_progress": "🔄",
"completed": "✅",
"failed": "❌"
}.get(task["status"], "❓")
lines.append(f"{status_emoji} {task['id']}: {task['title']}")
lines.append(f" Status: {task['status']}")
lines.append(f" Depends on: {deps}")
if task["result"]:
lines.append(f" Result: {task['result'][:50]}...")
lines.append("")
return "\n".join(lines)
# 全局任务系统实例
task_system = TaskSystem(Path(".tasks"))
关键设计:
- 文件持久化:每个任务一个JSON文件,崩溃后可恢复
- 状态机:pending → in_progress → completed/failed
- DAG依赖检查:确保任务按依赖顺序执行
- 可视化:任务依赖图一目了然
运行效果:代码重构项目对比
无Task System(纯内存):
Day 1: Agent工作3小时,重构了15个文件
Day 1 18:00: 关机下班
Day 2 09:00: 重启Agent
Agent: "你好!今天有什么可以帮你的?"
你: "继续重构任务"
Agent: "什么重构任务?"
结果:全部丢失,从头开始
有Task System(持久化):
Day 1:
- 创建任务:"重构utils.py", "重构models.py", ...
- 完成15个任务,标记为completed
- 35个任务仍在pending
- 关机
Day 2:
- 重启Agent
- 读取.tasks/目录
- 发现35个pending任务
- 从第16个任务继续
结果:断点续传,无损失
给你的团队:生产级Task System
阶段1:单Agent + Task System
- 实现任务持久化
- 支持断点续传
- 单Agent处理复杂项目
阶段2:任务粒度控制
# 错误:一个任务包含太多工作
task = create_task("Refactor entire codebase", "...")
# 结果:运行2小时,进度不明确,崩溃后全部重做
# 正确:细粒度任务,可并行
task1 = create_task("Refactor utils.py", "...")
task2 = create_task("Refactor models.py", "...")
# 可并行、可恢复、进度明确
阶段3:依赖管理
# 任务B依赖任务A
task_a = create_task("Task A", "...")
task_b = create_task("Task B", "...", dependencies=[task_a])
# 自动检测循环依赖
def validate_dag(tasks):
"""验证无循环依赖"""
# 拓扑排序检查
# 如有循环,抛出异常
避坑指南
❌ 陷阱1:任务粒度过大
# 错误:一个任务包含太多工作
task = create_task("Refactor entire codebase", "...")
# 结果:运行2小时,进度不明确,崩溃后全部重做
✅ 解决方案:
# 正确:细粒度任务,可并行
task1 = create_task("Refactor utils.py", "...")
task2 = create_task("Refactor models.py", "...")
❌ 陷阱2:循环依赖
# 错误:A依赖B,B依赖A
task_a = create_task("Task A", "...", dependencies=["B"])
task_b = create_task("Task B", "...", dependencies=["A"])
# 死锁!两个任务都永远无法执行
❌ 陷阱3:不及时更新状态
# 错误:任务完成了但不更新状态
# 结果:重复执行,浪费时间
✅ 解决方案:
# 每个任务完成后立即更新
task_system.update_task(task_id, status="completed", result="重构完成")
总结:从玩具到生产系统
Task System解决了Agent开发的终极挑战:
- 可靠性:崩溃后可恢复,不再"重启即失忆"
- 可追踪性:任务状态一目了然,审计追踪完整
- 可规划性:支持复杂项目的任务分解和依赖管理
这就像从"个人脚本"升级为"企业级工作流引擎"——不再是临时工具,而是可依赖的生产系统。
🔥 互动投票:
你的Agent最长跑过多少小时的任务?
- A. < 1小时(简单任务)
- B. 1-3小时(中型任务)
- C. 3-8小时(大型任务)
- D. > 8小时(跨天任务,需要Task System)
更多推荐



所有评论(0)