Browser Harness 使用指南
Browser Harness 用来评测只能通过网页访问的聊天产品,并把抓回来的响应重新导入 eval_752,落成普通 run。
当目标模型只能通过网站使用时,就走这条路径。如果你已经有正常 API 端点,请继续使用标准的 Providers + Runs 流程。
当前 alpha 范围:
ChatGPT、Gemini和Customadapters- text-only、primary-only capture
- prompt-only signed packs
- 以
.eval752.zip作为主要导出 / 导入格式
v1 暂不支持:
- 浏览器侧多模态抓取
- 当源 dataset 已不在当前工作区时仍然导入 capture
什么时候该用它
满足以下情况时就该用 Browser Harness:
- 你要测的是一个只提供网页 UI 的聊天产品
- 你不想把这个厂商先包装成 eval_752 里的 API provider
- 你仍然希望结果最后能落成
Runs和Comparison中可评分的 run
如果你已经有 API key 和受支持 provider,就直接用普通 Runs launcher。
第一次尝试 Browser Harness 时,建议先用内置 fixture 页面,再去碰真实外部网站。这样可以先验证 selector recipe 和 pacing,而不用一上来就追真实产品的 DOM 变化。
导出的内容是什么
Browser Harness 不会把答案或 checker 逻辑发送到第三方页面。
生成的 signed pack 只包含:
- dataset identity 和 version hash
- 过滤后的 item 顺序
- section metadata
- prompt 文本
- scoring eligibility
- 已签名的
dataset_token
生成的脚本 不会包含:
- reference answers
- checker code
- embedded assets
- 完整 dataset package
端到端工作流
- 打开
Browser Harness。 - 选择 dataset、section filter 和可选的
Max items。 - 选择 target adapter:
ChatGPTGeminiCustom
- 如果 dataset 需要 LLM judging,就选择
Judge provider和Judge model。 - 生成脚本。
- 打开目标聊天页面,执行脚本或 bookmarklet。
- 等待抓取结束并下载
.eval752.zip。 - 回到 eval_752,导入这个 capture。
- 在
Runs里检查生成的 run;评分稳定后,再到Comparison查看。
第一步:选择数据范围
页面会在生成 pack 之前做预检。
以下情况会阻止导出:
- 过滤后的选择里没有任何 items
- 某道题没有可提取的纯文本 prompt
- 某道题包含 assets
- 数据集需要 judge scoring,但没有配置 judge provider / model
第二步:选择目标 Adapter
Presets
ChatGPT 和 Gemini 自带默认 selector recipes 和 pacing 值。
你仍然可以覆盖:
- target origin
- display name
- pacing values
Custom
Custom 需要这些字段:
Origin matchNew chat selectorComposer selectorSend button selectorAssistant turn selectorResponse text selector
可选字段:
Model label selectorBusy selectorStop selector
建议先用 Browser Harness 页面里链接的本地 fixture 页面验证 selector recipe,再去尝试真实站点。
第三步:Judge Provider
依赖 LLM judging 的 dataset 现在支持显式 judge provider,它可以与 run provider 不同。
Browser Harness 也沿用同一套契约:
Judge providerJudge model- 可选的
Judge prompt
如果数据集不需要 judge scoring,这一节可以留空。
第四步:生成与导入
页面会生成:
- 一份完整自包含的 raw script
- 这个脚本对应的 bookmarklet 包装
运行时脚本会:
- 在目标页面打开一个轻量 overlay
- 每道题前先点一次
new chat - 一次只发送一个 prompt
- 等待 assistant 响应稳定
- 记录 timing、origin、model label 和 errors
- 下载
browser-harness-export.eval752.zip
如果浏览器里 ZIP 打包失败,运行时会回退到 browser-harness-export.json。导入 UI 同时支持这两种格式,但 ZIP 仍然是主路径。
成功时通常应满足:
- 脚本能在没有预检报错的情况下生成
- 目标页面能按选中 prompts 逐条跑完
- 本地成功下载 capture
- 导入后在
Runs中出现一条普通 run
导入后会创建什么
导入会创建一条普通 completed run:
triggered_by = browser_harness- provider surface =
browser - browser target metadata 会存到 provider 上
- item responses 会以普通 run items 形式存储
- scoring 通过标准后端 worker 排队执行
这意味着:
- run 会出现在
Runs - logs 和 item detail 仍然可用
- judging 完成后,
Comparison也能消费这条结果 - 导入后的 run 仍然支持正常导出
故障排查
在脚本生成前就被阻止导出
查看页面上的 preflight 问题列表。常见原因是:
- dataset 里仍然有 assets
- 过滤后没有剩余 items
- 需要 judge 的 dataset 没有配置 judge provider / model
脚本提示 target origin 不匹配
把 Target origin 设为目标网站的准确 origin,例如 https://chatgpt.com。
脚本找不到页面元素
先用本地 fixture 页面验证。如果 fixture 正常但真实网站不行,通常说明站点 DOM 已变化,需要更新 selector recipe。
导入失败,提示 dataset 不匹配
Browser Harness 导入会用 signed dataset token 校验当前工作区。先把源 dataset 重新导回同一个工作区,再试一次。
run 已导入但还没评分
评分是异步排队的。打开 Runs,检查 run logs,并确认 worker 正常可用。judge-provider 失败会记录在结构化日志里,但不会直接丢弃这条已导入 run。
