放弃封装,回归裸金属:Browser Use 给所有Agent开发者上的沉痛一课
前言最近两年 AI 浏览器代理彻底爆火。市面上绝大多数浏览器框架都在做一模一样的事情封装click/type/scroll操作手写 DOM 解析器、元素定位器层层抽象给大模型提供极简接口自己写一堆异常捕获、页面崩溃重试、超时处理人类过度封装、过度干预、过度抽象反而限制了大模型本身的能力。1. 我们曾经犯的错既封装大模型又封装工具1.1 第一层错给 LLM 套抽象壳很早之前 Browser Use 发过一篇文章不要给大模型过度包装框架。当时团队意识到不要用厚重的代码结构约束大模型要给它最大的行动空间。1.2 第二层错手动封装浏览器操作几乎所有自动化开发者都有这个通病觉得原生 CDP 太难、太繁琐、坑太多于是自己封装一层又一层工具。早年 Browser Use 同样如此手写几千行 DOM 解析器封装元素索引、页面判断、交互函数基于 Playwright 再套一层业务壳现在回头看全部是无用代码。每一个你手动写的 click、type、upload都是给大模型增加的枷锁。大模型经过海量训练本身就懂底层协议反而要适配人类写的劣质封装。2. 彻底推翻为什么要直接裸用 CDP这里说一句所有爬虫、自动化开发者都要记住的真话现在的大模型天生就懂 CDP。训练数据里塞满了Page.navigateDOM.querySelectorRuntime.evaluate它见过无数 Chrome 调试协议、无数浏览器报错、无数网页异常。而我们开发者非要自作聪明给它套一层 Playwright、套一层自己封装的工具。2.1 裸 CDP 带来的三大碾压级优势① 原生支持复杂页面跨域 iframe、Shadow DOM传统框架各种兼容报错。CDP 直连浏览器内核直接穿透层级不需要任何适配代码。② 天然反爬、无痕特征框架自动化特征太重而原生 CDP 是 Chrome 自身和自身通信。指纹、检测、风控通过率碾压所有封装框架。③ 粒度无限细可以直接下发鼠标物理坐标事件连 Azure 后台那种魔改嵌套页面都能精准操作。3. 最扎心反思我们为什么要替模型屏蔽错误以前 Browser Use 团队有一个非常典型的错误认知CDP 底层太复杂模型不需要懂我们帮它处理异常。于是他们写了大量看门狗服务标签页崩溃捕获渲染进程 OOM 处理GPU 进程异常重启目标解绑重连每一种异常手写一套处理逻辑。维护成本爆炸代码臃肿不堪。后来他们发现一个极其讽刺的事实大模型本来就懂这些报错。它看过几十万条 Chrome 崩溃日志、社区排错帖子。只要你把原始报错丢给它它自己就能重连、重试、修复上下文。人类写的异常处理远不如大模型原生判断聪明。4. 封神架构600 行代码吊打几万行框架抛弃所有冗余封装后Browser Harness 最终只剩下四个文件总代码不到 600 行。run.py13行极简执行入口预加载依赖helpers.py192行极薄 CDP 封装允许模型自行修改daemon.py220行维持 Websocket 长连接SKILL.md给模型的能力说明文档整个架构只有一条逻辑除了浏览器本身上层所有代码都允许大模型自己改。5. 真正的黑科技自修复 Harness模型自己补代码这是整篇文章最震撼我的地方。传统框架缺一个功能 → 开发者手动更新代码、发版本、部署。Browser Harness缺一个功能 →大模型自己写。5.1 真实案例自动补全上传函数团队忘记写文件上传方法。Agent 执行任务遇到上传按钮检测到helpers.py没有对应函数。它自己读取源码分析 CDP 原生上传指令手写一个upload_file()重新执行任务研发人员是看 Git Diff 才发现模型自己加了代码。5.2 智能超限处理自动分块上传模型写完上传函数后遇到 12MB 大文件。它检测到 CDP 单包大小限制自主改成分片上传逻辑。没有任何人提示、没有任何预设代码。6. 写在最后以前我做自动化、写爬虫、开发 Agent总想着我要把接口写死、流程写死、逻辑写死越严谨越好。看完这篇文章我彻底改观在大模型面前人类严谨的代码全是冗余束缚。最好的架构不是写更多代码。而是敢于删代码、敢于放权、敢于把底层原始能力赤裸裸交给 AI。如果你也在做 AI Agent、浏览器自动化、爬虫开发强烈建议记住这句话不要包装工具不要束缚模型。删代码回归裸金属才是未来。附加资源开源地址https://github.com/browser-use/browser-harness