Repository navigation
[实验报告] DSH + Jev 多步协作:实验设计、真实模型测量与收益评估 #423
Description
我在 2026-10-13 用本地 DSH 做了一轮 BrowserSkill + Jev 的有限范围实验,评估「主模型负责规划和验收,决策 API 接手部分连续浏览器操作」能否减少用户等待时间。
目前的结论是:协作和失败回退路径已经跑通,但在本次主模型、Jev 代理和场景组合下,还没有测到稳定的提速收益。 主模型请求次数减少,不代表任务总耗时一定减少。建议先保留为可选实验能力,继续验证委派边界和开销,再决定是否进入产品主线。
本轮完成 52 次真实模型 A/B 运行:初版 44 次、修正版 8 次,均通过任务验收。另有 3 次故障注入恢复测试和 1 次安装后的真实表单验证,也全部通过;这 4 次不参与收益统计。18 次接入预跑单独保留,不混入正式数据。下面同时公开变快、变慢、没有采用委派和中途回退的结果。
实验比较的是两条完整的用户任务路径。 A 组使用现有 DSH 主模型和 BrowserSkill 工具;B 组保持相同主模型和普通工具,额外启用 browser_delegate。主模型仍负责理解用户目标、拆分任务、提供输入和验收结果,可以把连续的页面操作交给辅助决策循环,也可以直接使用原有工具。
flowchart TD
U[用户任务] --> M[DSH 主模型:规划与验收]
M --> B[原有 BrowserSkill 工具]
B --> M
M --> D[browser_delegate:目标、完成条件、输入]
D --> O[观察当前页面,构造候选操作]
O --> J[Jev 选择下一步]
J --> E[调用已有 BrowserSkill 工具执行]
E --> O
J --> R[完成或交回:已执行步骤与页面证据]
R --> M
M --> F[最终回答,关闭 session]
实验适配器实现了这些约束:
- 从当前实际页面和元素引用生成有限候选操作,包括点击、填写明确输入、选择原生下拉值、回车、条件等待、历史返回、继续读取页面,以及完成或交回。页面变化后重新观察,不把旧元素引用继续当成可操作对象。
- 原生下拉值来自页面真实选项;Jev 根据任务和页面在候选操作中选择。没有提前录制用户操作,没有给 Jev 编排点击序列、场景专用选择器或验收答案。
- 委派返回已完成步骤、当前页面和观察证据。缺少凭据、服务错误、低置信度或预算耗尽时交回主模型;交回后同一 session 不再调用辅助工具,由原有工具从当前进度继续。对于执行结果不确定的操作,不盲目重放。
- 限定实验站点和操作范围,表单提交需明确允许;机票案例停在旅客信息页。实验没有购票、支付或真实业务数据提交。
- 每次 Jev 请求上限 4 秒、不重试;单次委派最多 16 个操作,循环预算 90 秒,主任务上限 240 秒。90 秒在步骤之间检查,进行中的浏览器工具仍受其自身超时控制,因此它不是整个委派严格的墙钟上限。
当前实现是本地 DSH 的可选实验配置和适配器,复用已有 BrowserSkill CLI、插件和扩展能力。没有开发扩展配置页面,也没有将实验适配器并入主线。默认 DSH 配置保持原状。
正式测量前固定环境、任务、策略和验收口径。 初版正式组冻结后没有根据快慢调整参数;发现集成问题后另建修正版,单独复测和报告。
| 项目 | 本轮实际配置 |
|---|---|
| BrowserSkill | 实验开始时获取 origin/main,固定为 4c8616b12273ac5a22ce4adb494cac941e20de2a;A/B 使用同一 CLI、扩展和 DSH 插件构建 |
| DSH | 0.2.0-rc.2 |
| 主模型 | 会话实际配置为 deepseek-official / deepseek-flash,reasoningEffort: high,maxTokens: 256000;两组一致 |
| 决策模型 | Jev 代理接入,jev-1.13.0;统计完整 HTTP 往返耗时 |
| 浏览器 | Chrome for Testing 149.0.7827.55,无界面模式、独立 profile 和 daemon,只使用实验创建的页面 |
| 路由阈值 | 预跑后固定为 0.50,正式运行期间不调整;它是路由参数,尚未校准为正确率概率 |
| 其他开销 | 两组均关闭标题生成和额外 PiP 缩略图,保留正常页面观察 |
每对任务使用完全相同的任务提示和输入,表单输入使用相同的配对标识。两组都包含相同的能力条件说明:有 browser_delegate 时,多步子任务优先委派;没有时使用普通工具;单步任务使用普通工具;交回后从当前进度继续。因此,本轮测量的是配置了协作工具和使用策略之后的完整路径,没有测量新工具在无使用提示下的自然采用率。
案例覆盖机票流程、信息获取、填写表单、多页检索和简单任务对照。 所有正式测量都实际调用模型、实际访问外部网页,没有用固定时延模拟模型,也没有用本地静态页面替代网站。
| 案例 | 具体任务 | 独立验收依据 |
|---|---|---|
| 机票演示 | 在 BlazeDemo 查询 Portland → London,比较全部报价,选最低价,停在旅客信息页 | 实际查询和选中航班参数、页面中观察到的报价;不出现购票确认请求 |
| 真实信息获取 | 从 Python 下载页 打开 3.13.8、3.14.0 详情页,提取发布日期和来源链接 | 两个详情页实际访问、工具回执中的版本与日期、独立参考答案 |
| 填写表单 | 在 Selenium web form 填两个文本框,选择 Dropdown 的 Three、datalist 的 Seattle,勾选 Default checkbox 并保留 Checked checkbox,提交一次 | 实际提交参数中的文本、my-select=3、my-datalist=Seattle、两个 my-check,以及 Received! 回执和提交次数 |
| 多页复杂检索 | 在 Books to Scrape 遍历 Mystery 两页,找出全部低于 £15 的图书,逐一读取完整标题、价格、UPC、链接 | 分类第二页和 5 个详情页实际访问,完整观察记录中出现对应 UPC,最终答案与独立结果匹配 |
| 简单任务对照 | 打开 Selenium 页面,只读取主标题 Web form,不填写或提交 |
页面观察和最终答案一致,不需要调用 Jev |
为便于复核,案例的参考结果放在文末。参考结果只交给验收器,不传给决策服务。
站点覆盖有明确限制:Python 是真实生产网站,机票、表单和图书目录是公开演示/测试站点。真实售票站入口在独立浏览器中返回反自动化拦截,没有继续绕过。因此,本轮没有测得真实购票站、登录态业务或支付流程的收益,不能把机票演示数据当成真实买票表现。
测量过程按预跑、冻结、正式 A/B、定位问题、独立复测、恢复验证执行。
- 先做 18 次接入预跑,修复工具 schema 和长工具回执验收问题,确认真实委派可以发生。工具没有加载、主模型没有委派的预跑也保留;它们不作为协作收益证据。
- 冻结代码快照、配置、提示词、任务、验收器和哈希。正式组为四个多步案例各 5 对,简单对照 2 对,共 22 对 / 44 次。
- 逐对交替 A→B、B→A,顺序运行。慢运行、未采用委派、真实服务超时和回退都保留,不筛选更快样本。
- 计时从 DSH 进程启动到退出,包含规划、session 启动、页面加载、操作、最终回答和关闭 session;两组共同的构建、浏览器和 daemon 启动不在任务计时内。
- HTTP 计时持续到响应结束,主模型请求数与 DSH 持久化会话中的请求记录核对。总耗时拆为主模型 HTTP、Jev HTTP、其余时间;「其余」包含浏览器、CLI、进程启动和本地处理。
- 成功须同时满足独立任务验收、进程正常退出、显式关闭 session。使用完整持久化工具回执和页面操作证据,不只看模型自述;终端 JSON 对长结果的截断不会被当成事实缺失。
- 初版数据冻结后,仅修正两个集成细节,另做 4 对 / 8 次复测。最后单独验证故障恢复和安装后的实际调用。
同一批次可能复用浏览器缓存、站点状态及服务侧提示词缓存;交替顺序只能减轻,不能完全消除这些影响。五对样本只适合判断本轮方向,不足以证明所有用户场景都不退化。
初版正式测量共 44 次,任务验收和请求统计核对均通过。 下表单位为秒,正的 B−A 表示协作路径更慢。「配对差值中位数」先对每一对计算差值再取中位数,与两组各自中位数相减不是同一指标。
| 场景 | A / B 正确次数 | A 耗时中位数 | B 耗时中位数 | 配对 B−A 中位数 | B 更快 | 主模型平均请求 A→B |
|---|---|---|---|---|---|---|
| 机票演示 | 5/5 / 5/5 | 19.18 | 24.17 | +4.95 | 1/5 | 12.8 → 8.2 |
| 真实信息获取 | 5/5 / 5/5 | 20.22 | 42.27 | +22.05 | 1/5 | 11.6 → 7.6 |
| 填写表单 | 5/5 / 5/5 | 25.00 | 31.10 | +6.10 | 0/5 | 12 → 7.6 |
| 多页检索 | 5/5 / 5/5 | 59.53 | 74.15 | -0.28 | 3/5 | 26 → 21 |
| 简单任务 | 2/2 / 2/2 | 7.45 | 7.30 | -0.15 | 1/2 | 6 → 6 |
机票有 4/5 对变慢,表单 5/5 对变慢。信息获取唯一更快的一对,B 组没有调用 Jev,不能将这次收益归因于决策服务。多页检索虽然有 3/5 对更快,但配对差值中位数只有 −0.28 秒;A、B 的耗时范围分别为 36.92–175.81 秒、59.24–127.53 秒,波动较大,尚不支持稳定提速的结论。
20 次多步 B 组任务中,18 次实际委派,2 次主模型选择普通工具;两次未委派也保留在统计中。18 次委派完成了 64 个页面动作,发出 82 次 Jev HTTP 请求。10 次返回子任务完成,8 次交回主模型后完成,包括 3 次低置信度、3 次主动交回和 2 次真实请求超时。两个简单对照的 B 组任务都没有调用 Jev。
调用数下降没有抵消新增的串行开销。 初版主模型请求总数从 324 降至 234,减少约 27.8%,但 B 组新增 82 次 Jev 请求。一次主模型委派可以包含多次决策请求和页面观察,主模型还需要描述约束并消化返回证据。
这批数据中,A 组主模型单次请求中位数约 1.16 秒,B 组主模型约 1.45 秒,Jev 约 1.51 秒。三者处理的任务不同,不能据此比较等价推理能力;但本配置下,不能假定每次 Jev 请求能比主模型省下大量时间。代理往返包含传输、排队和推理,本轮没有将它们进一步分离。
下面按场景给出配对平均差值。三个耗时分量相加得到总变化,显示值因四舍五入可能相差 0.01 秒;这里用平均值分解开销,与上表的中位数口径不同。
| 场景 | 主模型 HTTP 变化 | 新增 Jev HTTP | 其余时间变化 | 总耗时平均变化 |
|---|---|---|---|---|
| 机票演示 | +0.69s | 5.85s | -0.05s | +6.49s |
| 真实信息获取 | -2.79s | 5.49s | +11.75s | +14.45s |
| 填写表单 | -1.28s | 9.38s | -1.70s | +6.40s |
| 多页检索 | +2.85s | 5.48s | -9.52s | -1.18s |
| 简单任务 | +0.23s | 0.00s | -0.38s | -0.15s |
例如表单,主模型 HTTP 平均少了 1.28 秒,其他处理平均少了 1.70 秒,但新增 Jev HTTP 为 9.38 秒,最终平均慢了 6.40 秒。数据中能看到明确的新增开销,不能把全部差异都解释为主模型波动。信息获取和多页检索还受到浏览器路径及等待策略影响,需分别定位。
修正版只处理两个已发现的集成问题,并单独报告 8 次复测。
- 继续读取长页面时,原实现会丢掉前段观察上下文。修正版在限定预算内保留事实,旧片段只作为阅读上下文;需要操作时重新获取当前元素引用。
- 历史返回改用已有的
commit等待条件,随后重新观察页面。独立浏览器复现中,原domcontentloaded条件两次等待约 15.02 / 15.01 秒并超时,页面实际已返回;改后两次均约 0.101 秒且页面内容正确。这个收益属于浏览器等待路径,不能算成 Jev 推理提速。
没有修改 BrowserSkill CLI 或扩展,也没有调整模型、置信度阈值、请求上限或任务。原版记录保留,受影响的信息获取和多页检索各复测 2 对:
| 场景 / 配对 | 顺序 | A 普通路径 | B 修正版协作 | B−A | 主模型请求 A→B | Jev 请求 |
|---|---|---|---|---|---|---|
| 真实信息获取 / 1 | A→B | 17.91s | 30.25s | +12.34s | 10 → 5 | 4 |
| 真实信息获取 / 2 | B→A | 56.22s | 36.43s | -19.79s | 12 → 8 | 4 |
| 多页检索 / 1 | A→B | 97.40s | 69.49s | -27.91s | 23 → 21 | 5 |
| 多页检索 / 2 | B→A | 44.91s | 68.46s | +23.55s | 22 → 24 | 1 |
8 次任务全部正确,但每类仍是一对快、一对慢。信息获取两次均委派完成 3 个页面动作;检索的一次委派执行了 3 个页面动作和 1 次继续观察,另一次在执行动作前就交回,最终都由主模型补齐。本轮复测支持修正后的功能可用,样本还不足以证明稳定提速,也不能把更快的几次全部归因于 Jev。
后续比较决策服务的净收益前,应让普通路径同样使用合理的浏览器等待策略。部分点击中也观察到约 5 秒耗时,本轮没有完成这部分原因定位。
回退能力单独验证,成功率和速度分开评价。 下面三次使用真实 DSH 主模型和真实表单操作,服务故障由适配器注入,因此它们是恢复测试,不是 Jev 线上可靠性样本。
| 故障注入 | 故障前状态 | 后续行为和结果 |
|---|---|---|
| 无凭据 | 0 个委派动作,0 次 Jev HTTP | 交回普通工具,全部字段正确,提交一次 |
| 服务不可用 | 已通过 2 次真实 Jev 请求填写两个文本框 | 保留已有内容,普通工具继续选择、勾选和提交,没有重填已完成字段,提交一次 |
| 请求超时 | 同样已填两个文本框,再注入约 4 秒等待 | 返回已完成进度,普通工具继续,字段正确,没有重填或重复提交 |
正式 A/B 中另有两次真实 Jev 超时,也都恢复完成。安装后的修正版表单验证执行了 6 个委派动作、7 次 Jev 请求,约 28.20 秒完成,字段正确且只提交一次;它属于安装验证,不纳入 A/B 统计。另有 20 项针对性测试通过,覆盖工具 schema、当前元素引用、多步进度、观察分页、取消、错误操作不重放和服务异常等。
这些结果证明本原型在已测样本中能够保留进度并回退完成任务。由于协作组的多项耗时变长,不能仅凭任务都成功,就声称用户体验不退化。
我建议继续保留有限实验,暂不默认启用。 当前数据支持的下一步是:
- 先定位两组共用的页面等待开销,并在相同等待策略下重新比较。
- 改善委派边界和候选操作覆盖,优先寻找能承担足够多连续操作、又不会产生大量交回和验收开销的子任务。
- 校准路由阈值,并探索把决策开销、低置信度和预算纳入委派条件;始终保留普通工具恢复能力。
- 再扩展到正常有界面浏览器、更多真实业务站点、不同任务输入和更大的冻结样本,持续报告成功率、任务总耗时、回退率与服务成本。
本原型的候选操作未覆盖主模型可使用的全部直达 URL、结构化读取等策略,测到的是这份受限实现的产品路径。结果不足以否定所有决策 API 的潜在价值,也不足以宣传通用加速或省钱。后续范围应由新增证据决定。
初版全部 22 对原始配对结果(含顺序、调用数、实际动作与交回原因)
A 为原有工具路径,B 为同一主模型加可选 Jev 委派。所有行两组均验收成功。耗时和差值直接由未舍入的数据计算后保留两位,因此显示值相减偶尔相差 0.01 秒。动作数只计辅助工具实际成功执行的页面动作。
| 场景 / 配对 | 顺序 | A(秒) | B(秒) | B−A(秒) | 主模型请求 A→B | Jev 请求 | 页面动作 | 委派结果 |
|---|---|---|---|---|---|---|---|---|
| 机票演示 / 1 | A→B | 27.66 | 24.17 | -3.49 | 15 → 7 | 5 | 4 | 子任务完成 |
| 机票演示 / 2 | B→A | 19.12 | 22.07 | +2.95 | 12 → 12 | 0 | 0 | 未调用 |
| 机票演示 / 3 | A→B | 18.96 | 34.49 | +15.52 | 11 → 8 | 5 | 4 | 子任务完成 |
| 机票演示 / 4 | B→A | 21.76 | 34.29 | +12.53 | 14 → 7 | 5 | 4 | 子任务完成 |
| 机票演示 / 5 | A→B | 19.18 | 24.13 | +4.95 | 12 → 7 | 5 | 4 | 低置信度交回 |
| 真实信息获取 / 1 | B→A | 45.91 | 19.53 | -26.38 | 13 → 9 | 0 | 0 | 未调用 |
| 真实信息获取 / 2 | A→B | 15.39 | 44.25 | +28.86 | 10 → 9 | 4 | 3 | 子任务完成 |
| 真实信息获取 / 3 | B→A | 25.23 | 38.97 | +13.73 | 13 → 5 | 4 | 3 | 子任务完成 |
| 真实信息获取 / 4 | A→B | 15.41 | 49.37 | +33.97 | 10 → 9 | 4 | 3 | 子任务完成 |
| 真实信息获取 / 5 | B→A | 20.22 | 42.27 | +22.05 | 12 → 6 | 4 | 3 | 子任务完成 |
| 填写表单 / 1 | A→B | 15.52 | 26.23 | +10.71 | 11 → 9 | 7 | 6 | 子任务完成 |
| 填写表单 / 2 | B→A | 23.79 | 25.72 | +1.93 | 10 → 11 | 4 | 3 | 超时交回 |
| 填写表单 / 3 | A→B | 25.78 | 34.80 | +9.02 | 12 → 6 | 7 | 6 | 子任务完成 |
| 填写表单 / 4 | B→A | 25.00 | 31.10 | +6.10 | 11 → 5 | 7 | 6 | 子任务完成 |
| 填写表单 / 5 | A→B | 27.74 | 31.99 | +4.25 | 16 → 7 | 6 | 5 | 主动交回 |
| 多页检索 / 1 | B→A | 91.97 | 74.15 | -17.81 | 25 → 23 | 2 | 1 | 主动交回 |
| 多页检索 / 2 | A→B | 36.92 | 61.05 | +24.12 | 24 → 20 | 2 | 1 | 超时交回 |
| 多页检索 / 3 | B→A | 175.81 | 127.53 | -48.27 | 30 → 22 | 5 | 4 | 主动交回 |
| 多页检索 / 4 | A→B | 58.53 | 94.88 | +36.34 | 21 → 20 | 4 | 3 | 低置信度交回 |
| 多页检索 / 5 | B→A | 59.53 | 59.24 | -0.28 | 30 → 20 | 2 | 1 | 低置信度交回 |
| 简单任务 / 1 | A→B | 7.98 | 6.94 | -1.04 | 6 → 6 | 0 | 0 | 未调用 |
| 简单任务 / 2 | B→A | 6.92 | 7.66 | +0.74 | 6 → 6 | 0 | 0 | 未调用 |
「子任务完成」仍由主模型验收;「低置信度」「主动交回」「超时」均由主模型使用普通工具继续完成。
案例输入和参考结果
- 机票:Portland → London,列表最低价为航班
9696、Aer Lingus、$200.98。以真实列表及选中航班参数验收,旅客信息页的占位文案不作为报价依据。 - 信息获取:Python 3.13.8 和 Python 3.14.0 的发布日期均为
2025-10-07。要求实际打开两个详情页并提供来源链接。 - 表单:Text input 填
BSK Trial <pair-id>,Textarea 填multistep review <pair-id>;两组使用相同<pair-id>。Dropdown 选 Three(值3),datalist 填 Seattle,两个 checkbox 最终都选中,提交一次并观察到Received!。 - 检索:筛选条件为 Mystery 分类、价格严格低于 £15,需遍历两页。下列 5 项均须访问详情并返回完整标题、价格、UPC 和详情 URL,不允许只凭列表或模型记忆作答。
| 完整书名 | 价格 | UPC |
|---|---|---|
| That Darkness (Gardiner and Renner #1) | £13.92 | 0c7b9cf2b7662b65 |
| Tastes Like Fear (DI Marnie Rome #3) | £10.69 | 2d1e337aaf341858 |
| Hide Away (Eve Duncan #20) | £11.84 | bddc6fd036eb6279 |
| Playing with Fire | £13.71 | 05a61a3bd8ca4149 |
| The Girl You Lost | £12.29 | 4280ac3eab57aa5d |
初版请求量与 Token 用量(未换算费用)
以下仅汇总 44 次正式运行的主模型 usage,按请求结束事件统计,不重复累计流式事件。
| 主模型用量 | A 普通路径 | B 协作路径 |
|---|---|---|
| HTTP 请求 | 324 | 234 |
| 非缓存输入 Token | 589,006 | 653,363 |
| 缓存读取 Token | 7,161,344 | 6,121,600 |
| 输出 Token | 65,634 | 68,183 |
| 总 Token | 7,815,984 | 6,843,146 |
另外,Jev 已返回 usage 的请求合计为 417,075 输入 Token、36,797 输出 Token;2 次超时没有取得 usage。主模型的缓存重复读取减少,但非缓存输入和输出增加。代理实际计费及缓存价格没有核实,不能由请求数或总 Token 下降直接推导成本收益。
实验代码快照、配置哈希、完整会话、页面证据和验收结果已在本地归档。本 issue 提供脱敏后的方法、汇总和全部配对数据;原始会话未公开,实验适配器也尚未作为可下载的主线功能发布。
Activity