
1. 从“看网页”到“点按钮”Gemini 2.5 Computer Use 到底在解决什么问题Gemini 2.5 Computer Use 是 Google 在 2025 年 10 月发布的浏览器交互模型它最核心的能力是不依赖结构化 API直接“看”屏幕截图然后输出点击、输入、滚动这类操作指令。换句话说它把网页当成一张图来理解再像人一样去操作。适合谁做 UI 自动化测试的、需要从无 API 网站抓数据的、以及想搭浏览器 Agent 的开发者。传统方案要么依赖 DOM 选择器页面一改就崩要么依赖 OCR 规则复杂布局直接歇菜。Gemini 2.5 Computer Use 走的是另一条路原生多模态 MoE 稀疏激活把“视觉理解”和“动作决策”塞进同一个模型里。我实测下来它在 WebVoyager 这类基准上能到 88.9%比 OpenAI CUA 的 87.0% 略高但真正有意思的是它的架构设计——为什么 MoE 和多模态融合能让浏览器交互变得可行。这篇文章不堆概念我会从架构分层、MoE 路由、多模态输入融合三条线拆开讲然后给你可复制的配置片段和验证步骤。你跟着做能自己跑通一次“截图进、动作出”的完整链路。先明确一个认知Computer Use 不是“浏览器插件”它是一个模型能力。你通过 API 把截图和指令发过去它返回一个函数调用比如 click(x500, y300)你的客户端代码去执行。所以架构上分两层模型侧负责“看和想”客户端侧负责“做和反馈”。模型侧的核心是 Gemini 2.5 Pro 的 MoE Transformer。MoE 的关键在于“稀疏激活”——每次推理只调用一部分专家网络而不是全部参数。这让模型容量可以做得很大但计算成本可控。对于浏览器交互这种需要同时理解视觉细节和文本语义的任务MoE 让不同专家可以分别擅长“按钮识别”“文本提取”“布局推理”路由网络根据当前截图和指令动态选择。多模态融合则是另一条主线。Gemini 2.5 从底层就是多模态训练的文本、图像、视频、音频都转成 token 表示在同一个表示空间里做注意力。这意味着模型不需要“先 OCR 再理解”而是直接在图 patch 和文本 token 之间建立关联。比如你问“点击登录按钮”模型能直接把“登录”这个词和截图里那个蓝色矩形区域对齐。这两条线合起来就是 Computer Use 的决策链路截图 → 视觉 token → MoE 路由 → 多模态注意力 → 动作 token → 函数调用。下面我按这个顺序拆。2. 接入前的准备TaoToken 环境与 Key 获取在拆架构之前你得先有个能跑通的环境。Computer Use 模型本身通过 Gemini API 暴露但国内直接调 Google 端点经常遇到网络和配额问题。我用的方案是走 TaoToken 的兼容端点它把 Gemini 系列模型统一成 OpenAI 风格的接口省去自己处理鉴权和重试的麻烦。TaoToken 官网入口https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentAPI 基础地址注意这个不加 UTMhttps://taotoken.net/api你需要先拿到一个 API Key。登录后进控制台在 API Keys 页面创建一个。建议给这个 Key 起个名字比如 “computer-use-test”方便后面排查。创建后复制保存页面刷新后就不再显示完整 Key 了。拿到 Key 之后你还需要确认模型 ID。Computer Use 对应的模型名通常是gemini-2.5-computer-use或类似变体具体以你控制台里模型列表为准。如果你用的是 Claude Code 或 Cline 这类工具做 Agent 开发可以把 Base URL 设成https://taotoken.net/apiKey 填你刚创建的Model ID 填 Computer Use 对应的名称。这里有个坑Computer Use 的请求体不是普通的 chat completion它需要传截图base64 或 URL和操作历史。所以你不能直接用 OpenAI SDK 的chat.completions.create得用支持多模态消息的格式。TaoToken 的接口兼容 OpenAI 的messages数组其中content可以是[{type: text}, {type: image_url}]这种结构。如果你只是想做模型对话验证可以先用模型对话页面测试 Key 是否有效https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite但要做 Computer Use建议直接写代码。下面我给一个最小可跑的 Python 示例用requests直接发请求不依赖额外 SDK。3. 可复制配置MoE 路由与多模态输入的代码映射这一节是核心。我会给你三段可复制的配置/代码第一段是请求体的 JSON 结构第二段是 Python 调用示例第三段是客户端执行动作的伪代码。你按顺序拼起来就能跑。先看请求体的 JSON 结构。Computer Use 的输入包含三部分系统指令、当前截图、操作历史。系统指令里可以定义安全规则和可用动作集。截图用 base64 编码放在image_url里。操作历史是一个数组记录之前每一步的 action 和结果。{ model: gemini-2.5-computer-use, messages: [ { role: system, content: You are a browser automation agent. Available actions: click, type, scroll, navigate, wait. Always output a function call. }, { role: user, content: [ { type: text, text: Task: 在搜索框输入 Gemini 2.5 并点击搜索按钮。当前截图如下。 }, { type: image_url, image_url: { url: data:image/png;base64,iVBORw0KGgoAAAANSUhEUg... } } ] } ], tools: [ { type: function, function: { name: click, parameters: { type: object, properties: { x: {type: integer, description: 0-1000 normalized x}, y: {type: integer, description: 0-1000 normalized y} } } } }, { type: function, function: { name: type, parameters: { type: object, properties: { text: {type: string} } } } } ], tool_choice: auto }注意坐标是 0-1000 的归一化网格不是像素值。这是 Computer Use 的一个关键设计不管你的屏幕分辨率是多少模型都输出归一化坐标客户端再按实际视口换算。这样模型不需要知道你的屏幕尺寸泛化性更好。Python 调用示例import base64 import requests API_KEY 你的 TaoToken Key BASE_URL https://taotoken.net/api/v1/chat/completions def encode_image(path): with open(path, rb) as f: return base64.b64encode(f.read()).decode() def call_computer_use(screenshot_path, task): img_b64 encode_image(screenshot_path) payload { model: gemini-2.5-computer-use, messages: [ {role: system, content: You are a browser automation agent.}, {role: user, content: [ {type: text, text: task}, {type: image_url, image_url: {url: fdata:image/png;base64,{img_b64}}} ]} ], tools: [ {type: function, function: {name: click, parameters: {type: object, properties: {x: {type: integer}, y: {type: integer}}}}}, {type: function, function: {name: type, parameters: {type: object, properties: {text: {type: string}}}}} ], tool_choice: auto } headers {Authorization: fBearer {API_KEY}, Content-Type: application/json} resp requests.post(BASE_URL, jsonpayload, headersheaders, timeout60) return resp.json() result call_computer_use(screenshot.png, 点击登录按钮) print(result)返回结果里你会看到choices[0].message.tool_calls里面包含函数名和参数。比如{ tool_calls: [ { function: { name: click, arguments: {\x\: 500, \y\: 320} } } ] }客户端执行动作的伪代码def execute_action(tool_call, viewport_width, viewport_height): name tool_call[function][name] args json.loads(tool_call[function][arguments]) if name click: px int(args[x] / 1000 * viewport_width) py int(args[y] / 1000 * viewport_height) pyautogui.click(px, py) elif name type: pyautogui.write(args[text]) return done这三段拼起来就是一个完整的“截图 → 模型 → 动作 → 执行”闭环。MoE 路由和多模态融合发生在模型内部你不需要手动干预但理解它们能帮你调参和排障。比如如果你发现模型总是点偏可能是截图分辨率太低视觉 token 不够。Gemini 2.5 Computer Use 支持最大 7MB 的图像输入建议截图宽度不低于 1280px。如果任务复杂可以在系统指令里加“先观察再行动”的提示让模型多走一步推理。4. 验证请求从截图到动作输出的完整链路配置写好了怎么确认真的跑通了我分三步验证先验证 Key 和端点连通再验证多模态输入被正确解析最后验证动作输出符合预期。第一步用最简单的文本请求确认端点可用。把 model 换成gemini-2.5-pro发一个纯文本消息看是否返回正常。如果这一步就报 401说明 Key 有问题如果报 model not found说明模型 ID 写错了。第二步发一张纯色截图任务写“描述这张图”。如果模型返回“这是一张白色图片”说明多模态输入链路通了。这一步能排除 base64 编码错误和 image_url 格式问题。第三步发一张真实网页截图任务写“点击搜索框”。看返回的 tool_calls 里 click 坐标是否落在搜索框附近。你可以把坐标换算成像素在截图上画个点验证。如果偏得离谱检查截图是否被压缩过或者归一化坐标是否被正确解析。我实测下来Gemini 2.5 Computer Use 在 1280×720 的截图上点击准确率很高。但如果页面有大量动态内容比如轮播图模型可能会犹豫。这时候可以在系统指令里加“等待页面稳定后再操作”或者客户端先做一次wait动作。还有一个验证点操作历史。Computer Use 是循环交互的每一步的输出会作为下一步的输入。你需要在 messages 里追加 assistant 的 tool_call 和 tool 的执行结果。格式如下{ role: assistant, content: null, tool_calls: [{id: call_1, function: {name: click, arguments: {\x\:500,\y\:320}}}] }, { role: tool, tool_call_id: call_1, content: clicked at (640, 360) }如果你不追加历史模型每步都是“失忆”的会重复点击同一个地方。这是新手最容易踩的坑。5. 常见报错排查401、local proxy failed、reading choices、OAuth这一节我列几个真实遇到的报错和排查路径。你对照自己的日志看。401 Unauthorized最常见。先检查Authorization头是不是Bearer开头Key 有没有多余空格。如果 Key 是从控制台复制的注意不要复制到换行符。另外TaoToken 的 Key 有权限范围确认你创建的 Key 有调用 Computer Use 模型的权限。local proxy failed / connection refused这个通常出现在你本地起了代理但没配好。检查你的HTTP_PROXY/HTTPS_PROXY环境变量如果不需要代理就清掉。TaoToken 的端点在国内可直连不需要额外代理。如果你在代码里硬编码了代理地址删掉。reading choices 报错 / KeyError choices说明返回体不是标准的 OpenAI 格式。先打印resp.text看原始返回。常见原因是模型 ID 写错返回了错误信息而不是 choices 数组。另一个原因是请求体里messages格式不对比如 image_url 的 url 不是 data URI 格式。OAuth 相关报错如果你用的是 Google 官方 SDK 而不是 TaoToken 兼容端点可能会遇到 OAuth token 过期。TaoToken 用的是 API Key 鉴权不存在这个问题。如果你在 Claude Code 或 Cline 里配置注意 Base URL 要填https://taotoken.net/api不要填 Google 的地址。坐标偏移不是报错但很常见。检查你的视口尺寸和截图尺寸是否一致。如果截图是 1920×1080 但视口是 1280×720坐标换算就会错。建议截图前先设置固定视口。动作不执行模型返回了 tool_calls但你的客户端没执行。检查tool_choice是否设为auto以及你的函数注册名是否和模型输出的一致。大小写敏感。如果你在 Claude Code 里做 Agent 开发配置三件套是Base URL https://taotoken.net/apiKey 你的 TaoToken KeyModel ID gemini-2.5-computer-use。Cline 的 MCP 配置类似在 settings 里填这三项。Codex 的 auth.json 里对应api_base和api_key字段。6. 长期跑浏览器 Agent这些资源帮你省时间如果你只是验证一次上面的代码够了。但如果你要长期跑浏览器自动化任务比如每天抓数据、跑 UI 回归测试建议做两件事一是把动作执行封装成可重试的函数二是用 Coding Plan 管理多个 Agent 会话。TaoToken 的 Coding Plan 适合长期编码和 Agent 场景它提供更稳定的配额和会话管理。入口https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteAPI Keys 管理页面https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteClaude Code 相关配置参考https://taotoken.net/claude-code?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite最后说一个实用技巧Computer Use 的“最小行动集”算法会尽量复用已有信息。比如填表单时如果模型发现某个字段已经填过它会跳过而不是重新输入。你可以在系统指令里加“优先复用已有输入”来强化这个行为。另外安全方面高风险操作购买、下载一定要加用户确认环节别让 Agent 自己决定。