Browserbase发布浏览器Agent技术演进路线
从像素点击到 Code Mode:Browserbase 对 Computer Use 三年演进路线的完整复盘 @browserbase 团队 @kylejeong @miguel_gonzf 联合...
Browserbase放弃预设工具思路,转向让模型直接写代码控制浏览器,这是对Agent设计的重大转变。
Browserbase团队与LangChain合作复盘了浏览器Agent的三代技术路线,从纯视觉识别到代码模式。OpenAI Operator代表的纯视觉方案在窗口变化时失效;视觉+文本混合方案长任务撑爆上下文窗口;最终代码模式成为终局方案,模型直接写代码控制浏览器。Stagehand v4做成Chrome扩展,性能比Playwright快2倍、省80% token。
从像素点击到 Code Mode:Browserbase 对 Computer Use 三年演进路线的完整复盘 @browserbase 团队 @kylejeong @miguel_gonzf 联合...
从像素点击到 Code Mode:Browserbase 对 Computer Use 三年演进路线的完整复盘 @browserbase 团队 @kylejeong @miguel_gonzf 联合 @LangChain 团队 @sydneyrunkle @huntlovell 一起复盘了浏览器 Agent 的三代技术路线,宣布放弃「给模型预设工具」的思路,全面转向「让模型直接写代码控制浏览器」,并给出行业判断:做好 Agent 是 Harness 问题,不是模型研究问题;最好的 Agent 本质上都是换了外衣的 Coding Agent。 # 三代技术路线的演进逻辑 1. 纯视觉 CUA(以 OpenAI Operator 为代表) 方案:视觉模型识别屏幕像素,返回坐标点击 问题:只在特定视口尺寸下训练,窗口一变「Agent 基本失明」;截图看不到不可见组件 2. 视觉 + 文本混合 方案:截图 + DOM/无障碍树快照 问题:基准测试有提升,但长任务迅速撑爆上下文窗口,精度达不到企业生产标准 3. 代码模式 方案:模型直接写代码表达操作意图 问题:团队认为无根本缺陷,成为终局方案 用 Sutton 的「bitter lesson」解释这一演进:每一代新模型出来,他们都发现之前精心设计的护栏式抽象反而成了瓶颈,于是不断做减法、缩小工具表面积。 # 最值得注意的三个工程洞见 1. 承认早期设计是错的。 旧版 Stagehand 提供 Act / Extract / Observe 三个严格工具,出发点是「模型不可信,需要护栏」。团队直言 "we were so wrong",代码是模型最有效的意图表达方式,模型甚至会写出设计者没想到的组合策略。专用工具输给通用接口。 2. 「Stagehand 不在模型权重里」。 接入 MCP 后 Agent 反而稳定失败,原因很朴素:所有前沿模型都在 Playwright 语法上做过后训练,没人见过 Stagehand。他们试过写教学 skill、强化 system prompt、加护栏,全部失败;后训练专用模型又违背用户「自带模型」的诉求。最终方案是彻底顺从模型:让模型写 Playwright 代码,在发送到浏览器前实时转译为更快的 Stagehand 方法。原则一句话:"让模型做它擅长的事,然后让开"。这是对「模型能力分布决定接口设计」的教科书式示范。 3. Demo 与生产的分界是安全边界。 域名白名单、网络层防护、沙箱化 runtime 加策略治理。比喻很直白:没有极好的刹车和防滚架,你不会把赛车开上公共道路。技术上 Stagehand v4 做成 Chrome 扩展,runtime 直接跑在浏览器内,run 工具天然不需要额外沙箱;性能宣称比 Playwright 快 2 倍、省 80% token。MCP server 只保留三个工具:run(执行代码)、snapshot(剪枝后的 DOM + 无障碍树)、screenshot(补充视觉上下文,覆盖 canvas、OS 层内容)。 # 生态卡位与行业判断 与 LangChain Deep Agents(模型无关的通用 Harness,提供上下文自动卸载、子 Agent 委派、规划等编码 Agent 原语)合作:Browserbase 做浏览器 SDK,LangChain 做通用 harness。这本质是一次开源生态的双向借力,文中也提到 Cloudflare 的 @threepointone 与 @KentonVarda 是代码模式思路的早期实践者。 Kyle Jeong @kylejeong x.com/i/article/2097… 🔗 View Quoted Tweet 💬 0 🔄 1 ❤️ 1 👀 219 📊 1 ⚡