百积木文档
开发指南Bundle 开发高级开发

浏览器录制生成个性化 Bundle

用 Baijimu CLI 创建 Agent 会话,让用户在托管浏览器中完成操作,再把捕获的请求固化为工作区专属 Bundle 并验证自动调用。

这条流程把一次真实网页操作变成可重复调用的工作区能力:CLI 创建 Agent 会话,Agent 创建带网络录制的浏览器会话,用户在 viewer 中操作,Agent 从录制请求中识别稳定接口并返回脱敏候选;运行 Agent 的外层自动化再通过同一台设备上的 Baijimu CLI 生成模块、冻结 Bundle、安装并验证。后续自动化调用的是 Bundle 中冻结的方法,不依赖再次人工操作页面。

Agent 会话和浏览器会话不是同一个对象。Agent 会话承载任务和项目上下文;browser-session 提供浏览器 Profile、viewer、标签页、网络录制及请求上下文。必须分别记录二者的 ID,并在结束时分别清理。

前置条件

  1. 安装并登录 Baijimu CLI。该流程要求 0.1.37 或更高版本,因为创建 Agent 会话必须显式传入 workspaceId
  2. 目标工作区已有默认 Runtime、项目、可执行的 Agent 配置和 Browser Profile。
  3. Runtime 已安装并能调用 browser-session 模块,Agent 配置允许使用它的浏览器工具。
  4. 测试账号有权访问目标网站和目标工作区;涉及扫码、MFA、验证码或授权确认时,由用户在 viewer 中完成。
  5. 为测试准备独立的工作区或明确的名称前缀。录制内容可能包含 Cookie、Authorization、表单数据和响应体,不得使用生产账号做无审计测试。

先从当前 CLI 确认命令面,不要复制其他版本的参数:

baijimu --version
baijimu auth status
baijimu agent session create --help
baijimu agent chat --help
baijimu bundle --help
baijimu runtime service --help

通过工作区、项目、Agent 配置和 Browser Profile 的列表或详情命令取得真实 ID。不要从页面 URL、历史日志或其他工作区猜测 ID。

1. 创建 Agent 会话

baijimu agent session create <PROJECT_ID> \
  --workspace-id <WORKSPACE_ID> \
  --agent-config-id <AGENT_CONFIG_ID> \
  --browser-profile-id <BROWSER_PROFILE_ID> \
  --title 'browser-record-to-bundle-<TIMESTAMP>' \
  --json

保存返回的 sessionId。如果接口返回 workspaceId is required,说明正在使用旧版 CLI;升级后重新创建,不要绕过 CLI 直接调用内部 API。

2. 让 Agent 打开浏览器并开始录制

向同一个会话发送完整目标。提示词至少要声明目标 URL、可识别的用户操作、录制范围、输出 Bundle 的命名规则和成功验收项:

baijimu agent chat <WORKSPACE_ID> <PROJECT_ID> <SESSION_ID> \
  --agent-config-id <AGENT_CONFIG_ID> \
  --message '请创建或复用当前 Browser Profile 的浏览器会话,把网络录制模式设置为 full,然后打开 <TARGET_URL>。返回 viewerUrl 和 browserSessionId,等待我完成页面操作。操作完成后只分析 XHR/Fetch 请求,选择能够稳定重放的业务请求,移除 Cookie、Authorization、一次性 token 和个人数据,把动态输入建模为方法参数。最后只返回脱敏后的候选方法定义和录制证据,不要通过 Runtime 内部服务创建项目、模块、Bundle 或版本。' \
  --json

Agent 应通过 browser-session 的这些能力完成准备:

  • ensure_browser_session:创建或复用浏览器会话并返回 sessionIdviewerUrlprofileId
  • set_network_capture_mode:在用户操作前设置为 full
  • get_browser_sessionlist_browser_session_tabsactivate_browser_session_tab:确认会话就绪并选中正确标签页。

只有在返回的工作区、Profile 和目标 URL 都正确后,才把 viewer 交给用户操作。

3. 用户在 viewer 中完成一次真实操作

用户在 viewer 中完成登录、点击、输入和提交。至少产生一个可识别的业务请求;只打开静态页面不算完成录制。

操作结束后,通知 Agent 继续。Agent 先调用 list_recorded_network_requests,优先筛选 XHRFetch、JSON、非静态资源,再用 get_recorded_network_request 查看候选请求详情。需要复用当前登录态时,可以用 get_browser_request_context 导出指定 URL 对应的 Cookie 名称和 User-Agent,但敏感值只能进入模块的敏感属性或运行态凭据,不能写进项目文件、方法定义、Bundle Manifest、日志或聊天结果。

读取列表前先确认最新记录的时间晚于本次用户操作。若记录仍停留在浏览器初始导航时间,说明当前采集 watcher 没有覆盖这次操作;重新把模式设置为 full,先执行一次无副作用导航或刷新并确认列表时间前进,再让用户重做目标操作。不要用旧请求冒充本次录制证据。

录制结果必须经过人工或 Agent 审查:

  1. 确认请求确实对应刚才的用户动作,而不是埋点、轮询或静态资源。
  2. 把路径、查询参数、请求体中的业务输入变成明确的方法参数。
  3. 移除 Cookie、Authorization、CSRF、追踪 ID、时间戳和一次性签名等会话值。
  4. 明确认证刷新、超时、幂等、重试、错误和响应裁剪规则。
  5. 首次验证选择查询或其他无副作用操作;写操作必须使用专用测试数据。

4. 固化为工作区专属 Bundle

生成结果必须走 Bundle-first 发布链,不能创建游离模块,也不能把历史“自定义服务”记录当成最终发布单元:

录制请求
  -> module.json + methods/*.json
  -> 项目 Git 提交
  -> Bundle 内冻结模块版本
  -> 发布不可变 Bundle 版本
  -> 安装或升级到目标 Runtime
  -> 回读服务并调用验证

浏览器 Agent 到返回脱敏候选为止。项目和 Bundle 的写操作属于外层发布控制器:由启动 Agent 会话的同一台受信任设备使用 Baijimu CLI 执行。不要让 Agent 经 Runtime 内部服务创建 Bundle;内部服务接收的是运行态上下文,不等同于 CLI 的工作区发布凭据和参数契约。

外层自动化至少执行并检查这些标准命令:

baijimu module project create <WORKSPACE_ID> --name <MODULE_PROJECT_NAME>

baijimu bundle create <WORKSPACE_ID> \
  --bundle-id <BUNDLE_ID> \
  --name <BUNDLE_NAME> \
  --manifest @bundle-manifest.json

baijimu bundle module create <WORKSPACE_ID> <BUNDLE_ID> \
  --project-id <MODULE_PROJECT_ID> \
  --name <MODULE_NAME> \
  --description '<DESCRIPTION>'

baijimu project git status <MODULE_PROJECT_ID>
baijimu project git diff <MODULE_PROJECT_ID> module.json
baijimu project git commit <MODULE_PROJECT_ID> \
  --message 'feat: generate module from browser recording' \
  --file module.json \
  --file methods/<METHOD_NAME>.json

baijimu bundle module freeze <WORKSPACE_ID> <BUNDLE_ID> <MODULE_PROJECT_ID> \
  --module-id <MODULE_ID> \
  --version 0.1.0 \
  --commit-id <COMMIT_ID>

baijimu bundle update <WORKSPACE_ID> <BUNDLE_ID> --manifest @bundle-manifest.json
baijimu bundle version publish <WORKSPACE_ID> <BUNDLE_ID> --version 0.1.0
baijimu bundle install <WORKSPACE_ID> <BUNDLE_ID>

若 Bundle 已安装,发布后使用 bundle upgrade 指向新 bundleVersionId,不要重复安装。个性化接入默认仅在当前工作区发布和安装;除非完成通用化、安全审查与市场审核,不得执行 bundle market publish

bundle install 必须能解析工作区自有 Bundle,并由 Partner 路由把安装请求交给默认 Runtime。若命令只查询公共市场,或自有 Bundle 安装 Partner 路由返回 404,应停止闭环并修复 CLI/网关能力;不要为了通过测试把个性化 Bundle 发布到公共市场。

5. 验证闭环

安装成功不等于闭环成功。用当前 CLI 的 Runtime 服务命令回读安装结果并调用方法:

baijimu runtime services list <WORKSPACE_ID> --keyword <MODULE_NAME> --json
baijimu runtime service get <WORKSPACE_ID> <BUSINESS_ID> --method <METHOD_NAME> --json
baijimu runtime service call <WORKSPACE_ID> <BUSINESS_ID> <METHOD_NAME> \
  --params @verification-input.json \
  --json
baijimu bundle resources <WORKSPACE_ID> <BUNDLE_ID>

验收证据至少包含:

  • Agent sessionId、浏览器 browserSessionId、Browser Profile ID 和目标 URL;
  • 被选中的请求 method、URL 模板及脱敏后的参数映射;
  • 模块项目 ID、模块 ID、Git commit ID 和冻结的模块版本;
  • Bundle ID、不可变 Bundle 版本 ID、resolvedLock 和 Runtime 安装记录;
  • Runtime 中可见的 businessId、方法名及一次成功调用的脱敏结果;
  • 再次调用时不需要用户重新操作网页。若认证本身需要用户确认,应明确把它定义为凭据更新步骤,而不是伪装成全自动。

最后让 Agent 关闭临时浏览器会话。保留 Profile 前先确认其中没有测试账号之外的敏感登录态;删除 Bundle、卸载应用或删除项目均属于破坏性操作,测试清理前需要单独确认。

常见失败

现象根因与处理
创建 Agent 会话返回缺少 workspaceIdCLI 版本低于 0.1.37,升级并显式使用 --workspace-id
viewer 可操作但没有业务请求录制开始太晚、模式仍为 off/metadata,或用户只访问了静态页面;在操作前切到 full 并重新执行。
请求列表只有初始导航记录watcher 没有覆盖本次用户操作;重新设置 full,用无副作用刷新确认记录时间前进,再重做目标操作。
找到大量无关请求先筛选 XHR/Fetch、JSON、非静态资源,再逐条核对触发时间和业务响应。
生成的方法只能调用一次把 Cookie、CSRF、签名、追踪 ID 或时间戳硬编码进了方法;改为敏感属性、认证刷新逻辑或动态参数后重新冻结版本。
Runtime 看不到方法只提交了项目文件或冻结了模块,没有更新、发布并安装/升级 Bundle;按资源锁逐层回查。
Agent 创建 Bundle 时出现 workspaceId 类型或上下文错误责任边界错误;Agent 只返回脱敏候选,外层自动化必须使用 Baijimu CLI 完成项目和 Bundle 写操作。
bundle install 找不到刚发布的自有 BundleCLI 退化为只查公共市场,或工作区自有安装 Partner 路由未注册;修复发布链路后再验证,不要执行 bundle market publish 绕过。
网关调用缺少用户上下文模块错误地要求浏览器传普通 userId;应从 Runtime 调用上下文获取当前用户和工作区。
测试意外进入公共市场个性化测试不应执行 bundle market publish;停止审核流程并确认没有公开版本后再继续。

本页内容