我给 AI Agent 装了四个浏览器,然后账单爆炸了
我给 AI Agent 装了四个浏览器,然后账单爆炸了
上周三凌晨两点,我盯着一条日志发呆:
browser screenshot → 5,847 tokens
5847 个 token。我让 Agent 做的事情是什么?读一个定价表。
那个定价表是纯文字。三行 HTML,连图片都没有。
我往上翻了几百条日志,发现这不是个例。我的 Agent 每次"看"网页,都在截图。看标题?截图。看登录状态?截图。看按钮文字?还是截图。
一周下来,光截图烧掉的 token,比 Agent 真正"思考"用的还多。
这篇文章就是那天晚上之后的复盘:我是怎么把浏览器操作成本砍掉 80% 的——不是换模型,不是压缩图片,而是搞清楚一件事:
我到底有哪些工具,什么时候该用哪个。
问题出在哪?不是工具不好,是选择太乱
我的 Agent 有四种方式"看"网页:
- web_fetch — 不开浏览器,直接拿网页文字
- agent-browser — 独立的浏览器 CLI,能截图存文件
- browser-use — AI 自己操控浏览器,你告诉它目标就行
- browser(内置) — OpenClaw 自带的,能用已有的登录态
每个工具都很强。问题是:它们的能力有大量重叠。
读网页?四个都能。 截图?三个都能。 点击按钮?三个都能。
当 Agent 面对"帮我看看这个页面"这种指令时,它就像站在一个四叉路口——没人告诉它怎么选,它只能随便选一个。
而它选的往往是"最直观"的:截图。
截图听起来最通用嘛。"看"页面,当然要"看"图啊。
但这恰恰是最贵的选择。
核心洞察:按用途选,而不是按工具选
踩完坑之后,我发现问题的本质是:我一直在想"我有什么工具",而不是"我要干什么"。
当我把视角从"工具"转向"用途",一切就清晰了。
Agent 的网页操作,其实只有三类:
第一类:读内容
场景:读定价、看标题、抓文字、检查元素存不存在。
这类任务的特点是:不需要交互,只需要拿到页面内容。
最优选择:
- 静态页面 →
web_fetch(零成本,不开浏览器) - 需要 JS 渲染 →
agent-browser snapshot(零图片成本,返回文字 DOM)
绝对不要用截图。你只是想读文字,为什么要让模型"看"一张图?
第二类:自动化操作
场景:点按钮、填表单、登录、下载文件。
这类任务的特点是:需要交互,但步骤是确定的。
最优选择:
- 固定流程 →
agent-browser(脚本化,可复用) - 不确定流程、需要 AI 判断 →
browser-use run
如果你每天都要做同一套操作,写成脚本用 agent-browser 跑。让 AI"自主探索"去完成固定任务,是浪费算力。
第三类:特殊能力
有些场景只有特定工具能做:
- 录制视频演示 → 只有
agent-browser有record命令 - 模拟 iPhone → 只有
agent-browser有 iOS profile - 用代理 IP → 只有
browser-use支持--proxy-country - 用 OpenClaw 已有的登录态 → 只有内置
browser能做 - 用你自己 Chrome 的登录态(Gmail 等) → 内置
browser加profile="user"
这些没得选,需要什么能力就用什么工具。
决策路径:三步走
我把选择逻辑精简成了三步,Agent 每次浏览器操作前过一遍:
第一步:我需要交互吗?
不需要交互、只读内容 → web_fetch 或 agent-browser snapshot,到此结束。
需要交互 → 继续。
第二步:我需要什么特殊能力?
需要录视频 → agent-browser record
需要模拟手机 → agent-browser -p ios
需要代理 IP → browser-use --proxy-country
需要 AI 自主判断 → browser-use run "任务描述"
需要已有登录态 → browser(内置)
有特殊需求就用对应工具,没有 → 继续。
第三步:默认选择
固定流程 → agent-browser(脚本化、可复用、截图存文件)
一句话总结:
能不开浏览器就不开,能用文字就不用图片,重叠功能选最省,独占功能选最强。
截图这件事,值得单独说
截图是成本黑洞,必须搞清楚两种截图的区别:
agent-browser screenshot
agent-browser screenshot /tmp/shot.png
截图保存到文件。文件就是文件,不消耗 token。你可以把文件发给用户,或者存着以后用。
browser(内置)screenshot
browser screenshot # 通过内置 browser 工具
截图直接编码进对话,消耗 3000-6000 token。每截一张图,你的上下文就少一大块。
两者都能截图,但成本差了几千倍。
什么时候必须用内置 browser?
只有一种情况:你需要 OpenClaw 已经登录好的网站。比如你之前在 OpenClaw 里登录过某个后台,现在需要截那个后台的图——只有内置 browser 能访问那个登录态。
除此之外,所有截图都应该用 agent-browser。
三个真实踩坑
坑一:5847 token 的定价表
前面说的那个案例。我让 Agent 看一个 SaaS 的定价,它截了张图。
成本:5847 token ≈ $0.017(按 Claude 3.5 Sonnet 算)
正确做法:web_fetch → 487 token ≈ $0.0015
一次操作差了 10 倍。这还是单次。我那周让 Agent 读了几十个页面……
坑二:每天定时任务,每天"重新思考"
我有个任务:每天早上登录某个网站下载报告。
一开始我用 browser-use run "登录并下载报告"——听起来很优雅对吧?
问题是:这是 AI 自主模式。每次跑它都要"思考"怎么登录、点哪个按钮、文件在哪。同样的流程,每天都"重新探索"一遍。
后来改成 agent-browser 脚本:
agent-browser --state auth.json open https://app.example.com
agent-browser click "#download-btn"
agent-browser wait-download /tmp/report.csv
固定流程写成固定脚本。快了 3 倍,token 消耗减少 70%。
坑三:用户要截图,我截给模型看
有用户说:"帮我截个图看看效果"。
我让 Agent 用内置 browser 截图——结果图片进了对话,模型"看"了一遍。
但用户要的是看图,不是让模型看图。正确做法:
agent-browser screenshot /tmp/preview.png
# 然后把文件发给用户
图片存文件,直接发出去,模型根本不需要介入。
实施:写成 Skill 让 Agent 自动选
踩完这些坑,我写了一个 browser-routing skill。
它做的事情很简单:在 Agent 系统提示里加一段决策逻辑,让它每次浏览器操作前自动判断该用什么工具。
核心就是前面那三步决策路径。
效果:
- 截图调用量下降 80%+
- Agent 开始"先 fetch 试试,不行再开浏览器"
- 内置 browser screenshot 基本只在需要登录态时才出现
三条 Takeaway
-
web_fetch 是默认选择。绝大多数"看网页"的需求都是读文字,不需要开浏览器,更不需要截图。
-
区分两种截图。存文件的截图零成本,进对话的截图几千 token。这不是优化,这是量级差异。
-
按用途建决策框架。工具多不是问题,乱选才是。三步决策:要不要交互 → 要不要特殊能力 → 默认选最省的。
工具是死的,选择是活的。选对了,成本砍掉一个数量级。
这是我在 OpenClaw 上跑 Agent 的系列踩坑记录。如果你也在折腾 AI Agent,欢迎交流。
Want to work together?
I'm always happy to connect — whether it's a project, a question, or just to say hi.
Get in Touch →