LaiDub

播客

Anthropic 工作坊:构建可连续运行数小时的 Agent — Ash Prabaker & Andrew Wilson
1:15:40
EN/ZH
点开看双语
AI Engineer24 天前

Anthropic 工作坊:构建可连续运行数小时的 Agent — Ash Prabaker & Andrew Wilson

Anthropic Applied AI 团队的两位工程师 Ash Prabaker 和 Andrew Wilson 拆解了让编码 Agent 持续高效工作五小时以上的真正门道:一年间模型与 harness 共同演进,把运行时长从 20 分钟推到 12 小时以上;他们一次性生成完整应用的内部 harness 配方包括,写"刻意模糊"规格的 planner、把"完成"谈判成可测试契约的 generator 与对抗式 evaluator、让设计品味变得可打分的评分准则,以及一个基本靠人工逐行读 trace 的调试循环。最后 35 分钟的现场问答覆盖 Ralph loop、agent teams、可追溯性和人工介入的取舍。 ## [00:00] 开场与讲者介绍 Ash Prabaker 开场自我介绍:他和 Andrew Wilson 都是 Anthropic Applied AI 团队的工程师,这场分享源自团队几周前发布的一篇博客,主题是让 Agent 持续工作很长时间。他指出,各家公司都爱秀"一把梭生成浏览器"式的演示,却很少公开 harness 里的细节,这个空白正是今天的议题。Andrew 负责讲历史和已发布的原语,Ash 之后回来讲实验性的那一半。 > *我们说的是 5、6 个小时以上的运行。* ## [01:21] 长时运行 Agent 概览 Andrew 是常驻伦敦的解决方案架构师。他用 Claude Code 创造者 Boris 在产品一周年时的一段话给这一年定调:一年前 Claude 连写 bash 命令、转义字符串都很吃力;如今 Claude Code 几乎全部由 Claude Code 自己编写,一次能跑上好几天。 > *它一次大概只能跑 20 分钟。* ## [02:29] 三大挑战:上下文、规划与判断力 长时运行难在三个方面。上下文:窗口有限,新会话像失忆一样从零开始,窗口越满连贯性越差,接近上限时模型还会出现"上下文焦虑",慌慌张张赶工收尾。规划:模型想一口气做完所有事,常常做到一半就停,或者上下文耗尽留下半成品。判断力最反直觉:模型很不擅长评判自己的产出,会把半生不熟的功能宣布完工,或者做了个按钮但后端根本不存在。 > *模型非常不擅长评判自己的产出* ## [04:14] 两条路线:模型升级 vs. harness 演进 解法来自两个方向。其一是把能力炼进模型权重,METER 曲线(衡量 Agent 在极简脚手架上完成 50% 任务能跑多久)从 Opus 3.7 的约 1 小时涨到一年后 Opus 4.6 的 12 小时。其二是改 harness:Agent SDK 提供了全部核心原语,包括 agent 循环、MCP 工具、sub-agent 委派、claude.md、skills、斜杠命令和权限系统。Andrew 反复强调的观察是:每次发模型,都同时发了一大批 harness 改动。 > *我们每次发布模型时,总会同时发布大量与之配套的 harness 改动* ## [05:58] 史前时代:Sonnet 3.5、Computer Use 与 MCP 在 Claude Code 出现之前,Claude.ai 上有 artifacts,而 Sonnet 3.5 是第一个真正展现编码潜力的模型,它能看到自己写出的东西并在此基础上迭代。Computer use 让它学会点击、截图、自测代码,MCP 规范则给了它使用工具的能力。 > *那是 Claude Code 诞生前的一个顿悟时刻。* ## [06:34] Claude Code 的演进 2025 年 2 月,Sonnet 3.7 登顶 SWE-bench,Claude Code 以研究预览版发布,目的写得很明白:更好地理解开发者如何用 Claude 写代码,反哺未来的模型改进。由此形成一条反复出现的规律:模型变强后,harness 的某些部件会变得不再必要,或者随之演化。到 5 月,Opus 4 和 Sonnet 4 已能更好地管理自身上下文、不靠投机取巧也能完成任务,Claude Code 正式 GA 并发布了 SDK。 > *Claude Code 的目标是更好地理解开发者如何用 Claude 写代码,以反哺未来的模型改进* ## [07:55] Ralph loop 技术 插播 Ralph Wiggum 技术:Jeffrey Huntley 去年 7 月就发表了它,12 月前后才真正走红。简化版的说法是把一个 prompt 喂给 CLI 循环跑,直到所有任务完成;真实版本分好几个阶段,先做规划把 prompt 拆成若干 feature,每次挑一个任务、开一个全新会话、用干净的上下文窗口去做。它的魅力浓缩在 Huntley 那句"在不确定的世界里做到确定性地差"。Anthropic 自己的插件版本则在单个会话内运行,靠压缩机制续命,配上最大迭代数、安全词和 stop hook。 > *可预测地失败,好过不可预测地成功* ## [09:49] Sonnet 4.5、Agent SDK 与检查点 Sonnet 4.5 开始追踪自己消耗了多少 token,对上下文有了感知,能从容管理窗口的尾声而不是慌乱赶工。Claude Code 2.0 引入检查点,可以回退到会话中之前的状态。Claude Code SDK 改名为 Agent SDK,因为团队意识到这套 harness 的用途远不止写代码。此时运行时长达到约 30 小时。 > *我们意识到它的通用性远远超出了写代码这一件事* ## [10:49] Opus 4.5 与 sub-agent 的角色 Haiku 4.5 和 Opus 4.5 补齐了模型家族,经济账随之改变:同时跑很多 sub-agent 变得划算,而 Opus 4.5 擅长规划,于是形成 Opus 负责规划、Sonnet 负责执行的分工。Skills 随之发布,靠渐进式披露省上下文,默认只加载 skill 的开头元信息;programmatic tool calling 则让模型现场写代码串联一连串工具调用,只把最终结果带回上下文。 > *一下子,同时运行许多 sub-agent 变得真正划算了* ## [12:05] 首个长时运行 Agent 模式 11 月前后,团队发表了第一篇长时运行 Agent 的博客。人类只写一句模糊需求,比如"做一个 Slack 克隆",initializer agent 把它拆成一组持久化产物:用 featurelist.json 存功能清单(模型更容易乱改 markdown,对 JSON 文件反而手下留情)、进度文件、git 仓库、初始化脚本。harness 循环随后在全新上下文窗口里运转:先认清环境,跑初始化脚本做冒烟测试,挑出恰好一个未完成的功能,实现它,用 Puppeteer 验证,提交 commit,再循环。 > *模型可能会改写 markdown 文件,但它们不太会去改写 JSON 文件* ## [14:20] Opus 4.6、Agent Teams 与服务端压缩 Sonnet 4.6 用 Sonnet 的价格给出接近 Opus 的智能,成为主力执行模型;Opus 4.6 则被称为"非常 agentic 的模型",METER 指标在极简脚手架上从约 4 小时跳到 12 小时。Agent teams 发布:sub-agent 之间可以直接互相协调,只在必要时才向主 agent 汇报。服务端压缩让会话实际上可以无限跑下去,1M 上下文窗口正式 GA,设计的天平开始偏向少开新会话、在一个大窗口里做更多事。Andrew 收尾的观点:模型变强,harness 并不会消失,而是先填补模型的短板,模型再针对这些用法训练,然后某些部件被整体删掉,循环往复。 > *harness 并不会随着模型变强而直接消失* ## [17:28] 最前沿的 harness 模式 Ash 上台先做了个现场调查,此刻有 Agent 在后台干活的只有两三个人。随后他抛出核心模式,毫不避讳地说灵感来自 GAN:一个 generator 负责构建,一个独立的 evaluator 负责打分,两者在彻底分离的上下文窗口、系统提示词和职责之间形成对抗压力。evaluator 不是读 diff,而是用 Playwright 打开真实页面点来点去,再把批评意见交还给 generator。既然 evaluator 也是 LLM,为什么不会照样盖章放行?他们利用的正是这道缝隙:把一个独立的批评者调得苛刻很容易做到,把一个构建者调得有自我批判精神却办不到,就像人类评价一幅画、一道菜很容易,自己画出来、做出来难得多。 > *这里的 evaluator 不只是读 diff,它实际上在用 Playwright 打开线上页面,到处点击、试用功能* ## [21:30] 用评分准则评估主观产出 大多数人说品味没法打分,这个团队不同意:只要你对好坏有足够强的主见,把它写下来就行。他们的评分准则有四项,设计、原创性、工艺和功能性,权重偏向前两项,因为 Opus 4.6 的功能性已经够强,真正要对抗的是紫色渐变和 AI 味审美。再用参考网站做 few-shot 示例,把 evaluator 的品味校准到自己的标准上。这套机制解锁了一种独特行为:generator 在原创性上反复拿低分时,GAN 式 harness 会把整个方案推倒重来,而单一循环或 Ralph loop 只会在原地缝缝补补。 > *大多数人说品味没法打分,但我们认为可以,只要你对它有足够强的主见,并且把它写下来* ## [23:44] 引入 'Planner' 角色 要从漂亮页面走向能用的应用,他们只加了一个角色。Planner 把一行 prompt 变成一份刻意保持高层级的规格,划分成一系列 sprint,并且刻意不规划细粒度的技术细节,因为细节出错会层层级联到每个 sprint,在数小时的时间跨度上不断放大。眯起眼看,这就是一套 PM、IC、QA 的组织结构。 > *我们只是给每个角色配了它自己的上下文窗口。* ## [25:04] generator 与 evaluator 之间的契约 这套体系真正的粘合剂在于:generator 动笔写第一行代码之前,两个 agent 要先谈判"完成"到底意味着什么。generator 提议"我做 X 功能,你用 Y 测试来验证",evaluator 反驳"范围太大、测试太弱、漏了某某边界情况",双方通过磁盘上的 markdown 文件你来我往,直到达成一致。之后的评分对照的是这份双方议定的契约,而不是 planner 开头一把梭写下的规格。Ash 称这是 Ralph loop 始终缺失的关键创新:从来没有人站在循环的对面跟它争论。证据是同一个"做一个复古游戏制作器"的 prompt 跑出的两种结果。无 harness 的版本界面光鲜,但进入试玩模式后方向键和空格键毫无反应;harness 版本花了约 200 美元、6 个小时,自己给应用起名 Retro Forge,做出 54 色调色板的精灵编辑器,把规格里一句含糊的"AI 功能"变成完整的 AI 关卡助手,试玩模式里调试 HUD 实时跳动、物理循环真实运转、碰撞检测正常,差距完全来自脚手架。 > *我们让这两个 agent 实实在在地谈判"完成"到底意味着什么* ## [31:28] 契约的颗粒度与 trace 调试 evaluator 抓到的问题都不花哨:一个 FastAPI 路由顺序 bug,单元测试全过但上了生产就崩;删除键上的一个布尔逻辑 bug,只有真正使用这个应用才会发现。游戏制作器那次,两个 agent 议定了 27 条契约标准,这种颗粒度才能让发现可执行;标准含糊,批评就含糊,generator 耸耸肩就糊弄过去了。Ash 也坦白,Claude 出厂时是个很糟糕的 QA agent,LLM 当裁判时的那种谄媚和宽容在这里照样发作,早期的 evaluator 发现 bug 后会写一句"以后再修,大概要两周"就接着往下走。没有什么秘诀能绕过去:构建这套系统的核心功夫就是读 trace,找出模型判断和人类判断分歧的地方,再去调提示词;一个实用技巧是把 agent 的记录导出到文件,让另一个 agent 去 grep 和复盘,连改提示词这件事本身也形成闭环。 > *标准含糊,批评就含糊* ## [34:14] 随模型演进调整 harness harness 设计是不是已经过时?Ash 的回答是:摸清每个模型各自的尖刺行为,再用 harness 去填缝。从 Opus 4.5 换到 4.6,他们彻底放弃了会话间的上下文重置,因为 4.6 没有上下文焦虑,单个连续会话加压缩就够了;放弃了强制的 sprint 拆解,4.6 能连贯地撑起 2 小时的连续构建,不需要一次只喂一个功能;evaluator 的运行频率也从每个 sprint 一次改成每轮一次性生成结束后一次。教训不是 harness 设计错了,而是它适配的是 4.5,前沿移动了。今天的形态保留了 planner、generator、evaluator 这个核心,用文件系统共享状态,成本约为之前的一半。新演示是 harness 构建的一个 DAW 音乐应用,Ash 承认它做出来的音乐很烂,但应用本身相当完整,放在一代模型之前根本不可能跑通。 > *它适配的是 4.5,前沿移动了* ## [37:56] 如何构建你自己的 Agent harness 这一切并不需要 Anthropic 的内部 harness。auto mode 提供了比一路放行权限更安全的折中;custom sub-agent 已经是现成原语,给你的 evaluator 一个苛刻的系统提示词和一份详尽的评分准则;网页应用用 Playwright MCP 或 Claude for Chrome,原生应用用 computer use;skills 则是把评分准则打包进日常开发流程的顺手方式。 > *没有什么能阻止你直接动手,自己搭一套类似的东西* ## [39:01] 长时运行 Agent 的关键要点 值得拍照的那页总结:自我评估是个陷阱,用对抗式 evaluator;压缩不等于连贯,有损摘要会漂移,结构化交接和干净上下文才是好模式;别以为主观质量不可打分,对好坏有主见就逼自己写下来;和模型坐在一起读 trace,只有这样才知道前沿移动时该删掉脚手架的哪些部分。 > *自我评估,十足是个陷阱* ## [40:05] 现场问答 11 位现场观众轮流提问,持续了 35 分钟。要点:evaluator 的调优经验在瞄准模型共性弱点时可以跨项目复用,用"这就是 AI 味"的示例来校准;关于 Ralph loop 和模型的"聪明区间",1M 上下文 GA 加上 4.6 的连贯性让团队转向单个连续会话加压缩,但还是要以你自己的评测为准;关于盯着 Agent 干活,Ash 认为想盯着看本质上是信任差距,如今模型自己就能读控制台报错、发现文字重叠;4.6 这一代模型在评分爬不上去时出奇地愿意把十轮成果整个扔掉重来,有一次 evaluator 干脆发火让 generator 全部删掉重写;planner 被刻意挡在内循环之外,靠定期把规格重新注入会话来保持方向;对于要活过这次运行的产品,harness 会留下面包屑,一份"试了什么、发现什么 bug、修复是否生效"的 learnings JSON 加一份高层文档,足够人类带着 Claude Code 接力;把 generator 的上下文喂给批评者这条路试过又放弃了,只评产出比搅浑两条思路流更有效;可追溯性至今主要靠人工逐行读 trace,Claude 扫一遍 trace 只能当第一道筛子;至于人工介入的 sprint 评审,hooks 可以注入一个,但团队的优化方向是完全自治:跑十代,读完七个失败案例,调 harness 提示词,再来。 > *你得把整个东西读完* ## 实体 - **Ash Prabaker**(人物):Anthropic Applied AI 团队工程师,主讲最前沿 harness 模式与问答环节。 - **Andrew Wilson**(人物):Anthropic Applied AI 团队解决方案架构师,常驻伦敦,主讲模型与 harness 演进史。 - **Anthropic**(组织):两位讲者所在的公司,出品 Claude 系列模型、Claude Code 和 Agent SDK。 - **Claude Code**(软件):Anthropic 的编码 Agent CLI,其一年演进史是本场分享的主线。 - **Agent SDK**(软件):由 Claude Code SDK 更名而来,提供 harness 构建所依赖的 agent 循环原语。 - **Generator-evaluator 模式**(概念):受 GAN 启发,把构建者与对抗式批评者拆分到独立上下文中,是这套 harness 的核心。 - **Ralph loop**(概念):Jeffrey Huntley 提出的循环执行 prompt 直到完成的技术,缺少对面争论方的前身方案。 - **Playwright MCP**(软件):evaluator 用来实测线上应用的浏览器自动化工具。

#long-running-agents#agent-harness#claude-code