AutoResearch / Agent Engineering

把长任务 Agent 写成可运行协议

读 AutoResearch 最有启发的地方,不是“AI 能不能自己做研究”这个标题,而是它把长任务 Agent 的工程纪律讲透了:状态落盘、反停滞、守护进程、外部验证,以及把 Skill 从提示词升级成协议。

技术博客 长任务 Agent Skill 协议化 2026-06
01 / The Real Thesis

这篇文章真正说的,是 Agent 如何跨过“单轮聪明”

大多数关于自主研究 Agent 的讨论,容易落到一个很诱人的叙事:模型越来越强,所以研究可以自动化。但 AutoResearch 给人的启发恰好相反:模型能力只是地基,真正决定长任务能否跑完的,是模型之外的协议。

所谓协议,不只是“你是一个严谨的研究员”这种角色提示词,而是完整的运行制度:任务怎么定义,状态存在哪里,下一步依据什么决策,卡住多久算停滞,谁来检查引用,哪些分数可以被推翻,运行中断后如何恢复。

这也是它对工程团队最有价值的地方。我们不必急着相信“AI 可以全自动做研究”,但可以非常务实地学习它的结构:当一个 Agent 要连续工作几十小时、跨多个方向探索、不断产生中间结论时,必须把工作从对话上下文里搬出来,变成文件系统里可审计、可恢复、可验证的工作流。

长任务 Agent 的核心不是更长的上下文,而是更可靠的外部记忆和更诚实的验证门。

02 / Failure Modes

长任务 Agent 最常死在三种地方

AutoResearch 框架页把长任务失败归纳为几类问题:认知循环、停滞、运行脆弱。换成工程语言,它们分别对应“策略层没有退出条件”“执行层没有下一步驱动”“运行层没有持久化状态”。

Loop

认知循环

Agent 不断重述同一个方向,换几种说法继续做相同搜索。看起来一直在工作,实际上没有扩大证据集,也没有改变假设。

Stall

停滞等待

Agent 做完一小段之后进入“等人类确认”的姿态,或者因为一个工具失败就停在原地。长任务因此被切碎成无数人工救援。

Fragility

运行脆弱

上下文一断、窗口一关、进程一重启,任务就失忆。前面哪些路试过、哪些结论被证伪,全靠聊天记录续命。

这三个问题不是研究任务独有的。写代码、整理知识库、做竞品分析、批量审查文档、跟进 issue,都会遇到。只要任务无法在一次回复里完成,Agent 就会从“回答问题”进入“管理过程”。而过程管理不能靠模型自觉,必须靠外部结构约束。

03 / Skill As Protocol

Skill 不应该只是提示词,而应该是状态机

AutoResearch 最值得借鉴的设计,是把 SKILL.md 看成一种运行协议。它不是把一堆最佳实践塞进提示词,而是规定 Agent 在不同状态下该读什么文件、写什么文件、触发什么检查、什么时候进入恢复路径。

任务规格 task_spec.md 执行循环 plan → act → record 证据记录 findings.jsonl 验证门 review / audit 进度状态 progress.json 尝试方向 directions_tried.json 失败、降分、换方向都会回写状态

这就是“Skill 协议化”的本质:把隐含在优秀操作者脑子里的工作习惯,转成 Agent 必须遵守的状态机。一个好 Skill 至少要回答四个问题:

目标是什么,边界在哪里?

任务规格必须写清可交付物、非目标、资源约束、允许使用的工具和验收标准。

状态存在哪里,如何恢复?

不要让 Agent 依赖对话上下文记忆进度。每轮行动后更新进度文件,重启后先读状态。

什么算真实进展?

进展不能只等于“产生更多文字”。需要新增证据、证伪假设、通过测试、减少未知数。

卡住后怎么换方向?

协议需要定义停滞阈值、重复方向检测和替代策略,而不是让 Agent 一直“继续深入”。

04 / Persistent State

状态落盘,是长任务 Agent 的第一性原理

一旦任务跨过单次对话,文件系统就应该成为事实源。聊天窗口适合协调,文件适合承载状态。AutoResearch 的文件思路可以抽象成四类:

文件 职责 为什么重要
task_spec.md 任务定义、约束、评价标准、交付格式。 防止目标漂移。重启、换模型、换 Agent 后仍然知道“为什么做这件事”。
progress.json 当前阶段、已完成动作、下一步候选、最近阻塞。 让任务可以恢复,也让外部守护进程判断是否停滞。
findings.jsonl 每条发现一行,包含证据、来源、置信度、影响。 把“灵感”变成可审计记录,便于后续引用核查和汇总。
directions_tried.json 已经尝试过的研究方向、失败原因、是否可重开。 降低重复探索,帮助 Agent 在停滞后真正换路。

注意这里的关键不是文件名,而是职责分离。任务规格是“意图”,进度是“当前位置”,发现是“证据”,尝试方向是“负知识”。很多 Agent 系统只记录成功发现,不记录失败路径,于是下一个 Agent 会重新踩一遍同样的坑。

research-run/
├── task_spec.md              # 任务目标、边界、验收标准
├── progress.json             # 当前阶段、下一步、阻塞状态
├── findings.jsonl            # 证据日志:一行一条发现
├── directions_tried.json     # 已尝试方向和失败原因
├── artifacts/                # 中间产物、图表、草稿
└── reviews/
    ├── citation_audit.md     # 引用核查
    ├── reproduction.md       # 可复现性检查
    └── external_review.md    # 独立审阅意见
05 / Verification Loop

真正可靠的自动化,必须允许自己被证据打脸

AutoResearch 复盘里很有意思的一点,是系统不会永远维护漂亮的上升曲线。引用核查、外部审阅或复现实验发现问题后,原本的结论和评分可以被拉低。这一点比“分数越来越高”的宣传更重要。

对 Agent 工程来说,验证不是最后写一句“已完成”,而是一个独立权力中心。执行者负责推进,验证者负责找茬,状态文件负责记录验证结果。只有当验证结果能反过来改变计划、降低置信度、甚至推翻结论时,验证才是真的。

设计原则

不要只记录“Agent 认为自己完成了什么”,还要记录“哪些外部证据支持它完成了”。一个没有证据门的长任务 Agent,只是一个更会写总结的长输出模型。

可以迁移到任何 Agent 工作流的三层验证

自检:最低成本,但权重最低

让同一个 Agent 检查格式、遗漏项、明显矛盾。适合扫低级错误,不适合作为最终可信依据。

独立复核:换上下文,换判断者

让另一个 Agent 或另一个会话只看产物和证据,不继承执行过程中的自我辩护。

外部验证:让世界说话

代码跑测试,数据跑复现,引用查原文,事实查来源。能被外部系统判定的,就不要交给语言模型裁判。

06 / Multi-Agent Boundary

多 Agent 不是答案,任务形状才是答案

读这类文章很容易得出一个过度简化的结论:既然一个 Agent 会卡住,那就派很多 Agent。实际上,多 Agent 只是并行化和视角隔离的工具,不是质量保证本身。

如果任务可以拆成相互独立的搜索、实验、文件修改,多 Agent 很有价值;如果任务需要维护一条长推理链、持续整合上下文、反复打磨同一个理论,单 Agent 的深度串行反而可能更稳定。关键不是数量,而是角色之间是否有明确的信息边界和交付契约。

任务形状 适合结构 原因
多来源资料搜集、竞品横向对比、批量审查 多 Agent 并行探索 各方向之间耦合低,可以独立产出证据包,再由主 Agent 汇总。
理论推导、架构决策、长文主线打磨 单 Agent 深度串行 + 独立复核 主线一致性比速度更重要,复核者负责挑战而不是共同写作。
高风险发布、代码大改、数据结论 执行 Agent + 验证 Agent + 外部工具 语言模型之间互评仍然不够,必须接入测试、构建、引用核查或人工审阅。
07 / Applied Playbook

如果把它迁移到自己的 Skill 仓库,可以这样落地

对一个维护 skill、sub-agent、commands 和文档的知识库来说,最直接的启发是:不要只写“怎么做”,还要写“做的过程中如何保留状态、如何验证、如何恢复”。下面是一个可迁移的最小模板。

一个长任务 Skill 的最小协议

  • Purpose:一句话说明这个 Skill 解决哪类长期任务,明确不解决什么。
  • Workspace Contract:规定运行目录、状态文件、产物目录、日志格式。
  • Progress Rules:每完成一步必须更新哪些字段,哪些字段由验证者更新。
  • Stall Rules:连续几轮没有新增证据算停滞,停滞后必须换方向还是请求人类输入。
  • Verification Gates:最终交付前必须通过哪些检查,哪些检查可以自动化,哪些需要人工确认。
  • Recovery:如果上下文中断,下一个 Agent 先读哪些文件,如何判断从哪里继续。

这类协议化 Skill 的价值,不是让 Agent 更听话,而是让团队有能力审计 Agent 的过程。一个人类 reviewer 不需要翻完整聊天记录,只要看 task_spec.mdprogress.jsonfindings.jsonlreviews/,就能知道任务有没有真实推进。

反停滞循环可以写得非常机械

while task.status != "complete":
    state = read("progress.json")
    evidence_before = count_new_evidence()

    next_action = choose_action(
        task_spec="task_spec.md",
        tried="directions_tried.json",
        findings="findings.jsonl"
    )

    run(next_action)
    write_progress()
    write_findings()

    evidence_after = count_new_evidence()
    if evidence_after == evidence_before:
        state.stall_count += 1
    else:
        state.stall_count = 0

    if state.stall_count >= 3:
        mark_current_direction_as_stale()
        choose_different_direction_or_escalate()

这里的“机械”是优点。长任务里最危险的不是 Agent 不会想,而是它太会解释自己为什么还在同一条路上继续想。协议要做的事,就是在某些地方剥夺它继续自我合理化的自由。

08 / Limits

值得学,但不能神化

AutoResearch 这类框架最容易被误读成“全自动科学家”。更稳妥的理解是:它展示了一套长任务 Agent harness 的形状,但不自动保证结论等同于外部同行评审。

模拟评审不等于真实同行评审

模型可以扮演 reviewer,但它仍然共享语言模型的盲区。关键结论仍需外部专家、实验或真实用户验证。

引用核查只能降低风险,不能消灭幻觉

如果资料源本身不可靠,或者 Agent 没有访问到一手材料,核查流程也可能只是更精致地复述错误。

长时间运行会放大成本和偏差

72 小时级别的运行不是“免费思考”。token 成本、工具失败、方向偏移和验证负担都会成倍放大。

所以,最健康的态度是:把它当成工程模式库,而不是能力承诺。我们可以吸收它的状态管理、反停滞机制和验证闭环,同时继续对产出的事实性保持怀疑。

09 / Closing

最后的启发:Agent 的下一层竞争,是过程质量

当模型能力越来越接近,真正区分 Agent 系统的,会是模型外面的工程环境:任务能否被清楚表达,状态能否恢复,验证能否独立,失败能否留下负知识,团队能否复用一套可靠协议。

这也是 AutoResearch 对所有 Agent 工程最朴素的提醒:不要把复杂工作塞进一个更长的 prompt。把它拆成协议、状态、证据和验证门。这样 Agent 才不是在聊天窗口里表演努力,而是在一个可审计的系统里推进工作。

Sources

参考资料

  1. AIHot 条目:AutoResearch 相关分享
  2. AutoResearch Framework
  3. Self-play research story and run notes