Deep Agents 集成浏览器工具 支持会话持久化与登录交接

原标题:Browser Use in Managed Deep Agents
68AI 研判分

Managed Deep Agents 平台现已内置浏览器运行环境,使智能体能够执行点击、滚动和表单填写等 API 无法覆盖的网页操作。该更新引入了针对上下文效率优化的浏览器工具,并支持线程和用户级别的会话隔离,允许用户通过“交接”机制在多个会话间安全地保持登录状态。

报道正文

本文目录10 个章节

Deep AgentsAgent ArchitectureDeployment

托管型 Deep Agents 中的浏览器使用

核心要点

  • 浏览器使智能体能够执行 API 无法覆盖的 Web 任务,包括点击、滚动和填写表单。
  • 托管型 Deep Agents 现在为你的智能体运行一个浏览器,并配备了针对上下文高效浏览器使用而优化的工具。
  • 托管型 Deep Agents 支持线程级和用户级的浏览器会话。通过交接(Handoffs)功能,用户可以使用跨会话持久化的凭据登录并与网站进行交互。

.w-richtext figure{margin 0 !important}.w-richtext figure img{display;width%;border-radius}.w-richtext figure figcaption{margin-top}.w-richtext div[data-rt-embed-type](video){margin 0;border-radius;overflow}.w-richtext h2{margin-top}.w-richtext h3{margin-top}.w-richtext h4{margin-top}.w-richtext code{font-family,SFMono-Regular,Menlo,Consolas,monospace !important;font-size:.82em !important;font-weight !important;color:#030710 !important;background:#fff !important;border solid #D5E1EC;border-radius;padding:.1em .38em !important;white-space}.w-richtext img[src*="Screenshot_2026-10-27_at_11.17.50"]{aspect-ratio/1042;object-fit;object-position}

智能体的能力已经足够强大,可以在我们工作的环境中发挥作用,而其中大量工作是在浏览器中完成的。预订旅行、取消订阅或提交理赔申请,都发生在为人类点击浏览页面而构建的网站上,其中包括智能体原本并未计划访问的页面。通常,智能体没有可调用的 API。使用 curl 获取页面也收效甚微,因为它返回的是 JavaScript 渲染页面之前的 HTML,并且无法执行任何点击操作。

像 Instinct 和 Meta 的 Muse 这样的个人智能体已经以这种方式运作。浏览器智能体的流量也在快速增长,DataDome 的数据显示,仅 9 月份,智能体浏览器请求量就激增了 4.7 倍。

Managed Deep Agents 允许你在 LangSmith 中构建和部署 Agent,而无需自行运行任何基础设施。你只需编写 Agent 的指令和工具,LangSmith 便会负责运行执行框架(harness)和运行时环境。今天,我们为这些 Agent 配备了浏览器功能,让你能够构建可在 Web 上工作的自定义 Agent。Managed Deep Agents 同样负责运行浏览器,并为你的 Agent 提供经过调优的专用工具。

在本文中,我们将介绍浏览器功能的适用场景以及如何启用它,包括当 Agent 需要人工介入时将浏览器控制权移交给用户的方法。随后,我们将深入探讨其底层工作原理。使用开源 Deep Agents 构建的 Agent 也可以 使用浏览器。我们将在下周的深度解析文章中详细介绍我们如何测试和调优这些浏览器工具。

浏览器的适用场景

配备浏览器及驱动工具后,Agent 可以像人类一样读取页面上渲染的内容并进行点击操作。

目前主要涌现出两类常见用例:

  • API 无法覆盖的操作,例如预订机票或餐厅座位。如果网站提供了用于该任务的 API,Agent 应优先使用 API。
  • 端到端测试,例如在合并前检查前端变更。当 Pull Request 修改了注册表单时,编码 Agent 可以在其沙箱环境中启动应用,在浏览器中打开表单并点击操作,以验证变更是否生效。我们在 Open SWE(我们的编码 Agent)中就使用了这一方法。

添加浏览器使用能力

要 添加浏览器,请在 项目根目录 下的 browser.py 文件中导出一个 browser 对象:

PYTHON
# browser.py
from managed_deepagents import define_browser

browser = define_browser(
    scope="thread",
    idle_ttl_seconds=600,
)

scope 参数用于控制浏览器会话的共享方式。

  • scope="thread"(默认值)为每个线程分配独立的浏览器。每次对话都从一个全新的浏览器窗口开始,不会残留其他线程的 Cookie 或登录状态。
  • scope="user" 在已登录用户的多个线程之间共享一个浏览器(参见 Identity)。每个线程拥有自己的窗口,因此同时进行的两个对话不会互相干扰点击操作,但它们会共享 Cookie 和其他浏览器状态。如果你在一个线程中登录了某个网站,后续的线程可以继承该会话,而无需重新登录。

浏览器在闲置超过 idle_ttl_seconds 后会自动停止(默认为 10 分钟),从而避免为无人使用的浏览器支付费用。

将浏览器控制权移交给用户

某些步骤仍然需要人工介入,其中最常见的就是登录操作。你不想把密码直接交给 Agent,因为这会导致密码出现在模型的消息记录、追踪日志以及模型提供商那里。

因此,当 Agent 遇到登录页面时,它会调用 browser_handoff 并附带原因说明,例如“请登录 Acme Travel,以便我继续执行任务”。在 LangSmith Studio(用于与 Agent 交互和调试的用户界面)中,你会收到一个包含相同浏览器的交互式卡片。你自己完成登录,点击 Hand back(交还控制权),Agent 便会从上次中断的地方继续运行,此时它已经处于登录状态。移交功能随所有托管浏览器提供,并在 Managed Deep Agents channels(如 Slack)中自动生效,无需额外配置。

LangSmith Studio 显示 Agent 需要在浏览器卡片中由用户介入,包含嵌入式浏览器和 Hand back 按钮。

这在 scope="user" 模式下尤为重要。使用用户作用域时,登录状态会延续到你后续的线程中,因此 Agent 只需请求你登录一次,就像你自己的浏览器记住你的登录状态一样。

Deep Agent 将浏览器移交给用户进行登录。左侧显示 Agent 调用 browser_run,遇到 Acme Travel 的登录页面,然后调用 browser_handoff。右侧显示标有“You”的第二光标输入邮箱和掩码密码,点击 Sign in,然后点击 Hand back,从而恢复 Agent 的运行。Agent 随后调用 browser_snapshot 和 browser_run,打开里斯本行程。

底层工作原理

Agent 使用 Web 需要两样东西:一个浏览器,以及一套驱动它的工具集。Managed Deep Agents 对这两者都进行了管理。

浏览器。 Managed Deep Agents 在独立的 LangSmith 沙箱中运行浏览器,与 Agent 分离。这是一个远程浏览器,因此没有任何内容在你的本地机器上运行。与大多数远程浏览器不同,它还与 Agent 的沙箱建立了私有链接,这正是端到端测试得以实现的关键(详见下文)。

工具。 Managed Deep Agents 为 Agent 添加了浏览器工具:

  • browser_snapshot 读取页面的无障碍树,并为交互元素分配 ID 标签。
  • browser_run 对页面执行操作,既可以通过批量动作(如 click 和 fill),也可以通过 JavaScript 代码使用 Playwright 风格的 page 对象来实现,Stagehand 会将这些代码转换为自身的命令。
  • browser_screenshot 捕获渲染后的页面截图。
  • browser_handoff 将浏览器控制权移交给人类用户,待其完成后交还(见上文)。

browser_run 承担了大部分工作。由于它接收代码作为输入,Agent 可以将一系列步骤(打开页面、填写字段、点击、检查结果)编写为一次调用,并仅返回所需信息。这使得长时间的浏览器任务保持高效,同时也避免了将大部分页面内容放入 Agent 的上下文中。

这些工具基于 Stagehand 构建,这是 Browserbase 推出的用于构建浏览器 Agent 的开源 SDK。我们利用Agent 开发生命周期对其进行了测试和调优:运行浏览器基准测试,在 LangSmith 中查看追踪记录,并通过评估验证每一项更改。在来自 WebVoyager(一个针对实时网站日常任务的基准测试)的 100 个任务中,它们以总计 $1.98 的成本通过了 90% 的任务。这是我们测试的七种工具集中最高的通过率。最接近的是 Browserbase 的 MCP 服务器,其通过率为 89%,但成本高出 9 倍。

一个深度智能体预订餐桌。左侧,智能体调用 snapshot,将页面上的交互元素标记为 e3、e5、e7 和 e9,然后进行一次包含四个操作的 run 调用。右侧,光标填写用餐人数,选择晚上 7,输入姓名 Sydney,并点击 Reserve,页面确认预订成功。

这种设置以略有不同的方式支持这两种用例。

API 无法覆盖的操作

对于预订餐桌这类任务,智能体只需要浏览器。其浏览器工具向浏览器沙箱发送命令,由沙箱驱动页面操作。

一个深度智能体使用其浏览器工具(snapshot、run 和 screenshot)向浏览器沙箱中的 Stagehand 扩展发送命令。Stagehand 通过 CDP 控制浏览器,此处是在餐厅预订页面上。

端到端测试

端到端测试还需要另一个组件。被测应用运行在智能体自己的沙箱中,因此浏览器必须能够访问它。两个连接使这成为可能:

  • 智能体通过其浏览器工具控制浏览器,如上所述。
  • 浏览器通过 localhost 桥接访问应用。当浏览器打开 localhost:5173 时,请求通过私有链接传输到智能体沙箱中的 5173 端口。应用不需要公共 URL。在这里,localhost 指的是智能体的沙箱。

智能体使用 execute 启动应用,在浏览器中打开它,像用户一样点击注册表单等真实流程,并检查渲染结果。

一旦测试通过,你可以要求智能体将其步骤保存为测试文件,因为每个 browser_run 调用都是普通 Playwright 脚本的一部分。后续运行会重放该文件,直到页面发生变化前无需模型调用。

一个深度智能体使用 execute 在其智能体沙箱中启动应用,该应用在 5173 端口监听,并使用其浏览器工具通过 Stagehand 驱动位于独立浏览器沙箱中的浏览器。浏览器打开 localhost/signup,localhost 桥接将该请求通过私有链接路由到智能体沙箱中的 5173 端口。

结论

浏览器为智能体打开了 Web 的巨大部分,从预订航班到测试编码智能体刚刚构建的应用。借助 Managed Deep Agents,为你的智能体配备浏览器只需几行代码,而其背后的工具经过调优,以实现快速且上下文高效的目标。

通过 define_browser 为托管智能体添加浏览器。若要为开源深度智能体(deep agent)添加浏览器,且使用自带浏览器(例如来自 Browserbase 的托管浏览器),请参阅 browser use guide。

致谢

感谢 Browserbase 团队的 Sean McGuire、Miguel Gonzalez 和 Kyle Jeong,感谢他们在 Stagehand 及本文撰写过程中提供的帮助。