- 无公共 API 的操作:预订餐厅预订、完成结账,或通过跨网站链接研究主题。
- 端到端测试:通过 UI 测试 Web 应用程序。Open SWE, LangChain 的开源编码智能体,在每个线程中获得浏览器,以便它可以打开它修改的应用程序并检查 UI 中的更改。
了解基础知识
智能体使用网络需要两个组件:使用本地或远程浏览器与 Stagehand
Stagehand 提供与本地 Chrome 和远程 Browserbase 会话一起工作的浏览器工具。无需更改智能体使用的工具即可选择浏览器运行的位置。Stagehand 通过一个持久浏览器暴露三个工具:
元素 ID 仅对活动页面的最新快照有效,因此智能体在导航后会拍摄新的快照。
:::python
使用 langchain-stagehand 的
StagehandMiddleware 添加这些工具。将配置好的 Stagehand 客户端传递给中间件,然后在 middleware 中包含它。不需要 MCP 服务器、自定义工具定义或浏览器系统提示。
:::
:::js
通过 JavaScript MCP 适配器使用 Stagehand 的 Python MCP 服务器。原生 langchain-stagehand 中间件仅限 Python。
:::
:::python
有关完整配置参考,请参阅 Stagehand 集成。
:::
其他浏览器工具
- Playwright MCP:来自微软的 MCP 服务器,它公开 Playwright 浏览器操作。通过 MCP 适配器连接,使用
npx @playwright/mcp@latest作为命令。请参阅 模型上下文协议。 - agent-browser:来自 Vercel Labs 的浏览器 CLI。在 沙盒 中安装它,智能体通过
execute工具运行命令,如agent-browser open和agent-browser snapshot。
使用 Stagehand 与 Browserbase
此示例为深度智能体提供 Stagehand 工具,这些工具驱动 Browserbase 浏览器。智能体在您的机器上运行。浏览器在 Browserbase 上运行。 :::python中间件在 langchain-browserbase#1 中提出,尚未发布到 PyPI。此示例从源代码安装该修订版本。它需要 Python 3.11 或更高版本、LangChain 1.4.7 或更高版本以及 Stagehand 4.3.0 或更高版本。
ainvoke 或 astream:浏览器工具是异步的。您的应用程序拥有浏览器并在完成时关闭它。跨运行保持其打开状态以重用选项卡和登录。中间件保持您的系统提示不变,并在工具描述中包含浏览器指南。
对于本地 Chrome、屏幕截图以及与 LangChain 的 create_agent 一起使用,请参阅 Stagehand 集成。
:::
:::js
Stagehand 的 MCP 服务器在其自己的 Python 环境中运行。此设置即使智能体是用 JavaScript 编写的,也需要 uv。
安装服务器和智能体包:
STAGEHAND_DIR 设置为 packages/integrations/deepagents 的绝对路径,然后创建智能体:
browser_run、browser_snapshot 和 browser_screenshot。如果您想使用未加前缀的名称 run、snapshot 和 screenshot,请设置 prefixToolNameWithServerName: false。更新系统提示以匹配您的工具名称。
服务器接收转发过来的 STAGEHAND_* 和 BROWSERBASE_* 变量,以及 MCP 客户端的安全默认值,如 PATH 和 HOME。您的模型 API 密钥保留在智能体进程中。
:::
选择浏览器范围
重用浏览器会保留 cookie 和网站登录,因此智能体不需要在每次回合时都登录。选择哪些对话共享该状态:- 线程范围:为每个对话保留一个浏览器。例如,使用测试帐户测试 Web 应用程序更改。在相同的对话中迭代时重用选项卡和登录。另一个对话获得一个没有这些 cookie 或登录的单独浏览器。共享线程中的参与者可以使用其登录的帐户。
- 用户范围:跨同一认证用户的对话重用浏览器登录状态。例如,一个人一次登录到预订网站,然后在新的线程中请求另一个预订。
StagehandMiddleware 不选择范围或管理会话存储。您的应用程序选择要提供的 Stagehand 客户端。在预期范围内重复使用该客户端进行顺序运行。为并发智能体提供单独的客户端和浏览器以避免导航冲突。
浏览器状态不是 LangGraph 检查点的一部分。关闭或替换浏览器可能会丢失登录状态,而网站可以独立地使它们失效。
:::
:::js
MCP 示例在整个打开的适配器生命周期内保持一个浏览器。您的应用程序拥有适配器重用和清理;LangGraph 线程 ID 单独无法在适配器关闭后保留浏览器。
:::
Managed Deep Agents 管理线程和用户范围,包括为用户范围提供具有共享登录状态的每个线程的单独窗口。
在 LangSmith 沙盒中使用 Chrome 测试应用程序
此示例涵盖端到端测试:编码智能体更改应用程序后,另一个智能体在浏览器中打开应用程序并检查更改。Open SWE 从 Managed Deep Agents 获取其浏览器。以下步骤使用 LangSmith 沙盒构建相同的检查。 LangSmith 沙盒 运行您的应用程序和 Chrome,因此浏览器可以在localhost 打开应用程序。智能体在您的机器上运行,并使用 LangSmithSandbox 后端进行文件系统访问和 execute 工具。
此示例使用通过 execute 的 agent-browser,而不是 MCP。每个 CLI 调用都在沙盒内重用命名的 qa 浏览器会话。您不需要 Browserbase 账户或机器上的 Docker 守护进程。
准备沙盒快照
快照 包含新沙盒的文件系统和依赖项。创建一个包含您的应用程序、其依赖项、Node.js 和 curl 的快照。在快照设置期间,安装 agent-browser 和 Chrome for Testing:QA_START_COMMAND 替换为您的应用程序的启动命令。示例期望它在沙盒内监听端口 3000。
创建 QA 智能体
代码启动应用程序,等待其响应,然后打开浏览器。智能体随后通过execute 与 UI 交互。在清理之前下载屏幕截图:删除沙盒会删除其文件。
:::python
安装主机端包:
ws 支持非阻塞应用程序启动:
backend.close() 删除包装的 JavaScript 沙盒,因此不需要额外的 client.deleteSandbox() 调用。
:::
示例使用 --no-sandbox 禁用 Chrome 的内部沙盒,用于 root-run 沙盒图像。可重复使用的 LangSmith 沙盒提供外部隔离边界。对于支持 Chrome 内部沙盒的图像,请省略该标志。
屏幕截图是下载到您的机器的工件,而不是自动显示给模型的图像。对于模型可见的图像,请参阅 多模态输入。使用独立的断言以获得确定性测试结果:智能体的报告及其指令不是安全边界。
安全的浏览器会话
在浏览器中运行的代码可以使用会话已登录的任何账户以及浏览器可以访问的任何网站。在您向智能体提供浏览器之前:- 对于 Stagehand,使用 Browserbase 作为不受信任任务的隔离边界。
run在浏览器中执行模型编写的 JavaScript。请参阅 Stagehand 的 安全边界。 - 对于 沙盒 QA 路径,LangSmith 沙盒是隔离边界。可重复使用的沙盒将 Chrome 和应用程序与您的机器隔离。
- 使用测试账户和测试支付方式进行结账和表单流程,并 要求批准 任何提交购买的行动。
- 将页面内容视为不受信任的输入。页面可以包含写入以重定向智能体的文本。
- 将凭据保留在您的应用程序环境中,而不是提示词或浏览器工具输入中。在使用 MCP 时,仅向服务器传递它需要的凭据。
参考文档
:::python- Stagehand 集成
- Browserbase 集成 :::
- Managed Deep Agents 中的浏览器使用
- 沙盒
- 人机交互
- 模型上下文协议 (MCP)
- Stagehand Deep Agents 文档
官方原文:src/oss/deepagents/browser-use.mdx · 非官方翻译,译文由 AI 生成,以英文原文为准。