news 2026/9/30 10:50:51

使用 Browser-Use 作为 Subagent:在编排器中以「黑盒」方式委托完整网页任务

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用 Browser-Use 作为 Subagent:在编排器中以「黑盒」方式委托完整网页任务
  • 人工智能
  • AI Agent
  • 浏览器控制
  • GUI 自动化
  • MCP 服务

【免费下载链接】browser-use

Agents that use the browser.

项目地址:https://gitcode.com/GitHub_Trending/br/browser-use
点击查看免费下载

把完整的网页任务(搜索、填表、数据抽取、登录、点击)整体委托给 browser-use,是构建「编排器 + 浏览器代理」架构时最直接的一种集成模式:任务进去、结果出来,browser-use 自主完成全部浏览行为,编排器全程不触碰浏览器。这篇指南以 skills/cloud/references/guides/subagent.md 为骨架,结合当前仓库的 Cloud SDK、CLI、MCP 服务与测试源码,完整讲解该模式的适用场景、五种主流集成方式(CLI、Python SDK、TypeScript SDK、MCP、HTTP REST)以及结构化输出、错误处理、成本控制与资源清理等横向工程问题。读完你将能够在 LangChain、CrewAI、Vercel AI SDK、Claude Desktop、n8n 等任意编排宿主中把 browser-use 接成可复用的「网页能力即服务」。

何时使用 Subagent 模式

你的系统里有一个编排器(orchestrator)——某个 Agent、流水线或工作流引擎,负责协调多种能力。当它判断「我需要网页上的数据」或「我需要与某个网站交互」时,把任务委托给 browser-use,由后者自主完成导航、点击、抽取并返回结果。编排器不直接操作浏览器,也看不到中间过程。

适合使用 subagent 模式的情况:

  • 你想要一个黑盒:任务进去 → 结果出来;
  • 网页任务自包含(搜索、抽取、填表),不需要对每一步动作进行干预;
  • 你不需要 action-by-action 的细粒度控制。

应改用 tools integration(工具集成)的情况:

  • 你的 Agent 需要独立做出单个浏览器决策(先点这个、再检查那个);
  • 你希望 Agent 自己的推理循环来驱动浏览器,而非整体移交。

两种模式的分界线非常清晰:subagent 模式把「怎么浏览」交给 browser-use,工具集成模式把「怎么浏览」留给你自己的 Agent。仓库中的 skills/cloud/SKILL.md 也将这两种集成分别列为独立指南(references/guides/subagent.md与references/guides/tools-integration.md),二者是互补关系而非替代关系。

选择你的集成方式

先根据你的 Agent 形态选定最合适的接入路径,这是本指南的核心决策表:

你的 Agent 类型推荐方案
沙箱/VM 中的 CLI 编码 Agent(Claude Code、Codex、OpenCode、Cline、Windsurf、Cursor bg、Hermes、OpenClaw)CLI 云透传(Shell 命令)
Python 框架(LangChain、CrewAI、AutoGen、PydanticAI 或自研)Python Agent 封装(Cloud SDK)
TypeScript/JS(Vercel AI SDK、LangChain.js 或自研)Cloud SDK
MCP 客户端(Claude Desktop、启用 MCP 的 Cursor)MCP browser_task 工具
工作流引擎(n8n、Make、Zapier、Temporal)或任意 HTTP 客户端Cloud REST API

选择依据很简单:有终端就选 CLI,是 Python 框架就选 Python SDK,是 TS 生态就选 TS SDK,是 MCP 客户端就选 MCP,其余一切走 REST。Cloud 版本统一使用X-Browser-Use-API-Key请求头认证(见 skills/cloud/SKILL.md),本地开源版本则无需 API Key。

Shell Command Agents(CLI)

适用对象:拥有终端访问权限的沙箱/VM 中的编码 Agent。

CLI 方案让 Agent 通过命令行把完整任务委托给云端执行,无需任何 Python 导入。文档给出的四步标准流程如下:

# 1. 设置 API Key(一次性) browser-use cloud login $BROWSER_USE_API_KEY # 2. 提交一个任务 browser-use cloud v2 POST /tasks '{"task": "Find the top HN post and return title and URL"}' # 返回: {"id": "<task-id>", "sessionId": "<session-id>"} # 3. 轮询直到完成(阻塞) browser-use cloud v2 poll <task-id> # 4. 获取结果 browser-use cloud v2 GET /tasks/<task-id> # 返回完整的 TaskView:output、steps、outputFiles

其中BROWSER_USE_API_KEY应作为环境变量注入(保持服务端持有,绝不要写进提示词或客户端代码)。Cloud API 的基址与认证约定为:v2https://api.browser-use.com/api/v2/、v3https://api.browser-use.com/api/v3、v4https://api.browser-use.com/api/v4,请求头统一为X-Browser-Use-API-Key: <key>(见 skills/cloud/SKILL.md)。

需要结构化输出时,直接传 JSON Schema:

browser-use cloud v2 POST /tasks '{ "task": "Find the CEO of OpenAI", "structuredOutput": "{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\"},\"company\":{\"type\":\"string\"}},\"required\":[\"name\",\"company\"]}" }'

补充说明(仓库现状):当前仓库的 CLI(browser_use/cli.py)采用「stdin 管道 Python」模型——把 Python 代码通过 heredoc 管道输入执行,浏览器常驻后台 daemon。CLI 3.0 已移除旧的open/state/click/eval/--json/--headed/--profile等子命令;旧cloud子命令的迁移提示是「用browser-use auth login认证,再start_remote_daemon("<name>")启动命名云浏览器」(见 browser_use/cli.py)。若你的集成目标是最新 CLI 形态,应以仓库 SKILL.md 的「CLI 管道 Python」用法为准。

Python Agents(Cloud SDK)

适用对象:LangChain、CrewAI、AutoGen、PydanticAI、Semantic Kernel 或自研 Python Agent。使用 Cloud SDK,无需本地浏览器。

from browser_use_sdk import AsyncBrowserUse from pydantic import BaseModel client = AsyncBrowserUse() # 简单用法 async def browse(task: str) -> str: result = await client.run(task) return result.output # 结构化输出 class SearchResult(BaseModel): title: str url: str async def browse_structured(task: str) -> SearchResult: result = await client.run(task, output_schema=SearchResult) return result.output # 返回 SearchResult 实例

多步骤任务可通过keep_alive复用同一个云会话(session),从而保留登录态与页面上下文:

session = await client.sessions.create(proxy_country_code="us") await client.run("Log into site", session_id=str(session.id), keep_alive=True) result = await client.run("Extract data", session_id=str(session.id)) await client.sessions.stop(str(session.id))

proxy_country_code="us"指定住宅代理出口国家(默认即美国住宅代理,默认开启防指纹、验证码处理、广告/Cookie 拦截与 Cloudflare 绕过等 stealth 能力,见 skills/cloud/references/features.md)。

关于 SDK 版本,skills/cloud/SKILL.md 给出了清晰对照:

  • Python v2:from browser_use_sdk import AsyncBrowserUse
  • Python v3:from browser_use_sdk.v3 import AsyncBrowserUse
  • Python v4:from browser_use_sdk.v4 import BrowserUse或AsyncBrowserUse

安装:uv pip install browser-use-sdk。若你的集成是新项目,推荐直接使用 v4 的runs资源(一个 run 即一次 Agent 回合,session 是被多次 run 共享的会话,workspace 是可跨会话复用的持久化文件系统),参考 skills/cloud/references/api-v4.md:

from browser_use_sdk.v4 import BrowserUse with BrowserUse() as client: created = client.runs.create( "Open https://example.com and return its title", max_cost_usd=1.00 ) run = client.runs.wait_for_completion(created.id) if run.status.value != "completed": raise RuntimeError(f"Run {run.id}: {run.status}") print(run.result)

TypeScript/JS Agents

适用对象:Vercel AI SDK、LangChain.js 或自研 TypeScript Agent。

import { BrowserUse } from "browser-use-sdk"; import { z } from "zod"; const client = new BrowserUse(); // 简单用法 async function browse(task: string): Promise<string> { const result = await client.run(task); return result.output; } // 结构化输出(用 Zod schema 定义) const SearchResult = z.object({ title: z.string(), url: z.string(), }); async function browseStructured(task: string) { const result = await client.run(task, { schema: SearchResult }); return result.output; // { title: string, url: string } }

多步骤 + 会话复用的写法(对应 Python 的keep_alive,TS 侧为keepAlive):

const session = await client.sessions.create({ proxyCountryCode: "us" }); await client.run("Log into site", { sessionId: session.id, keepAlive: true }); const result = await client.run("Extract data", { sessionId: session.id }); await client.sessions.stop(session.id);

TypeScript 的 v2/v3/v4 导入路径分别为browser-use-sdk、browser-use-sdk/v3、browser-use-sdk/v4(见 skills/cloud/SKILL.md),v4 示例见 skills/cloud/references/api-v4.md:

import { BrowserUse } from "browser-use-sdk/v4"; const client = new BrowserUse(); const created = await client.runs.create({ task: "Open https://example.com and return its title", maxCostUsd: 1.00, }); const run = await client.runs.waitForCompletion(created.id); if (run.status !== "completed") { throw new Error(`Run ${run.id}: ${run.status}`); } console.log(run.result);

MCP-Native Agents

适用对象:Claude Desktop、启用 MCP 的 Cursor,以及任何通过协议发现工具的 MCP 客户端。MCP 方案分云端与本地两种。

云端 MCP(整体任务委托)

在 MCP 配置中加入 browser-use 服务器:

{ "mcpServers": { "browser-use": { "url": "https://api.browser-use.com/mcp", "headers": { "X-Browser-Use-API-Key": "YOUR_KEY" } } } }

配置完成后,Agent 会获得一个browser_task工具:传入一段任务描述,即可拿到结果。根据 skills/cloud/references/features.md 中的 MCP 工具清单,云端 MCP 还提供execute_skill($0.02 执行技能)、list_skills(免费)、get_cookies(免费)、list_browser_profiles(免费)、monitor_task(免费检查任务进度)等工具,browser_task的计费为 $0.01 + 每步费用。

本地 MCP(开源、免费)

本地启动 MCP 服务器后,Agent 会获得retry_with_browser_use_agent工具,它把整个任务委托给本地 Agent 执行:

uvx --from 'browser-use[cli]' browser-use --mcp

该工具在当前仓库中的实现位于 browser_use/mcp/server.py:它的描述明确写着「仅在多次与页面交互失败后作为最后手段使用」,输入参数包括:

  • task(string,必填):高层目标 + 详细的分步描述,以及完成所需的数据与之前尝试的信息;
  • max_steps(integer,默认 100):Agent 最大步数;
  • model(string,可选):使用的 LLM 模型(如gpt-4o、claude-3-opus-20240229),默认取配置中的模型;
  • allowed_domains(array,可选):允许访问的域名白名单(安全特性),省略时使用服务器配置的默认 profile;空列表与省略等价,不会关闭服务端配置的域名限制;
  • use_vision(boolean,默认 true):是否启用视觉能力。

其执行逻辑(browser_use/mcp/server.py)会先解析 LLM 配置(支持 Bedrock 与 OpenAI 兼容通道),再合并 profile 配置创建BrowserProfile,最终构造Agent并运行agent.run(max_steps=max_steps),返回包含步数、成功标志与最终结果的摘要。从源码结构看,这个工具适合「主 Agent 兜底失败后把整个任务降级交给自研 Agent」的场景。

另外,CLI 中--mcp标志会直接调度到 MCP 的 stdio 服务(browser_use/cli.py),而--cli-mcp则启动 CLI 专用 MCP 服务(browser_use/mcp/cli_mcp.py),后者把 CLI 3.0 的浏览器助手以 MCP 工具形式暴露给客户端。

HTTP / Workflow Engines

适用对象:n8n、Make、Zapier、Temporal、Serverless 函数以及任意 HTTP 客户端。此方案只依赖 REST API,语言无关。

创建任务 → 轮询 → 获取结果

# 1. 创建任务 curl -X POST https://api.browser-use.com/api/v2/tasks \ -H "X-Browser-Use-API-Key: $BROWSER_USE_API_KEY" \ -H "Content-Type: application/json" \ -d '{"task": "Find the top HN post and return title+URL"}' # → {"id": "task-uuid", "sessionId": "session-uuid"} # 2. 轮询状态(轻量接口) curl https://api.browser-use.com/api/v2/tasks/<task-id>/status \ -H "X-Browser-Use-API-Key: $BROWSER_USE_API_KEY" # → {"status": "finished"} # 3. 获取结果 curl https://api.browser-use.com/api/v2/tasks/<task-id> \ -H "X-Browser-Use-API-Key: $BROWSER_USE_API_KEY" # → 完整 TaskView:output、steps、outputFiles

建议的轮询节奏是先打轻量的/status接口,仅在状态变为completed/failed/cancelled后再拉取完整结果,避免反复轮询大对象(v4 的 SDK wait 辅助方法即采用此策略,见 skills/cloud/references/api-v4.md)。v4 的 REST 流程与之对应:

curl -X POST https://api.browser-use.com/api/v4/runs \ -H "X-Browser-Use-API-Key: $BROWSER_USE_API_KEY" \ -H "Content-Type: application/json" \ -d '{"task":"Find the top Hacker News story"}'

事件驱动型工作流可改用Webhook(详见 skills/cloud/references/features.md):任务状态变化时云端会推送agent.task.status_update事件(status 为 started/finished/stopped),负载中包含task_id、session_id与status;webhook 使用 HMAC-SHA256 签名(请求头X-Browser-Use-Signature与X-Browser-Use-Timestamp),验签需对{timestamp}.{body}(body 为按键排序、无多余空白的 JSON)计算 HMAC,并拒绝超过 5 分钟的旧请求以防重放攻击。这样可以让 n8n / Temporal 的工作流完全事件驱动,省去轮询。

横向工程要点(Cross-Cutting Concerns)

结构化输出

三种接入方式的统一约定:

  • Cloud SDK Python:output_schema=MyPydanticModel→result.output(类型化对象)
  • Cloud SDK TypeScript:{ schema: ZodSchema }→result.output(类型化对象)
  • Cloud REST:请求体传"structuredOutput": "<json-schema-string>"→ 响应中的output字段

注意 REST 的structuredOutput是字符串化的 JSON Schema,需要先JSON.stringify(...)再放入请求体(如本指南 CLI 一节所示)。

错误处理

from browser_use_sdk import AsyncBrowserUse, BrowserUseError try: result = await client.run(task, max_cost_usd=0.10) except TimeoutError: pass # 轮询超时(默认 5 分钟) except BrowserUseError as e: pass # API 错误

需要特别留意的两个边界(见 skills/cloud/references/api-v4.md):

  • 轮询超时 ≠ 任务取消:本地轮询超时不会取消远端 run;若决定放弃,应显式调用client.runs.cancel;
  • 不要盲目重试模糊的创建请求:对结果不确定的 create 请求直接重试可能启动多份付费任务;
  • 轮询只打 status 轻量接口,SDK 的 wait 辅助方法正是「status 轮询 + 最后拉取一次完整 run」。

成本控制

  • Cloud v2:按步骤计费,用max_steps限制最大步数;
  • Cloud v3/v4:max_cost_usd=0.10直接封顶花费,事后可通过result.total_cost_usd核对实际支出。

v4 还支持maxCostUsd(TS 侧同名参数),示例见上文 v4 代码块。此外,会话与浏览器计费的边界也要注意:SDK 3.11.3+ 的 v4 命名空间暴露了browsers.create/browsers.stop,关闭 CDP 客户端并不会停止云浏览器及其计费,必须显式停止浏览器(参见 skills/cloud/references/api-v4.md 与 skills/cloud/SKILL.md)。

资源清理

任务结束务必停止会话,用try/finally保证异常路径也完成清理:

session = await client.sessions.create(proxy_country_code="us") try: result = await client.run(task, session_id=str(session.id)) finally: await client.sessions.stop(str(session.id))

同样的原则适用于 v4 的浏览器资源(client.browsers.stop(browser.id)应放入finally块)与 CLI 的远程 daemon(stop_remote_daemon(name),远程浏览器在停止或超时前持续计费)。对于多步骤交互场景,skills/cloud/references/features.md 还展示了keep_alive=True与liveUrl的组合用法——Agent 在敏感步骤(如支付页)暂停,由真人通过liveUrl接管鼠标键盘,随后 Agent 继续完成任务,这是 subagent 模式在高风险流程中的实用变体。

  • 人工智能
  • AI Agent
  • 浏览器控制
  • GUI 自动化
  • MCP 服务

【免费下载链接】browser-use

Agents that use the browser.

项目地址:https://gitcode.com/GitHub_Trending/br/browser-use
点击查看免费下载

相关推荐

上一篇:Slim 项目依赖压缩库 klauspost/compress 的安全策略解析:漏洞定义、内存防护选项与私有披露流程
下一篇:【亲测免费】 探索NModbus:工业级通讯库的强大工具

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/30 10:49:04

8511张YOLO格式DMS疲劳驾驶数据集:从拆包到YOLOv8训练全流程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/30 10:47:14

Nginx性能优化全链路诊断与治理手册

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/30 10:45:15

新媒体多平台批量发布流程详解

一、流程概述当下新媒体运营已全面进入矩阵化时代&#xff0c;个人自媒体、小型运营团队及中小品牌企业&#xff0c;均会布局公众号、视频号、抖音、小红书、知乎等多渠道平台。多平台同步运营&#xff0c;能够打破单一流量局限&#xff0c;拓宽内容传播边界&#xff0c;精准触…

作者头像 李华
网站建设 2026/9/30 10:44:31

MiniCPM5 2B 开源 这次 2B 真挤进了 4B 赛道

仓库修复比单题编程麻烦得多。模型要读 issue 和报错日志&#xff0c;在目录里找到相关文件&#xff0c;理解函数之间的调用关系&#xff0c;写完补丁还要跑测试。任何一步偏离目标&#xff0c;后面的操作都会跟着出错。MiniCPM5-2B 在 SWE-bench Verified 上修复了 46.4% 的测…

作者头像 李华
网站建设 2026/9/30 10:43:41

昇腾910B上部署DeepSeek V3-R1:MindIE并行调参与显存优化实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/30 10:42:04

基于 Mosquitto 与 paho-mqtt 的 MQTT 客户端封装

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华