
如何用 Browserbase 会话监控跟踪 Stagehand 自动化的资源用量与 token 消耗【免费下载链接】stagehandThe SDK For Browser Agents项目地址: https://gitcode.com/GitHub_Trending/stag/stagehand当 Stagehand 自动化跑在 Browserbase 云端浏览器上时你通常要回答两个问题这个会话消耗了多少 CPU、内存和带宽act / extract / observe 各花掉了多少 tokenStagehand 的文档为这两类问题提供了各自的读取方式会话级资源数据通过 Browserbase 的 sessions API 读取token 消耗通过stagehand.metrics()从运行时读取。本文以 TypeScript 为主线给出从安装、接入到验证输出的完整路径适用条件已持有 Browserbase API key运行环境满足 安装文档 要求Node.js 22.18 或更高、Python 3.11 或更高、Go 1.26 或更高Bun 可用。准备条件安装 Stagehand SDK 和依赖按 快速开始 的命令mkdir my-stagehand-app cd my-stagehand-app pnpm init -y pnpm install browserbasehq/stagehand zod会话监控部分还需要browserbasehq/sdk即 可观测性文档 中import { Browserbase } from browserbasehq/sdk所引用的 Browserbase 官方 SDK。设置环境变量。Stagehand 不会替你读取环境变量API key 需要在你自己的代码里读取后显式传给浏览器工厂export BROWSERBASE_API_KEYbb_live_... # 你的 Browserbase API key export BROWSERBASE_PROJECT_ID... # 手动创建会话时需要未配置模型时Model Gateway 会自动选择并鉴权模型不需要额外的模型供应商 key。跟踪 token 消耗metrics 基线相减法stagehand.metrics()从运行时返回指标调用需要 await。文档强调指标在整个会话内是累计值所以要得到某段自动化的真实消耗需要在任务开始前记一次基线任务结束后再取一次两者相减。import { browserbase, Stagehand } from browserbasehq/stagehand; import { z } from zod/v4; const UserSchema z.object({ name: z.string(), email: z.string() }); const browser await browserbase.launch({ apiKey: process.env.BROWSERBASE_API_KEY, }); const stagehand await Stagehand.create({ browser }); const startTime Date.now(); const initialMetrics await stagehand.metrics(); // ... 执行自动化任务 const [page] await browser.context.pages(); await page.goto(https://example.com); await stagehand.act(click the login button); const { data } await stagehand.extract(extract user info, UserSchema); const finalMetrics await stagehand.metrics(); const executionTime Date.now() - startTime; // 指标是会话内累计值因此减去基线 const tokensUsed finalMetrics.totalPromptTokens finalMetrics.totalCompletionTokens - (initialMetrics.totalPromptTokens initialMetrics.totalCompletionTokens); console.log(Automation Summary:, { tokensUsed, executionTime: ${executionTime}ms, avgInferenceTime: ${finalMetrics.totalInferenceTimeMs / 3}ms, });Python 和 Go SDK 提供同样的metrics()能力字段命名为 snake_casetotal_prompt_tokens等和 PascalCaseTotalPromptTokens等相减逻辑一致。metrics 对象包含哪些字段指标按 Stagehand 操作类型act / extract / observe分别给出 token 与推理耗时另有累计总量字段TypeScript 命名含义actPromptTokens/actCompletionTokens/actReasoningTokens/actCachedInputTokens/actInferenceTimeMsact 操作的指标extractPromptTokens/extractCompletionTokens/extractReasoningTokens/extractCachedInputTokens/extractInferenceTimeMsextract 操作的指标observePromptTokens/observeCompletionTokens/observeReasoningTokens/observeCachedInputTokens/observeInferenceTimeMsobserve 操作的指标totalPromptTokens/totalCompletionTokens/totalReasoningTokens/totalCachedInputTokens/totalInferenceTimeMs会话累计值totalCachedInputTokens单独统计从模型供应商的 prompt cache 中命中的部分与 Stagehand 自身的服务端结果缓存后者直接省掉推理调用是两回事。文档给出的示例输出数值仅作示例实际运行结果不同const metrics await stagehand.metrics(); console.log(metrics); // { // actPromptTokens: 4011, // actCompletionTokens: 51, // actInferenceTimeMs: 1688, // extractPromptTokens: 4200, // extractCompletionTokens: 243, // extractInferenceTimeMs: 4297, // observePromptTokens: 347, // observeCompletionTokens: 43, // observeInferenceTimeMs: 903, // totalPromptTokens: 8558, // totalCompletionTokens: 337, // totalInferenceTimeMs: 6888 // // ...reasoning / cached 字段略 // }验证方式任务完成后打印的 summary 中tokensUsed应为正数且随任务中 act / extract 次数增长metrics()调用本身应正常返回对象它是从运行时获取的若会话已关闭则不再有效。跟踪会话资源CPU、内存与带宽Browserbase 的会话级监控提供实时画面回放、网络请求监控、console 日志、CPU 与内存指标、会话状态与时长。想通过 API 读取这些数据关键点是自己创建会话以持有 session ID再用browserbase.connect()按 session ID 接入import { Browserbase } from browserbasehq/sdk; import { browserbase as stagehandBrowserbase, Stagehand } from browserbasehq/stagehand; const bb new Browserbase({ apiKey: process.env.BROWSERBASE_API_KEY, }); // 自己创建会话从而持有 session ID const session await bb.sessions.create({ projectId: process.env.BROWSERBASE_PROJECT_ID, }); const browser await stagehandBrowserbase.connect({ apiKey: process.env.BROWSERBASE_API_KEY, sessionId: session.id, }); const stagehand await Stagehand.create({ browser }); // ... 执行自动化 const sessionInfo await bb.sessions.retrieve(session.id); console.log(Session status:, sessionInfo.status); console.log(Session region:, sessionInfo.region); console.log(CPU usage:, sessionInfo.avgCpuUsage); console.log(Memory usage:, sessionInfo.memoryUsage); console.log(Proxy bytes:, sessionInfo.proxyBytes);这里用connect()而不是launch()按 浏览器配置文档 的说明browserbase.launch()创建会话时若不带extensionIdStagehand 会自动上传扩展而直接管理会话时需要先上传 Stagehand 扩展并在创建会话时带上extensionId扩展不能在会话开始后追加然后通过 session ID 交给browserbase.connect()。文档中connect()示例的extensionId来自环境变量BROWSERBASE_STAGEHAND_EXTENSION_ID即 Browserbase Extensions API 返回的已上传扩展资源 ID需要你按自己的上传流程填充。需要注意的限制avgCpuUsage、memoryUsage等资源计数在较旧的 Browserbase API 版本中可能缺失文档中的类型定义将它们标记为可选字段avgCpuUsage?: number。读取时对undefined做兜底。会话状态取值范围RUNNING、COMPLETED、ERROR、TIMED_OUT。按状态与元数据过滤会话批量运行时用sessions.list()查询和筛选会话// 按状态过滤例如只列出运行中的会话 const sessions await browserbase.sessions.list({ status: RUNNING }); // 按元数据查询 const matches await browserbase.sessions.list({ q: query });每条会话记录可读取id、status、startedAt、endedAt、region、avgCpuUsage、memoryUsage、proxyBytes、userMetadata。文档建议在browserbase.launch()上用userMetadata给每个会话打标签这样后续查询就能按工作流、客户或部署维度切分。验证方式list({ status: RUNNING })返回的会话集合应只包含状态为RUNNING的会话带userMetadata标签的会话可用q查询命中据此判断标签是否生效。操作历史日志回调构建时间线metrics()给的是总量。要看发生了什么的顺序文档给出的方式是通过日志回调自行记录每次 act、observe、extract 都会发出带结构化数据的日志记录Stagehand实例上没有现成的 history 访问器。const history: Array{ level: debug | info | warn | error; message: string; data: Recordstring, unknown; timestamp: string; } []; const stagehand await Stagehand.create({ browser: await browserbase.launch({ apiKey: process.env.BROWSERBASE_API_KEY }), logging: { level: debug, format: json, onLog(log) { history.push({ ...log, timestamp: new Date().toISOString() }); }, }, }); // ... 运行自动化 console.log(history.filter((entry) entry.level error)); console.log(await stagehand.metrics());记录内容的完整程度取决于日志级别默认是info及以上想要最完整的时间线时把级别调到debug。在 Browserbase 上会话回放面板也能可视化展示同一条时间线而且能看到网络与 console 活动——这些内容不会进入日志回调。边界与不适用项metrics()与sessions.retrieve()是两套数据前者是 Stagehand 推理侧的 token 与耗时统计后者是 Browserbase 会话侧的 CPU、内存、带宽与状态两者互补不能互相替代。本地浏览器localBrowser.launch()同样支持stagehand.metrics()但不经过 Browserbase 会话 API因此本文的会话级资源字段只在 Browserbase 云会话上可用。文档明确avgCpuUsage/memoryUsage字段在旧版 Browserbase API 中可能缺省读取代码需要容忍undefined。想把完整调用链接入自己的可观测系统时Stagehand 对每个操作和每条日志都会发 OpenTelemetry span100% 采样telemetry.traces.endpoint必须指向以/v1/traces结尾的 OTLP 端点——这属于独立配置路径本文不展开。完成上述步骤后你应当能看到脚本输出的Automation Summary含相减后的tokensUsed、sessions.retrieve()返回的会话状态与资源字段以及list()按状态过滤后的会话列表。这三类输出共同构成了对一次 Browserbase 上 Stagehand 自动化的资源与 token 消耗核对依据进一步的 token 成本优化可参考文档中指向的 缓存 与 日志配置 页面。【免费下载链接】stagehandThe SDK For Browser Agents项目地址: https://gitcode.com/GitHub_Trending/stag/stagehand创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考