3397 字
17 分钟
如何让 Agent 持续自主执行一段较长的任务

上一篇 如何用第一性原理和对抗性审查指挥 Agent Debug 讲的是先拆系统为什么会进入这个状态,再拦住错误诊断。把现象、假设、探针、审查和补丁拆开,是为了别让 Agent 在错的层上打补丁。那套分工解决的是:这一次 bug 怎么查。

但如果任务要连续跑 1 小时甚至数小时,问题会变成另一类。系统会不会挂住,会不会忘了做到哪,会不会慢慢偏离最初的 Goal。

这种时候我会放三个并列的 Agent:Master 管全局状态、定时监督、进度和事件;Development 管开发、测试、Debug 和修复;Acceptance 管查错、查漏、查偏、查越界和验收。三个 Agent 共用一套任务状态,靠状态、事件和阶段结果协作。

三个 Agent 的并列关系#

┌──────────────────────┐
│ GOAL │
│ 目标 / 范围 / 约束 │
│ 验收标准 / 阶段目标 │
└──────────┬───────────┘
┌────────────────────────────────────────────────┐
│ SHARED TASK STATE │
│ │
│ Goal / Progress / Events / Decisions │
│ Blockers / Status / Pitfalls / Acceptance │
└────────────────────────────────────────────────┘
▲ ▲ ▲
│ │ │
│ │ │
┌────────────┴──────┐ ┌───────┴─────────┐ ┌───────┴──────────┐
│ MASTER AGENT │ │ DEVELOPMENT │ │ ACCEPTANCE AGENT │
│ │ │ AGENT │ │ │
├───────────────────┤ ├──────────────────┤ ├──────────────────┤
│ 定时监督 │ │ 开发 │ │ 查错 │
│ 记录进度 │ │ 测试 │ │ 查漏 │
│ 记录事件 │ │ Debug │ │ 查偏 │
│ 记录踩坑 │ │ 修复 │ │ 查越界 │
│ 维护全局状态 │ │ 推进阶段 │ │ 验收 │
│ 异常恢复 │ │ │ │ │
└──────────┬────────┘ └────────┬─────────┘ └────────┬─────────┘
│ │ │
└───────────────────┼────────────────────┘
持续更新状态
┌──────────────────┐
│ 下一轮监督 / 执行 │
└──────────────────┘

三个 Agent 职责并列,盯的东西不一样。Master 做全局观察,Acceptance 做独立验收,Development 负责开发,围着同一个 Goal。

Master Agent:任务状态管理者和监督者#

Master Agent 是整个长任务的全局观察者。它要保证任务始终能被看见、能被追回去、挂了能恢复、停了能接着做。

主要负责:

Master Agent
├── 定时巡查 Agent 状态
├── 记录整体进度
├── 记录关键事件
├── 记录开发过程中踩过的坑
├── 维护当前阶段
├── 维护 Goal / Scope / Constraint
├── 维护 Blocker
├── 维护关键决策
├── 判断整体任务是否偏离
└── 发现 Agent 异常时进行恢复

定时监督#

Master Agent 按固定周期巡查。

Development Agent
├── 是否仍在运行?
├── 最近是否产生进展?
├── 当前正在做什么?
├── 是否长时间没有状态变化?
└── 是否出现连续失败?
Acceptance Agent
├── 是否发现新的问题?
├── 是否发现需求遗漏?
├── 是否发现范围偏移?
└── 是否发现越界修改?

根据这些信息更新整体状态,并决定:

  • 继续运行
  • 提醒 Agent
  • 恢复挂起 Agent
  • 重新分配任务
  • 触发额外分析
  • 进入下一阶段

记录进度和事件#

长任务最怕的是:Agent 自己知道发生了什么,系统不知道。

所以 Master Agent 要持续记录:

Progress
├── 当前阶段
├── 已完成任务
├── 正在执行任务
└── 下一步任务
Events
├── Agent 启动
├── 阶段完成
├── 测试失败
├── Bug 修复
├── 方案变更
├── Agent 异常
└── Agent 恢复

任务跑几个小时之后,仍然能很快回答:现在做到哪里了?中间发生过什么?为什么选现在这个方案?哪些问题已经解决?还有哪些没解决?

记录开发踩过的坑#

这一点在长期 Agent 工作流里特别重要。Master Agent 要同时记下:为什么之前失败,以及以后应该怎么避开。

比如 Development Agent 曾经遇到:

问题:
某个 API 在高并发情况下出现死锁。
尝试:
第一次通过修改锁顺序解决,但导致另一个测试失败。
最终方案:
调整任务队列的生命周期管理。
根因:
原来的锁持有范围过大。
经验:
后续修改该模块时禁止在 IO 操作期间持有该锁。

可以收成:

Pitfalls
├── 问题现象
├── 根因
├── 错误尝试
├── 最终解决方案
└── 后续注意事项

下一轮 Agent 开始工作时,可以直接读到已有经验。一次任务里的失败,能变成下一次任务的知识。

如果某个坑反复出现,还可以再往上收一层:

  • 开发规范
  • Check Rule
  • Hook
  • 自定义 Skill
  • 项目级文档

最终是:

踩坑
记录
总结
形成规则
自动检查 / Skill
后续任务避免再次踩坑

我觉得这是 Master Agent 真正值钱的长期能力。普通任务管理只记进度,它还记这个团队是怎么把坑踩出来的。

Development Agent:真正干活的人#

Development Agent 是主要执行者,负责把当前阶段的目标做完。

Development Agent
├── 读取任务和当前状态
├── 阅读代码
├── 分析问题
├── 实现功能
├── 修改代码
├── 运行测试
├── Debug
├── 修复问题
└── 推进当前阶段

Development 和 Debug 由同一个长期 Agent 承担。真实的软件开发本来就是:

开发
运行
发现问题
Debug
修复
重新运行
继续开发

同一个 Agent 保持整个上下文,更容易理解:为什么当初这么实现、哪个修改引入了问题、当前 Bug 和前面的代码有什么关系、为什么之前的方案失败。

所以 Development Agent = Dev + Test + Debug + Fix + Continue。它是任务的主要生产者。

Acceptance Agent:独立找问题的人#

Acceptance Agent 的核心是尽可能证明当前结果仍然有问题。可以把它看成一个独立的反向思考者。

主要从四个方向检查:

Acceptance Agent
├── 查错
├── 查漏
├── 查偏
└── 查越界

查错#

已经实现的东西有没有问题:

  • 逻辑错误
  • 异常情况
  • 边界条件
  • 性能问题
  • 回归问题
  • 测试覆盖不足

查漏#

需求是否全部实现。

PRD
├── 功能 A ✅
├── 功能 B ✅
├── 功能 C ❌
└── 功能 D ?

Development Agent 认为“功能已经完成”之后,Acceptance Agent 仍要对照需求逐项确认。

查偏#

Agent 是否逐渐偏离最初目标。

原始 Goal 可能是:

实现一个轻量级登录模块

开发过程中却慢慢变成:

重构整个用户系统
修改数据库架构
替换认证框架
重写权限系统

这就是典型的 Scope Drift。Acceptance Agent 应该及时指出:当前工作已经超出 Goal 的必要范围。

查越界#

Agent 是否改了明确禁止修改的区域。

允许:
src/auth/*
src/api/login/*
不允许:
数据库核心结构
支付模块
用户权限系统

避免长任务跑得越久,修改范围越大。

三个 Agent 共享一套持久化状态#

三个 Agent 围着一套持久化任务状态工作。

.agent/
├── GOAL.md
├── STATUS.md
├── PROGRESS.md
├── EVENTS.md
├── DECISIONS.md
├── BLOCKERS.md
├── PITFALLS.md
└── ACCEPTANCE.md

各自放什么:

GOAL.md
→ 最终目标、范围、约束
STATUS.md
→ 当前阶段、Agent 状态
PROGRESS.md
→ 已完成、进行中、下一步
EVENTS.md
→ 关键事件和时间线
DECISIONS.md
→ 重要技术决策及原因
BLOCKERS.md
→ 当前阻塞问题
PITFALLS.md
→ 已踩过的坑、根因、解决方案、后续注意事项
ACCEPTANCE.md
→ 验收标准和验收结果

即使 Agent 因为 Context 压缩、进程退出或其他原因重启,也可以通过状态把任务接回来。

三个 Agent 应该长期并行存在#

它们可以同时在。

┌─────────────────┐
│ Shared State │
└───────┬─────────┘
┌───────────────┼───────────────┐
│ │ │
▼ ▼ ▼
Master Agent Development Agent Acceptance Agent
│ │ │
定时巡查 持续开发 持续审查
│ │ │
└───────────────┼───────────────┘
状态持续更新

Development Agent 在干活的时候,Acceptance Agent 可以同时审查;Master Agent 周期性观察整个系统。Acceptance 不必等 Development 完成一个“大阶段”才开始。

Master Agent 的监督循环#

Master Agent 按固定周期巡查:

┌──────────────────┐
│ Master Agent │
└────────┬─────────┘
读取共享状态
检查 Agent 状态
┌────────────┼────────────┐
│ │ │
▼ ▼ ▼
正常 长时间无进展 异常退出
│ │ │
▼ ▼ ▼
记录状态 分析原因 恢复 Agent
│ │ │
└────────────┼────────────┘
检查整体进度
更新事件 / 进度
记录新的踩坑
下一次巡查

这里的“定时”很重要。长任务里更常见的问题不是报错,而是什么都没报错,但已经半小时没有任何有效进展。Master Agent 得能认出这种情况。

/goal:固定长期目标#

长任务跑几个小时后,最容易发生的是目标漂移。所以我会把最终目标显式固定下来:

GOAL
完成 XXX 功能。
必须满足:
1. ...
2. ...
3. ...
允许修改:
1. ...
2. ...
禁止修改:
1. ...
2. ...
最终完成标准:
1. ...
2. ...

Master、Development、Acceptance 三个 Agent 都以这个 Goal 作为共同基准。

/paseo-loop:持续运行的循环机制#

Paseo Loop 更适合承担“让任务不断向前推进”的职责:

当前状态
执行当前任务
验证结果
更新任务状态
是否完成?
│ │
否 是
│ │
▼ ▼
下一轮执行 结束

它把一个长任务拆成很多个可验证的小循环。同时应该设置:

  • 最大迭代次数
  • 最大运行时间
  • 明确完成条件

避免 Agent 因为判断失误进入无限循环。

/paseo-loop 是调度层,不是这套架构本身。Paseo 怎么当 runtime、/paseo-loop 怎么落地,我写在 我怎么使用 Paseo 里。

Hook:把关键检查自动化#

Hook 适合做那些每次都该执行、不该漏掉的检查。

代码发生变化
Hook
├── lint
├── typecheck
├── test
└── build

以及:

阶段完成
Hook
更新状态 / 记录事件 / 执行验证

Loop 负责“继续做”,Hook 负责“自动检查”。具体怎么接到 Paseo 的调度上,同样见 我怎么使用 Paseo

Subagent:尽可能并行,但限制层级#

长任务中,我会尽量用 Subagent,把可以并行的工作拆出去。

Development Agent
├── Research Subagent
├── Test Subagent
└── Analysis Subagent

但一般控制在 2 层以内:

Main
└── Agent
└── Subagent

任务树过深会导致上下文失真、责任边界模糊、状态难追、重复劳动、故障难定位。所以我的原则是尽可能横向并行,层级压在两层以内。

遇到复杂问题时,再临时增加认知能力#

正常情况下 Master、Development、Acceptance 三个就够了。

当某个问题明显复杂,比如根因不明确、两套技术方案选不下来、Agent 连续多次失败、怀疑已经走错方向,才临时调用其他 Subagent / Skill:

Advisor
→ 第二意见
Committee
→ 多角度 Root Cause Analysis
Handoff
→ 把任务交给另一个更适合的 Agent

额外的 Agent 资源,集中用在真正困难的问题上。/paseo-advisor/paseo-committee/paseo-handoff 的日常用法,见 我怎么使用 Paseo。这里只关心它们在长任务架构里的位置:平时不占坑,卡住了再请进来。

长任务最重要的是失败经验可以积累#

整个系统最后应该形成这样的反馈:

开发
踩坑
Master 记录事件
记录到 PITFALLS
总结根因 / 解决方案
提炼成规则 / Skill
下一次任务直接复用

Agent 系统在不断积累:

项目 1
踩坑
经验
项目 2
复用经验
新的踩坑
经验升级
项目 3
……

慢慢会形成一套自己的工程知识库和 Agent Skill 库。Master Agent 和普通“任务管理 Agent”的差别也在这里:它同时记录任务做到哪里了,以及这个团队是怎么把坑踩出来的、以后怎么避免再踩。

最终的长期自治架构#

一个要跑数小时甚至更久的任务,可以抽象成:

┌──────────────────┐
│ GOAL │
│ 目标/范围/约束 │
│ 阶段目标/验收标准 │
└────────┬─────────┘
┌──────────────────────────────────────────────────────┐
│ SHARED TASK STATE │
│ │
│ Goal / Status / Progress / Events / Decisions │
│ Blockers / Pitfalls / Acceptance │
└──────────────────────────────────────────────────────┘
▲ ▲ ▲
│ │ │
│ │ │
┌────────┴────────┐ ┌────────┴────────┐ ┌────────┴────────┐
│ MASTER AGENT │ │ DEVELOPMENT │ │ ACCEPTANCE │
│ │ │ AGENT │ │ AGENT │
├─────────────────┤ ├──────────────────┤ ├─────────────────┤
│ 定时监督 │ │ 开发 │ │ 查错 │
│ 记录进度 │ │ 测试 │ │ 查漏 │
│ 记录事件 │ │ Debug │ │ 查偏 │
│ 记录踩坑 │ │ 修复 │ │ 查越界 │
│ 维护状态 │ │ 推进阶段 │ │ 阶段验收 │
│ 异常恢复 │ │ │ │ 最终验收 │
└────────┬────────┘ └────────┬─────────┘ └────────┬────────┘
│ │ │
└────────────────────┼─────────────────────┘
状态 / 事件持续更新
┌───────────┴───────────┐
│ │
正常推进 出现问题
│ │
▼ ▼
下一轮 Loop 修复 / 恢复 / 重规划
│ │
└───────────┬───────────┘
是否达到 Goal?
│ │
否 是
│ │
└──继续 ▼
最终完成

长时间自主运行靠的是一个能转起来的闭环:Master 看全局,Development 持续干活,Acceptance 持续挑错;Paseo Loop 保证循环推进,Hook 保证关键检查自动执行,Shared State 保证任务不会失忆,Pitfalls 让每一次踩坑变成下一次任务的经验。

这是长任务的架构层。调度层——Paseo 怎么跑 /paseo-loop,以及 handoff、advisor、committee 怎么用——在 我怎么使用 Paseo

如何让 Agent 持续自主执行一段较长的任务
https://fuwari.vercel.app/posts/multi-agent-quality-loop/
作者
Hachi
发布于
2026-08-27
许可协议
CC BY-NC-SA 4.0
我怎么使用 Paseo