news 2026/9/13 6:49:42

如何把 Vercel AI SDK 智能体接入 Stagehand 的持久化浏览器工具

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何把 Vercel AI SDK 智能体接入 Stagehand 的持久化浏览器工具

如何把 Vercel AI SDK 智能体接入 Stagehand 的持久化浏览器工具

【免费下载链接】stagehandThe SDK For Browser Agents项目地址: https://gitcode.com/GitHub_Trending/stag/stagehand

如果你的 Vercel AI SDK 智能体需要完成真实的网页操作(导航、点击、填表、读取页面),而不是只调用纯 API,可以把它的工具循环接入 Stagehand 的持久化浏览器:通过 MCP/stdio 连接到 Stagehand 的 facade MCP server,由这一个 server 进程持有浏览器,runsnapshotscreenshot三次调用之间页面状态保持不变。本文基于 Stagehand 仓库自带的 Vercel AI SDK 集成示例(packages/integrations/vercel-ai),给出从构建到运行、再到验证接入生效的完整操作路径。

需要注意:Stagehand 的这个集成是实验性的,只随仓库分发,不发布为独立 adapter 包(集成文档、集成总览)。

准备条件

开始前确认环境满足以下要求(来自文档 Prerequisites):

  • Node.js 24 或更新版本;
  • pnpm 11.10.0;
  • 一个 OpenAI API key,供示例智能体使用;
  • 本地浏览器模式下需要当前版本的 Google Chrome 安装。

智能体的默认模型是gpt-5.6-luna(见 示例源码 中process.env.AI_SDK_STAGEHAND_MODEL ?? "gpt-5.6-luna"),如果该模型可用就可以直接运行。

从仓库构建集成包

示例的 MCP 客户端会解析@browserbasehq/stagehand-integrations/facade/stdio-server入口并在本地启动它,所以必须先构建这个包,否则dist服务入口不存在(示例 README):

git clone https://gitcode.com/GitHub_Trending/stag/stagehand cd stagehand pnpm install --frozen-lockfile pnpm exec turbo run build \ --filter @browserbasehq/stagehand-integrations

构建命令只构建集成相关的包,不会运行其他包的构建任务。

配置环境变量

必做的配置只有两项:给宿主进程的 AI SDK 智能体提供模型凭证,以及选择浏览器后端。

# 示例智能体使用的模型凭证(必填) export OPENAI_API_KEY="your-openai-api-key" # 替换为你自己的 OpenAI API key

AI_SDK_STAGEHAND_MODEL用于在示例支持的模型中换模型,不设置时默认gpt-5.6-luna

浏览器后端二选一:

  • 默认使用本地 Chrome,无需额外配置;
  • 可选:改用 Browserbase 的一次性浏览器,需要以下两个变量:
export STAGEHAND_BROWSER="browserbase" export BROWSERBASE_API_KEY="your-browserbase-api-key" # 替换为你自己的 Browserbase API key

完整的变量含义见下表(来自 集成文档 的 Configuration 一节):

变量用途
AI_SDK_STAGEHAND_MODELAI SDK 智能体的模型。
OPENAI_API_KEY示例智能体的凭证。AI SDK 进程不会把它转发给 MCP 子进程。
STAGEHAND_BROWSER选择localbrowserbase
BROWSERBASE_API_KEY使用 Browserbase 时必填。
BROWSERBASE_PROJECT_ID可选的 Browserbase 项目 ID。
STAGEHAND_MODEL_NAME可选,run内部调用 Stagehand AI 方法(如actextractobserve)时使用的模型。
STAGEHAND_MODEL_API_KEY设置了STAGEHAND_MODEL_NAME时必填;MCP 子进程拿不到宿主侧的模型提供商凭证。

注意区分两个模型:智能体模型决定调用哪个工具;Stagehand 浏览器模型只在传给run的 JavaScript 会调用actextractobserve这类 AI 方法时才需要配置。

启动智能体并执行浏览器任务

在仓库根目录运行:

pnpm --dir packages/integrations/vercel-ai start -- \ "Open https://example.com and report the page title."

也可以用 示例 README 给出的等价的 filter 形式,指令作为start参数传入:

pnpm --filter @browserbasehq/stagehand-integrations-example-vercel-ai-facade start "your instruction"

执行时示例程序做了三件事(见 agent 入口 和 MCP 客户端):

  1. createFacadeMCPClient()@browserbasehq/stagehand-integrations/facade/stdio-server作为子进程启动,并建立 stdio MCP 连接——整个任务期间只连接一次;
  2. 通过generateText运行 AI SDK 工具循环:工具来自client.tools(),系统提示使用共享的FACADE_AGENT_INSTRUCTIONS,循环上限为stepCountIs(20)(20 步);
  3. 循环结束(无论成功失败)后在finally中调用client.close(),停掉子进程和它管理的浏览器。

运行结束后,示例会把智能体的最终回复打印到终端(console.log(result.text))。对上面example.com的示例指令,预期看到的就是一段包含页面标题的回复文本——这是文档示例指令的输出形态,不是固定文案。

三个工具与持久会话的使用约束

接入后的智能体拿到的始终是同一组工具契约(定义在 facade contract,总览见 集成文档):

  • snapshot:读取当前页面的精简 accessibility tree,并激活(hydrate)交互元素上带方括号的 ID。每次调用都会替换当前页面的 ID 映射;
  • run:对 Playwright 风格的pagecontextbrowser对象执行 JavaScript,或者发送一批引用 snapshot ID 的动作。codeactions必须且只能提供其一。snapshot 动作支持clickhoverfilltypepressselect,例如:
{ "code": "await page.goto('https://example.com'); return await page.title();" }
{ "actions": [{ "op": "click", "id": "1-42" }] }
  • screenshot:把当前页面拍成 PNG 或 JPEG 供视觉检查。

持久性来自"一个 MCP client 会话对应一个浏览器"这条设计,改造示例时必须保留这个生命周期:连接一次、加载三个工具、模型循环结束后再关闭。文档明确警告,如果每次工具调用都新建 MCP 进程,会启动新浏览器并丢失之前的页面状态,上一次调用拿到的 snapshot ID 也会全部失效。

快照 ID 的生命周期同样要注意:ID 只对当前页面最新一次 snapshot 有效;页面发生导航或 ID 过期后需要重新 snapshot。契约中对应的错误信息是"No hydrated snapshot exists for the active page; call snapshot first.""The active page navigated after its snapshot; call snapshot again."以及'Snapshot ID "${id}" is stale or not actionable; call snapshot again.'

验证接入是否生效

有三个层次的验证手段,均来自仓库文档和示例代码:

  1. 端到端运行:执行上面的start命令,终端打印出包含任务结果(例如页面标题)的智能体回复,说明工具循环和浏览器会话都已打通。
  2. 单元/契约测试:示例的test脚本会先构建集成包再跑 vitest(test定义在 package.json):
pnpm --filter @browserbasehq/stagehand-integrations-example-vercel-ai-facade test pnpm --filter @browserbasehq/stagehand-integrations-example-vercel-ai-facade typecheck

其中 client 测试 验证的是这个示例特有的行为:host 环境变量允许名单确实传进了启动的 server,且名单外的变量(测试中叫NOT_ALLOWLISTED_SECRET)不会跨进程。测试还覆盖了一个具体的错误形态——当STAGEHAND_BROWSER被设成非法值(测试中是invalid)时,调用snapshot工具会返回isError: true,文本内容包含"STAGEHAND_BROWSER must be either"。如果你的环境里出现同样的报错,先检查STAGEHAND_BROWSER只取localbrowserbase两个值。 3.工具契约:工具名、描述和输入 schema 由 core 包的 facade 契约测试固定,不需要在这个示例里重复验证。

安全边界与限制

  • run执行的是模型编写的 JavaScript,运行位置是 Stagehand 浏览器扩展的 service worker(浏览器侧),不在 agent 宿主进程里。这段代码能控制浏览器并访问会话内可及的一切。文档的建议是:不受信任的任务使用 Browserbase 作为隔离边界,并把已登录的浏览器会话及其可及数据视为特权资源。
  • 凭证隔离是示例内建的行为:MCP 子进程只收到STAGEHAND_*BROWSERBASE_*开头的环境变量,外加传输层补充的HOMELOGNAMEPATHSHELLTERMUSER(见 client 实现);宿主的模型凭证(如OPENAI_API_KEY)保留在 AI SDK 进程中,不会被转发。因此如果run里的 JavaScript 要调用 Stagehand AI 方法,必须单独配置STAGEHAND_MODEL_NAMESTAGEHAND_MODEL_API_KEY
  • 集成是实验性的,随仓库分发;如果你需要更长的上下文或跨框架的工具契约,其他框架的接入见 集成总览,Vercel 的 Eve 框架走的是进程内原生绑定的同一套工具契约(/v4/integrations/eve页面)。

更多实现细节可以直接读 MCP 客户端与 agent 循环源码 以及 facade 契约定义。

【免费下载链接】stagehandThe SDK For Browser Agents项目地址: https://gitcode.com/GitHub_Trending/stag/stagehand

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

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

提示词工程实战:10个技巧让大模型输出质量飙升

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

作者头像 李华
网站建设 2026/9/13 6:48:00

i.MX RT1064串口高可靠方案:LPUART+DMA+空闲中断实战

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

作者头像 李华
网站建设 2026/9/13 6:45:51

MATLAB仿真法布里-珀罗干涉仪:多光束干涉与Airy函数全解析

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

作者头像 李华
网站建设 2026/9/13 6:45:31

代码化图表设计:用Mermaid+SVG实现技术文档的可维护表达

1. 项目概述:从“diagram-design”看现代技术文档的底层表达逻辑“diagram-design”这个词组乍看像一个模糊的开发任务描述,但拆开来看——它不是某个具体工具名,也不是某家公司的产品代号,而是一个高度凝练的工程表达范式&#x…

作者头像 李华
网站建设 2026/9/13 6:43:03

Windows下MySQL root密码忘记?一文讲清5.7与8.0重置方法与坑点

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

作者头像 李华