跳到正文
实时
LangChain Blog·· 16 天前精选67

LangChain 为 Managed Deep Agents 加入浏览器能力

Browser Use in Managed Deep Agents

要点速览

LangChain 为 Managed Deep Agents 加入浏览器能力,开发者通过 define_browser 导出浏览器配置,即可让托管智能体读取页面渲染结果并点击操作。

Why it matters

原文给出浏览器工具的接入方式、handoff 机制与 WebVoyager 实测数据,可据此判断托管智能体如何覆盖无 API 的网页任务。

正文 · AI 翻译

译文尚不完整,完整内容请切换到原文。

代理已经足够好,可以在我们工作的环境中工作,而大量这样的工作都在浏览器中完成。预订旅行、取消订阅或提交索赔都在为人们浏览页面而构建的网站上完成,包括代理没有计划访问的页面。通常没有代理可以调用的 API。使用 curl 获取页面也行不通,因为它返回的是 JavaScript 渲染页面之前的 HTML,并且无法点击任何东西。

像 Instinct 这样的个人代理和 Meta 的 Muse 已经以这种方式工作。浏览器代理流量也在快速增长,DataDome 在 9 月份仅浏览器代理请求就增长了 4.7 倍。

Managed Deep Agents 允许您在 LangSmith 中构建和部署代理,而无需运行任何基础设施。您编写代理的指令和工具,LangSmith 运行 harness 和 runtime。今天,我们正在为这些代理提供一个浏览器,以便您可以在网络上构建自己的代理。Managed Deep Agents 也运行浏览器,并提供针对浏览器的工具。

在这篇文章中,我们将涵盖浏览器的作用以及如何启用它,包括在代理需要时将浏览器交给用户。然后我们将深入探讨其内部工作原理。使用开源 Deep Agents 构建的代理也可以 使用浏览器。下周我们将深入探讨我们如何测试和调整浏览器工具。

浏览器的作用

有了浏览器和驱动它的工具,代理可以读取页面渲染的内容并通过它进行点击,就像人类一样。

到目前为止,已经出现了两种常见的用例:

  • API 无法覆盖的操作,例如预订航班或餐厅预订。当网站为该任务提供 API 时,代理应使用 API。
  • 端到端测试,例如在合并前端更改之前进行检查。当拉取请求更改注册表单时,编码代理可以在其沙盒中启动应用程序,在浏览器中打开表单,并通过它进行点击以检查更改是否有效。我们在 Open SWE 中使用它,这是我们自己的编码代理。

添加浏览器使用功能

要 添加浏览器,从 browser.py 在 项目根目录 导出 browser:

# 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 分钟),因此您不必为无人使用的浏览器付费。

将浏览器交给用户

某些步骤仍然需要一个人,而登录是最常见的一个。您不希望将密码交给代理,这样它就会出现在模型的消息中、跟踪记录中以及模型提供者那里。

所以当代理访问登录页面时,它会调用 browser_handoff 并附带一个原因,例如 "请登录 Acme Travel 以便我继续操作。" 在 LangSmith Studio 中,这是你与代理聊天和调试的界面,你会得到一个与浏览器相同的交互式卡片。你自己登录,点击 Hand back,代理就会从它停止的地方继续,已经登录。Handoff 随附于每个托管浏览器,并在 Managed Deep Agents 通道 如 Slack 中自动工作,因此无需额外设置。

LangSmith Studio showing the agent needs you in the browser card, with an embedded browser and a Hand back button.

这在使用 scope="user" 时最为重要。使用用户范围,登录会延续到你的后续线程中,因此代理只需请求你登录一次,就像你自己的浏览器记住你一样。

A deep agent hands the browser to a person to sign in. On the left, the agent calls browser_run, hits Acme Travel's sign-in page, and calls browser_handoff. On the right, a second cursor labeled You types an email and a masked password, clicks Sign in, then Hand back, which resumes the agent. The agent calls browser_snapshot and browser_run, which opens the Lisbon trip.

底层工作原理

代理使用网络需要两个东西:一个浏览器和一个驱动它的工具集。托管深度代理管理这两者。

浏览器。 托管深度代理在其自己的 LangSmith 沙盒 中运行浏览器,与代理分离。这是一个远程浏览器,所以你的机器上不会运行任何东西。与大多数远程浏览器不同,它还通过一个私人链接连接到代理的沙盒,这就是端到端测试工作的原因(下面会详细说明)。

工具。 托管深度代理将 browser tools 添加到代理中:

  • browser_snapshot 读取页面的 accessibility tree 并使用 ID 标记交互式元素。
  • browser_run 对页面采取行动,可以使用一组操作如 click 和 fill,也可以使用使用 Playwright 风格的 page 对象的 JavaScript,Stagehand 将其转换为自己的命令。
  • browser_screenshot 捕获渲染后的页面。
  • browser_handoff 将浏览器传递给一个人,当他们完成时将其交回(见上文)。

browser_run 做了大部分工作。它使用代码,因此代理可以将一系列步骤(打开页面、填写字段、点击、检查结果)作为一个调用并只返回它需要的内容。这使长浏览器任务保持快速,并将大部分页面内容排除在代理的上下文之外。

The tools are built on Stagehand, Browserbase's open source SDK for building browser agents. We tested and tuned them with the agent development lifecycle: running browser benchmarks, reading the traces in LangSmith, and validating each change with evals. On 100 tasks from WebVoyager, a benchmark of everyday tasks on live websites, they passed 90% of tasks for $1.98 in total. That was the highest pass rate of the seven toolsets we tested. The closest, Browserbase's MCP server, passed 89% at 9x the cost.

A deep agent books a table. On the left, the agent calls snapshot, which labels the page's interactive elements e3, e5, e7, and e9, then one run call with four actions. On the right, a cursor fills in party size, picks 7:00 PM, types the name Sydney, and clicks Reserve, and the page confirms the booking.

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

API 无法覆盖的操作

对于预订预订等任务,代理只需要浏览器。它的浏览器工具将命令发送到浏览器沙盒,该沙盒驱动页面。

A deep agent uses its browser tools, snapshot, run, and screenshot, to send commands to the Stagehand extension in a browser sandbox. Stagehand drives the browser over CDP, here on a restaurant reservation page.

端到端测试

端到端测试需要一个额外的部分。要在测试的应用程序中运行,浏览器必须到达代理自己的沙盒。两个连接使这成为可能:

  • 代理通过其浏览器工具控制浏览器,如上所述。
  • 浏览器通过 localhost 桥接器到达应用程序。当浏览器打开 localhost:5173 时,请求通过私人链接传输到代理沙盒中的端口 5173。应用程序不需要公共 URL。在这里,localhost 表示代理的沙盒。

代理使用 execute 启动应用程序,在浏览器中打开它,点击真实流程(如注册表单),并检查渲染的内容。

一旦测试通过,您可以要求代理将其步骤保存为测试文件,因为每个 browser_run 调用都是普通 Playwright 脚本的一部分。稍后的运行在没有模型调用的情况下重放该文件,直到页面发生变化。

A deep agent uses execute to start an app in its agent sandbox, where it listens on port 5173, and uses its browser tools to drive the browser in a separate browser sandbox through Stagehand. The browser opens localhost:5173/signup, and a localhost bridge routes that request over a private link to port 5173 in the agent sandbox.

结论

浏览器为代理打开了大部分网络,从预订航班到测试代理刚刚编写的应用程序。使用托管深度代理,只需几行代码即可给您的代理添加浏览器,其背后的工具经过调整,以实现快速和上下文高效。

使用 define_browser 为托管代理添加浏览器。要为开源深度代理添加浏览器,您需要自带浏览器(例如来自 Browserbase 的托管浏览器),请参阅 浏览器使用指南。

致谢

感谢来自 Browserbase 的 Sean McGuire、Miguel Gonzalez 和 Kyle Jeong 对 Stagehand 和这篇文章的帮助。

来源: LangChain Blog · langchain.com