@ljwei-stak/dsh-model-router 0.15.0 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,7 +2,7 @@
2
2
 
3
3
  模型路由从 **0.12.0** 起独立发布;GAL 是新的 **0.1.0** 插件。两者均声明支持官方 **DeepSeek Harness Desktop 0.2.0-rc.1 / 0.2.0-rc.2**,可分别安装和更新。
4
4
 
5
- 当前路由版本为 **0.15.0**。本版包括四页工作台、规划后直接展示路由建议、执行输入变化后丢弃旧预览,以及历史裁剪和重试后的费用累计保留。源码开发可使用独立模拟 UI 预览;安装时选择下方精确版本。
5
+ 当前路由正式版为 **0.16.0**。在既有四页工作台与费用累计保留的基础上,本版加入可选动态公开数据和分任务类型的持续反馈学习。公开数据默认关闭;主观偏好调整不改变公共能力评分或质量门槛。源码开发可使用独立模拟 UI 预览;安装时选择下方精确版本。
6
6
 
7
7
  [路由 README](README.zh.md) · [迁移说明](MIGRATION.md) · [独立 GAL README](https://github.com/Alice-Marx/deepseek-harness-galgame#readme)
8
8
 
@@ -10,7 +10,7 @@
10
10
 
11
11
  | 需求 | 添加插件输入框 | 安装后的入口 |
12
12
  | --- | --- | --- |
13
- | 分析复杂度、按质量和费用选模型、调用官方工具 | `@ljwei-stak/dsh-model-router@0.15.0` | 模型路由 |
13
+ | 分析复杂度、按质量和费用选模型、调用官方工具 | `@ljwei-stak/dsh-model-router@0.16.0` | 模型路由 |
14
14
  | 剧情、立绘、音乐、存档、自由对话 | `@ljwei-stak/dsh-galgame@0.1.0` | Gal 模块 |
15
15
  | 两者都要 | 分别安装上面两个包 | 模型路由 + Gal 模块 |
16
16
 
@@ -24,7 +24,7 @@
24
24
  2. 在“包名、GitHub 仓库地址或本地目录路径”输入框填一个完整包名,例如:
25
25
 
26
26
  ```text
27
- @ljwei-stak/dsh-model-router@0.15.0
27
+ @ljwei-stak/dsh-model-router@0.16.0
28
28
  ```
29
29
 
30
30
  只想安装 GAL 时填写:
@@ -40,7 +40,7 @@
40
40
  ```
41
41
 
42
42
  4. 核对预览的包名、版本和宿主兼容信息,安装并启用。完全退出 Harness(包括托盘进程)再启动,确保 Host 加载新代码。
43
- 5. 检查插件详情与侧边栏:路由应为 **0.15.0 / 模型路由**;GAL 应为 **0.1.0 / Gal 模块**。仅装路由时没有 GAL 入口是预期行为。
43
+ 5. 检查插件详情与侧边栏:路由应为 **0.16.0 / 模型路由**;GAL 应为 **0.1.0 / Gal 模块**。仅装路由时没有 GAL 入口是预期行为。
44
44
 
45
45
  普通用户无需 `npm install -g`,该命令不会把插件注册到当前 Harness profile。
46
46
 
@@ -48,13 +48,13 @@
48
48
 
49
49
  进入对应 Release 下载 `.tgz`:
50
50
 
51
- - [模型路由 Releases](https://github.com/Alice-Marx/dsh-model-router/releases)(也可运行 `npm pack @ljwei-stak/dsh-model-router@0.15.0` 获取同一安装包)
51
+ - [模型路由 Releases](https://github.com/Alice-Marx/dsh-model-router/releases)(也可运行 `npm pack @ljwei-stak/dsh-model-router@0.16.0` 获取同一安装包)
52
52
  - [独立 GAL v0.1.0](https://github.com/Alice-Marx/deepseek-harness-galgame/releases/tag/v0.1.0)
53
53
 
54
54
  在“添加插件”填写下载文件的**绝对路径**,例如:
55
55
 
56
56
  ```text
57
- D:\Plugins\ljwei-stak-dsh-model-router-0.15.0.tgz
57
+ D:\Plugins\ljwei-stak-dsh-model-router-0.16.0.tgz
58
58
  ```
59
59
 
60
60
  ```text
@@ -64,7 +64,7 @@ D:\Plugins\ljwei-stak-dsh-galgame-0.1.0.tgz
64
64
  如附有 `.sha256` 文件,用 PowerShell 计算并比较摘要:
65
65
 
66
66
  ```powershell
67
- Get-FileHash -Algorithm SHA256 -LiteralPath 'D:\Plugins\ljwei-stak-dsh-model-router-0.15.0.tgz'
67
+ Get-FileHash -Algorithm SHA256 -LiteralPath 'D:\Plugins\ljwei-stak-dsh-model-router-0.16.0.tgz'
68
68
  Get-FileHash -Algorithm SHA256 -LiteralPath 'D:\Plugins\ljwei-stak-dsh-galgame-0.1.0.tgz'
69
69
  ```
70
70
 
@@ -74,7 +74,7 @@ Get-FileHash -Algorithm SHA256 -LiteralPath 'D:\Plugins\ljwei-stak-dsh-galgame-0
74
74
 
75
75
  1. 在旧合并插件的 GAL 播放器导出需要保留的剧情进度,并备份整个 Harness profile。每份 JSON 仅保存**当前剧情状态**,不含所有手动槽、设置、已读记录或本地音乐;重要槽位可依次读档再导出。
76
76
  2. 在**同一个 profile**安装独立 `@ljwei-stak/dsh-galgame@0.1.0`。
77
- 3. 0.13.0 起包名改为 `@ljwei-stak/dsh-model-router`(旧包名最后版本为 0.13.0,内容相同,之后不再更新):在插件管理器卸载原 `@ljwei-stak/model-router-galgame`(保留 profile 与应用数据),再添加 `@ljwei-stak/dsh-model-router@0.15.0`。不要两个同时安装(条目 id 与工具名相同);条目 id 未变,路由设置与执行记录会保留。完成两项更新后再玩剧情,避免同时操作旧合并入口和新入口。
77
+ 3. 0.13.0 起包名改为 `@ljwei-stak/dsh-model-router`(旧包名最后版本为 0.13.0,内容相同,之后不再更新):在插件管理器卸载原 `@ljwei-stak/model-router-galgame`(保留 profile 与应用数据),再添加 `@ljwei-stak/dsh-model-router@0.16.0`。不要两个同时安装(条目 id 与工具名相同);条目 id 未变,路由设置与执行记录会保留。完成两项更新后再玩剧情,避免同时操作旧合并入口和新入口。
78
78
  4. 现在路由与 GAL 各有一个入口。独立 GAL 沿用旧存档 localStorage 键,核对当前进度和三槽;更换 profile 或进度未恢复时,先切换到匹配剧目,再导入 JSON 备份。
79
79
  5. 后续分别更新需要的插件;只用路由可以不启用或不安装 GAL。保留 profile 与应用数据,卸载插件时不要清理故事数据。
80
80
 
@@ -82,19 +82,23 @@ GAL 核心只包含**《回声之城·正篇》**与**《旧城迁移篇:未
82
82
 
83
83
  ## 5. 模型路由第一次使用
84
84
 
85
- 0.15.0 工作台分成**任务与执行、模型配置、官方工具、预算与安全**四页。切换页面保留安装任务、终端会话和未完成的输入。
85
+ 工作台自 0.15.0 起分成**任务与执行、模型配置、官方工具、预算与安全**四页;0.16.0 沿用该布局。切换页面保留安装任务、终端会话和未完成的输入。
86
86
 
87
87
  1. 在 Harness 官方**模型**页配置供应商、模型与凭据。插件读取准确的 `provider/model` 目录,模型档案不保存 API Key。
88
- 2. 在**模型配置**刷新目录,逐条填写自报质量评分、核对过的输入/输出单价(USD / 百万 token)和擅长方向;缺价留空。可选 `cliModel` 必须是该厂商 CLI 已验证接受的名字。
88
+ 2. 在**模型配置**刷新目录,逐条填写自报质量评分、核对过的输入/输出单价(USD / 百万 token)和擅长方向;缺价留空。可选 `cliModel` 必须是该厂商 CLI 已验证接受的名字。可选 LiveBench 名称须准确对应版本与推理档位;它是用户确认的映射,不自动证明实际执行档位。
89
89
  3. 在**任务与执行 → 任务规划**输入目标、步骤和验收标准。单任务推荐一条路线,团队模式为足够复杂的任务拆依赖工作包,指定模型跳过其他路线比较。预算是本地估价目标,`0` 表示不设本次估价约束,不限制厂商账单。
90
- 4. 点**生成路由建议**。建议直接显示在规划之后;生成建议在本机完成,不启动模型或 CLI。
90
+ 4. 点**生成路由建议**。建议直接显示在规划之后;规划计算在本机完成,不启动模型或 CLI。若已明确启用动态公开数据,读取账本/规划时可按检查间隔请求公开源,但不会把任务或反馈发送给这些源。
91
91
  5. 需要真实只读执行时,使用**在工作台执行**,填写存在的工作区绝对路径(留空沿用上次运行)。先**预览执行计划**、核对路线/费用和全部确认原因,再明确确认执行。宿主启动前会重查;确认后才发生真实调用,结果写入执行记录。
92
92
  6. 在**官方工具**检测、安装/更新工具并核对入口与登录。ZCode 打开原厂安装窗口后仍需用户选择目录并完成安装,再体检。可信入口就绪不等于账号和模型有权限。
93
- 7. 在**预算与安全**查看每日/月度预算、订阅失败策略及可读/写边界。官方工具终端不经过 Harness 沙箱,继承用户登录环境,需单独确认启动。
93
+ 7. 在**预算与安全**查看每日/月度预算、订阅失败策略及可读/写边界;**持续反馈与本地偏好**可设置学习启停、半衰期、收缩强度和调整上限,**动态公共数据**需自行启用。官方工具终端不经过 Harness 沙箱,继承用户登录环境,需单独确认启动。
94
94
  8. 需要 CLI 修改文件时进入官方会话、选择工作区,明确请求 `model_router_tool_run` 或 `model_router_team_execute` 的 `workspace-write` 模式。可编辑托管执行要求干净 Git 仓库、宿主审批和进程沙箱。`model_router_execute` 用于只读路由执行,`model_router_consult` 用于模型 API 意见。
95
95
 
96
96
  完整教程见[工作台使用指南](docs/WORKBENCH_USER_GUIDE.zh.md);路线算法、订阅与数据保存说明见[README](README.zh.md)。
97
97
 
98
+ 在成功结果上点 👍 / 👎,再次点已选评价可撤回。评价按准确路线和任务类型形成时间衰减、向零收缩的**主观偏好效用**,默认最大幅度 ±0.04,可配置到不超过 ±0.1;不抬高客观能力分或公共质量门槛。模型复核不视作人工评价,模型侧评分工具需要用户审批;本版不发起付费探索。
99
+
100
+ 学习范围是同一个本地 **DSH_HOME** 共享的最近 **200 次运行**,不是多账号隔离或无限长期记忆。“从现在重新学习”只让旧结果不再参与学习,不删除执行记录和费用累计。动态价格只读取用户指定的公开、严格结构化、按官方文档策展的 USD/百万 token 固定费率快照;不是自动抓取所有厂商价目表,复杂阶梯/时段计费不能强行折成该格式。人工单价优先;公开数据默认关闭,详情见[动态数据与持续反馈说明](docs/ROUTING_ADAPTIVE_LEARNING.zh.md)。
101
+
98
102
  注册表包含 Kimi、Claude、Codex、MiniMax、MiMo、Grok、Gemini 和 ZCode。Claude、Codex、MiMo、Grok 支持单工具/团队只读或可编辑执行;Kimi、MiniMax、ZCode 仅支持获批的可编辑托管执行。Gemini 有路由无界面适配器,不进入单工具/团队托管执行器。详见[官方工具与托管模式](README.zh.md#官方工具与托管模式)。CLI 模型名可能不同于 Harness 目录;多数 CLI 不提供可核验的实际模型 ID,要看厂商记录与账单。
99
103
 
100
104
  安装使用固定官方 npm 包的 `@latest` 或 ZCode 签名安装器。希望 npm 工具安装在非 C 盘时,先按自己的空间规划配置全局前缀;Grok 数据目录与登录应使用一致的 `GROK_HOME`。MiniMax Windows 原生依赖失败时,从固定官方 HTTPS 来源下载最新版安装脚本,仅检查大小和基本内容结构后原样执行,**没有锁定该安装脚本的哈希**。安装后的 MiniMax CLI 代码另按已安装版本的官方 npm tarball 摘要核验。MiMo/Grok 同样使用官方 npm 内容证明;适用的 Claude/Codex/ZCode Windows 入口验证发布者签名,ZCode 内置脚本还有每个签名构建的首次信任摘要检查。具体规则见[执行器](.dsh-plugin/shared/official-tool-executor.mjs)和[npm 内容核验](.dsh-plugin/shared/npm-attestation.mjs)。
@@ -110,20 +114,22 @@ GAL 核心只包含**《回声之城·正篇》**与**《旧城迁移篇:未
110
114
  | 检查 | 预期 |
111
115
  | --- | --- |
112
116
  | 宿主版本 | 0.2.0-rc.1 或 0.2.0-rc.2;包括 `rc` 后缀。 |
113
- | 路由独立安装 | 0.15.0 详情、模型路由入口、目录和模型档案可用;不出现旧合并 GAL 入口。 |
117
+ | 路由独立安装 | 0.16.0 详情、模型路由入口、目录和模型档案可用;不出现旧合并 GAL 入口。 |
114
118
  | GAL 独立安装 | 0.1.0 详情、Gal 模块入口、标题与两部核心剧情可用;不要求安装路由。 |
115
119
  | 共同安装 | 两个入口各一份,路由工具和 GAL 播放器均能使用。 |
116
120
  | 存档迁移 | 同 profile 可读旧键;跨 profile 用匹配剧目 JSON 导入;旧篇目的数据不覆盖。 |
117
121
  | 本地规划 | 简单与复杂工作包分配可解释;价格未知保持未知;生成计划不调用模型。 |
118
122
  | 官方工具 | 探测、固定来源安装、修复、取消和日志可检查;登录另验。 |
119
123
  | 工作台只读执行 | 预览不启动模型,明确确认后执行;核对记录中的渠道、错误与费用。 |
124
+ | 持续反馈 | 点赞/不好/撤回后重新规划;调整只影响本地主观效用,停用与重置不抹除费用。 |
125
+ | 动态公开数据 | 默认关闭;自行启用后核对快照版本、校验时间及失败/过期状态;人工单价仍优先。 |
120
126
  | 可编辑执行 | 在干净测试仓库核对审批、隔离工作区、补丁整合、厂商实际模型与计费。 |
121
127
 
122
- 0.15.0 的自动测试验证为 220 项通过、3 项 Windows 平台跳过;组件 UI 预览检查使用模拟数据。本次验证未覆盖真实 CLI/账号调用或 Harness Desktop 端到端操作,上表中的安装后验收仍需在实际环境中完成。
128
+ 历史 0.15.0 的自动测试验证为 220 项通过、3 项 Windows 平台跳过;组件 UI 预览检查使用模拟数据。**0.16.0 的发布验证见[更新记录](CHANGELOG.md)**,不把模拟公开源/模型流和组件预览当作真实付费调用或 Harness Desktop 端到端验收;上表中的实际安装、账号和工作区检查仍需在使用环境中完成。
123
129
 
124
130
  ## 8. 开发者从完整源码构建
125
131
 
126
- 路由需要 Node.js **22.19+** 与 **pnpm 10.34.6**。从完整源码仓库根目录构建;复现 0.15.0 时检出对应发布标签,旧标签保留其当时内容。运行:
132
+ 路由需要 Node.js **22.19+** 与 **pnpm 10.34.6**。从完整源码仓库根目录构建;复现正式版 0.16.0 时检出对应发布标签。旧版(如 0.15.0)标签保留其当时内容。运行:
127
133
 
128
134
  ```powershell
129
135
  pnpm install --frozen-lockfile --strict-peer-dependencies
package/README.md CHANGED
@@ -1,13 +1,19 @@
1
1
  # Model Router · DeepSeek Harness Desktop
2
2
 
3
+ Version: **0.16.0**. See [routing research](docs/ROUTING_RESEARCH.zh.md), [mathematical derivation and experiments](docs/ROUTING_DERIVATION_EXPERIMENTS.zh.md), and the [LiveBench evidence audit and validation protocol](docs/ROUTING_LIVEBENCH_VALIDATION.zh.md). The latest public 2026-06-25 score/cost tables are aggregates; its paired question-quality/cost matrix has not been obtained, and no real routing gain is claimed.
4
+
3
5
  A cost-aware model-routing workbench for **DeepSeek Harness Desktop**. Describe a task, compare your configured models, inspect the plan, and explicitly choose when to execute it.
4
6
 
5
- Current version: **0.15.0** (`@ljwei-stak/dsh-model-router`). Its declared host compatibility is **DeepSeek Harness Desktop 0.2.0-rc.1 / 0.2.0-rc.2**. The router and [GAL](https://github.com/Alice-Marx/deepseek-harness-galgame) have been independent plugins since 0.12.0.
7
+ **0.16.0:** [dynamic data and adaptive feedback](docs/ROUTING_ADAPTIVE_LEARNING.zh.md) adds opt-in public benchmark/curated fixed-USD pricing refresh and task-specific, time-decayed, shrinkage-regularized subjective utility. Objective proxy quality floors remain separate. Public sources default off; preferences are shared within one local DSH_HOME and limited to the latest 200 runs. This is not a universal vendor-price scraper or evidence of real quality–cost gains.
8
+
9
+ Current version: **0.16.0** (`@ljwei-stak/dsh-model-router`). Its declared host compatibility is **DeepSeek Harness Desktop 0.2.0-rc.1 / 0.2.0-rc.2**. The router and [GAL](https://github.com/Alice-Marx/deepseek-harness-galgame) have been independent plugins since 0.12.0.
6
10
 
7
11
  **0.15.0 changes:** a four-tab workbench with routing advice directly below task planning, protection against stale execution previews, preserved spending totals across history pruning and retries, and a standalone mock UI preview for source development.
8
12
 
9
13
  [简体中文](README.zh.md) · [Workbench guide (Chinese)](docs/WORKBENCH_USER_GUIDE.zh.md) · [Installation guide (Chinese)](INSTALLATION_GUIDE.zh.md) · [Migration](MIGRATION.md) · [Changelog](CHANGELOG.md)
10
14
 
15
+ For self-testing, follow the [desktop acceptance and quality–cost experiment steps (Chinese)](docs/ROUTING_SELFTEST_STEPS.zh.md). Start with an 18-question, three-model pilot and an explicit spending limit. Offline helpers do not collect answers or call models; first-stage selection replay is distinct from end-to-end team execution.
16
+
11
17
  ## What is included
12
18
 
13
19
  | Capability | Current behavior |
@@ -32,16 +38,16 @@ Generating a route recommendation is local: it does not start a vendor CLI or ma
32
38
  Open **Plugins → Add plugin** and enter:
33
39
 
34
40
  ```text
35
- @ljwei-stak/dsh-model-router@0.15.0
41
+ @ljwei-stak/dsh-model-router@0.16.0
36
42
  ```
37
43
 
38
- Use the official HTTPS npm source `https://registry.npmjs.org/` when a mirror lacks that exact version. Enable the plugin, then fully quit Harness (including its tray process) and restart it. Plugin details should show **0.15.0** and the sidebar should contain **模型路由** (Model Router). A global `npm install -g` alone does not register a Desktop plugin.
44
+ Use the official HTTPS npm source `https://registry.npmjs.org/` when a mirror lacks that exact version. Enable the plugin, then fully quit Harness (including its tray process) and restart it. Plugin details should show **0.16.0** and the sidebar should contain **模型路由** (Model Router). A global `npm install -g` alone does not register a Desktop plugin.
39
45
 
40
46
  You can instead install a local `.tgz` archive or its extracted inner `package` directory through the plugin manager. Both must contain `package.json` and `.dsh-plugin`. See [releases](https://github.com/Alice-Marx/dsh-model-router/releases) for archived builds, or build your own checkout below.
41
47
 
42
48
  ### Upgrade from the old package name
43
49
 
44
- The old name `@ljwei-stak/model-router-galgame` ended at 0.13.0. Remove that plugin entry while retaining your profile/application data, then add `@ljwei-stak/dsh-model-router@0.15.0`. Do not keep both entries installed: they share the internal plugin id `model-router-galgame` and tool names. The retained id lets existing router settings and history carry over.
50
+ The old name `@ljwei-stak/model-router-galgame` ended at 0.13.0. Remove that plugin entry while retaining your profile/application data, then add `@ljwei-stak/dsh-model-router@0.16.0`. Do not keep both entries installed: they share the internal plugin id `model-router-galgame` and tool names. The retained id lets existing router settings and history carry over.
45
51
 
46
52
  For the combined 0.11.x package, back up the profile and export the GAL saves you want to preserve before upgrading. Story playback, artwork, music and saves now belong to the independent `@ljwei-stak/dsh-galgame` package. The detailed save limitations are in [MIGRATION.md](MIGRATION.md).
47
53
 
@@ -155,7 +161,7 @@ The plugin does not persist terminal input/output. It stores session metadata on
155
161
  - **Subscription-first:** the default is to prefer a detected CLI account subscription or a configured coding-plan route. API-key environment variables are removed for CLI subscription attempts. `billing` can be `subscription-first`, `api-only` or `subscription-only`; `subscription` can be `cli-login`, `plan-key` or `none`.
156
162
  - **Fallback:** detected quota exhaustion/rate limits mark a subscription in cooldown and can retry the routed step on its configured API route, subject to policy and availability. Other attempted subscription failures pause by default (`onSubscriptionFailure: "ask"`): choose API retry, subscription retry or cancel in history. Managed editable/single-tool/team runs do not automatically retry on the API.
157
163
  - **Accounting:** API costs count toward budgets. Subscription runs display an API-price reference cost separately. Actual usage is taken from CLI-reported amounts or token usage and supplied prices when available; provider bills remain authoritative. Version 0.15.0 retains spending from evicted detailed runs and replaced retry results, so trimming history or retrying a step does not erase earlier charges. Costs already discarded by older versions cannot be reconstructed.
158
- - **Quality:** optional `off`/`sample`/`always` stronger-model review can add paid calls. User ratings apply a small bounded adjustment (at most ±0.04 on the normalized quality score) to future routing for that exact route.
164
+ - **Quality and preference:** optional `off`/`sample`/`always` stronger-model review can add paid calls; it is not treated as human feedback. Explicit ratings adjust separate subjective utility for the exact route and task type, using time decay and low-sample shrinkage (default limit ±0.04, configurable up to ±0.1). They do not change objective quality scores or their hard floors; learning can be disabled, ratings withdrawn, or its starting point reset.
159
165
 
160
166
  Coding-plan keys and endpoints stay in Harness provider settings. A `plan-key` profile may name an exact configured `apiRoute` as its fallback; the profile editor does not accept credentials or arbitrary commands. Vendor plan eligibility and terms must be checked with the vendor.
161
167
 
@@ -174,7 +180,7 @@ The implementations are [router.mjs](.dsh-plugin/shared/router.mjs), [harness-pl
174
180
 
175
181
  ## Data and privacy
176
182
 
177
- Router profiles/preferences are held in the Harness plugin settings. Runtime state is stored in `<DSH_HOME>/model-router/state.json` (default `~/.dsh/model-router/state.json`): health/onboarding, subscription cooldown, ratings, up to 200 recent runs and 50 terminal metadata records.
183
+ Router profiles/preferences are held in the Harness plugin settings. Runtime state is stored in `<DSH_HOME>/model-router/state.json` (default `~/.dsh/model-router/state.json`): health/onboarding, subscription cooldown, ratings, up to 200 recent runs, 50 terminal metadata records and opt-in public data snapshots. Applied rates and data/feedback policy versions are frozen in run records. Preferences are local to that shared DSH_HOME, not authenticated per-user accounts; public data requests do not upload tasks or feedback.
178
184
 
179
185
  Version 0.15.0 also retains bounded spending aggregates for up to 90 populated calendar dates and 24 months. These contain amounts/counts, not task or response content.
180
186
 
package/README.zh.md CHANGED
@@ -1,13 +1,19 @@
1
1
  # Model Router · DeepSeek Harness 模型路由插件
2
2
 
3
+ 版本:**0.16.0**。选模求解器概览见[路由研究说明](docs/ROUTING_RESEARCH.zh.md);公式、条件证明与实验见[数学推导与实验记录](docs/ROUTING_DERIVATION_EXPERIMENTS.zh.md)。[LiveBench 最新证据与验证协议](docs/ROUTING_LIVEBENCH_VALIDATION.zh.md)已核查 2026-06-25 聚合评分/费用;最新逐题质量—费用矩阵尚未取得,不声称真实路由收益。
4
+
3
5
  为 **DeepSeek Harness Desktop** 提供任务规划、成本感知的模型分配和官方工具执行工作台。输入任务,比较已配置模型,审阅计划,再明确选择是否执行。
4
6
 
5
- 当前版本为 **0.15.0**,包名为 `@ljwei-stak/dsh-model-router`;声明兼容的宿主为 **DeepSeek Harness Desktop 0.2.0-rc.1 / 0.2.0-rc.2**。自 0.12.0 起,路由与 [GAL](https://github.com/Alice-Marx/deepseek-harness-galgame) 已拆成两个独立插件。
7
+ **0.16.0 新增**:[动态数据与持续反馈](docs/ROUTING_ADAPTIVE_LEARNING.zh.md):可选公开价格/LiveBench快照刷新;按任务类型、时间衰减和低样本收缩调整个人偏好,质量门槛独立保留。设置在“预算与安全”,公开源默认关闭;价格源需提供按官方文档核对的固定USD单价JSON,不是通用官网抓价器。本地DSH_HOME共享、最近200运行窗口,暂无真实收益证明。
8
+
9
+ 当前版本为 **0.16.0**,包名为 `@ljwei-stak/dsh-model-router`;声明兼容的宿主为 **DeepSeek Harness Desktop 0.2.0-rc.1 / 0.2.0-rc.2**。自 0.12.0 起,路由与 [GAL](https://github.com/Alice-Marx/deepseek-harness-galgame) 已拆成两个独立插件。
6
10
 
7
11
  **0.15.0 更新**:工作台分为四页,路由建议紧接任务规划展示;执行输入变化时丢弃旧预览;裁剪历史或重试后仍保留费用累计;源码开发新增独立模拟 UI 预览。
8
12
 
9
13
  [English](README.md) · [工作台完整指南](docs/WORKBENCH_USER_GUIDE.zh.md) · [安装与验证](INSTALLATION_GUIDE.zh.md) · [迁移说明](MIGRATION.md) · [更新记录](CHANGELOG.md)
10
14
 
15
+ 需要自行实测时,按[安装验收与质量—成本实验步骤](docs/ROUTING_SELFTEST_STEPS.zh.md)先完成桌面检查和 18 题×3 模型小样,再决定正式样本与费用上限。方案区分首包选模投影和实际团队执行;配套离线入口不采集、不调用模型,真实收益仍待验证。
16
+
11
17
  ## 当前功能
12
18
 
13
19
  | 功能 | 实际行为 |
@@ -32,16 +38,16 @@
32
38
  打开 **插件 → 添加插件**,填写:
33
39
 
34
40
  ```text
35
- @ljwei-stak/dsh-model-router@0.15.0
41
+ @ljwei-stak/dsh-model-router@0.16.0
36
42
  ```
37
43
 
38
- 镜像缺少该精确版本时使用官方 HTTPS npm 源 `https://registry.npmjs.org/`。安装并启用后,完全退出 Harness(包括托盘进程)再启动。插件详情应显示 **0.15.0**,侧栏出现**模型路由**。仅运行全局 `npm install -g` 不会把插件注册到桌面版 profile。
44
+ 镜像缺少该精确版本时使用官方 HTTPS npm 源 `https://registry.npmjs.org/`。安装并启用后,完全退出 Harness(包括托盘进程)再启动。插件详情应显示 **0.16.0**,侧栏出现**模型路由**。仅运行全局 `npm install -g` 不会把插件注册到桌面版 profile。
39
45
 
40
46
  也可在插件管理器填写本地 `.tgz` 文件的绝对路径,或解压后的内层 `package` 目录;其中应包含 `package.json` 与 `.dsh-plugin`。[历史发布页](https://github.com/Alice-Marx/dsh-model-router/releases)提供归档;已克隆源码的开发方式见下文。
41
47
 
42
48
  ### 从旧包名升级
43
49
 
44
- `@ljwei-stak/model-router-galgame` 的最后版本为 0.13.0。保留 profile 与应用数据,移除旧插件条目,再添加 `@ljwei-stak/dsh-model-router@0.15.0`。不要同时安装两个包:它们共用内部插件 id `model-router-galgame` 与工具名;id 保留使已有路由设置和执行历史能够延续。
50
+ `@ljwei-stak/model-router-galgame` 的最后版本为 0.13.0。保留 profile 与应用数据,移除旧插件条目,再添加 `@ljwei-stak/dsh-model-router@0.16.0`。不要同时安装两个包:它们共用内部插件 id `model-router-galgame` 与工具名;id 保留使已有路由设置和执行历史能够延续。
45
51
 
46
52
  从 0.11.x 合并版迁移时,先备份 profile 并导出希望保留的 GAL 进度。剧情、立绘、音乐、自由模式和存档属于独立 `@ljwei-stak/dsh-galgame` 插件。导出范围及同 profile 迁移的限制见 [MIGRATION.md](MIGRATION.md)。
47
53
 
@@ -155,7 +161,7 @@ CLI 团队是插件自有的顺序依赖执行器。Harness 内建 Agent Teams
155
161
  - **订阅优先**:默认先使用检测到的 CLI 订阅账号或配置的编程套餐路线。尝试 CLI 订阅时去掉 API Key 环境变量。`billing` 可设 `subscription-first`、`api-only`、`subscription-only`;`subscription` 可设 `cli-login`、`plan-key`、`none`。
156
162
  - **回退**:识别到额度用尽/限流后,将订阅标记为冷却,并可按策略及可用性用已配置 API 路线重试该路由步骤。其他已尝试的订阅失败默认暂停(`onSubscriptionFailure: "ask"`),在历史中选择 API 重试、重试订阅或取消。单工具/团队托管执行不会自动转 API 重试。
157
163
  - **核算**:API 费用计入预算;订阅单独展示按 API 单价折算的参考费用。实际用量可来自 CLI 自报金额,或 token 用量乘你提供的单价;真实消费以厂商账单为准。0.15.0 保留被裁剪历史和被重试结果替换的费用累计,避免重跑或清理详细历史抹掉此前消费;旧版本已经丢弃的费用无法反推恢复。
158
- - **质量**:强模型复核可设 `off`、`sample`、`always`,会增加真实调用。用户评价对准确路线的后续质量分作小幅调整,归一化分数最多 ±0.04。
164
+ - **质量与偏好**:强模型复核可设 `off`、`sample`、`always`,会增加真实调用,但不作为人工反馈。明确评价按准确路线和任务类型,以时间衰减及低样本收缩调整独立主观效用(默认上限 ±0.04,可配置至 ±0.1);不修改客观质量分或质量硬门槛。可停用学习、撤回评价或重置学习起点。
159
165
 
160
166
  编程套餐 Key 与端点留在 Harness 官方供应商设置里。`plan-key` 档案可指定一个准确、已登记的 `apiRoute` 作为回退;模型档案不接收凭据或任意命令。套餐资格及使用条款须向厂商核对。
161
167
 
@@ -174,7 +180,7 @@ CLI 团队是插件自有的顺序依赖执行器。Harness 内建 Agent Teams
174
180
 
175
181
  ## 数据保存与隐私
176
182
 
177
- 模型档案和偏好保存在 Harness 插件设置中。运行状态位于 `<DSH_HOME>/model-router/state.json`,默认 `~/.dsh/model-router/state.json`;包括体检/引导、订阅冷却、评价、最多 200 条近期运行和 50 条终端元数据。
183
+ 模型档案和偏好保存在 Harness 插件设置中。运行状态位于 `<DSH_HOME>/model-router/state.json`,默认 `~/.dsh/model-router/state.json`;包括体检/引导、订阅冷却、评价、最多 200 条近期运行、50 条终端元数据与可选公开数据快照。运行记录冻结当时费率及数据/反馈策略版本。偏好在该本地DSH_HOME共享,不是经认证的账号隔离;公开数据请求不上传任务或反馈。
178
184
 
179
185
  0.15.0 还保存最多 90 个有记录的日期和 24 个月的费用汇总,仅包含金额/次数,不包含任务或回答内容。
180
186
 
@@ -0,0 +1,151 @@
1
+ # 动态数据与持续反馈:模型路由的推导、实现和实验
2
+
3
+ 研究日期:2026-10-04。原实验对象:源码开发版 `0.16.0-dev.1`。该实现随正式版 `0.16.0`(2026-10-05)发布,原实验时间与合成结果保留,不将正式发布视为真实收益验证。
4
+
5
+ 本轮已把动态数据和主观反馈接入 Host 与工作台,而不是只提出研究方案。验证使用真实规划器、合成反馈和模拟公开源,未读取用户历史、调用付费模型或证明真实质量—成本收益。此前的 [静态推导与 LiveBench 先验实验](ROUTING_DERIVATION_EXPERIMENTS.zh.md) 保留为冻结的历史研究;本篇记录新增闭环。
6
+
7
+ ## 1 为什么要拆成三层
8
+
9
+ | 数据层 | 更新来源 | 影响什么 | 不代表什么 |
10
+ | --- | --- | --- | --- |
11
+ | 公共价格 | 用户选择的公开、按官方文档核对的 JSON 快照 | 下一次规划费用;当次 usage 计费估算 | 已自动抓取所有厂商官网、账号实际账单 |
12
+ | 公共能力 | LiveBench 官方发布或明确比例的 JSON 镜像 | 任务类别能力先验、原有代理质量门槛 | 特定查询答对概率、用户个人满意度 |
13
+ | 本地偏好 | 对真实记录结果的有用/不好/撤回 | 独立、有限幅度的偏好效用 | 模型客观能力变强、未选模型的成绩 |
14
+
15
+ 旧实现把人工点赞和模型复核混入全局质量偏置。本轮生产路径不再使用该标量:模型复核保留展示和费用记录,只接受明确主观评价作为个人学习输入。旧的纯函数接口仍为程序调用兼容保留,不能据此判断当前 Host 使用旧机制。
16
+
17
+ 非平稳环境需要允许政策随分布变化;相关上下文 bandit 研究提供了更强的检测和遗憾界。但本轮只采用有边界的时间折扣偏好估计,没有复现这些算法,也不继承其收敛保证。[Luo 等,2018](https://www.microsoft.com/en-us/research/publication/efficient-contextual-bandits-non-stationary-worlds/)
18
+
19
+ ## 2 主观偏好估计的推导
20
+
21
+ 设某个本地工作室中,准确 `provider/model` 和任务类别 `d` 的有效结果集合为 \(I_{m,d}\)。人工评价 \(r_i\in\{-1,+1\}\),不评价或撤回不产生样本。完成时间为 \(t_i\),当前时间为 \(t\),半衰期为 \(H\):
22
+
23
+ \[
24
+ w_i(t)=2^{-(t-t_i)/H},\qquad t_i\le t.
25
+ \]
26
+
27
+ 以零偏好为收缩中心,求解加权、正则化的平方损失:
28
+
29
+ \[
30
+ \widehat\theta_{m,d}(t)
31
+ =\arg\min_\theta\left\{\kappa\theta^2+
32
+ \sum_{i\in I_{m,d}}w_i(t)(r_i-\theta)^2\right\}.
33
+ \]
34
+
35
+ 令导数为零;\(\kappa>0\) 保证唯一解:
36
+
37
+ \[
38
+ \widehat\theta_{m,d}(t)
39
+ =\frac{\sum_iw_ir_i}{\kappa+\sum_iw_i},\qquad
40
+ b_{m,d}(t)=B\widehat\theta_{m,d}(t).
41
+ \]
42
+
43
+ 实现还显式截断到 \([-B,B]\) 作数值保护。由于 \(|r_i|\le1\),
44
+
45
+ \[
46
+ |b_{m,d}(t)|\le B\frac{\sum_iw_i}{\kappa+\sum_iw_i}\le B.
47
+ \]
48
+
49
+ 默认 \(H=30\) 天、\(\kappa=3\)、\(B=0.04\)。一条刚完成的好评只给 \(0.01\) 的效用调整;同域20条新好评为约 \(0.0348\)。半衰期让**样本权重**减半,不让收缩后的偏置恰好减半,因为分母也会变化。持续无新证据时,偏好逐渐回到零。
50
+
51
+ 有限证据且 \(B>0\) 时上界严格小于 \(B\);允许设置 \(B=0\),此时偏好项恒为零。
52
+
53
+ 这不是概率校准,也不是把人工评分减去 LiveBench 分数的“质量残差”。\(r_i\) 衡量有用与否,\(b\) 的单位是现有归一化规划效用;\(B\) 是工程影响上限,需要后续独立数据选择,不是理论最优参数。
54
+
55
+ 实现每次从最近200条运行重算,不仅更新累积计数,因此同一 `runId/packageId` 的改评不会重复加样本,撤回立即移除证据,重跑替换结果后清除旧评分。它是有界滑动窗口,不是无限长期记忆;费用累计的既有保留机制与学习窗口分离。
56
+
57
+ ## 3 如何进入现有分配目标
58
+
59
+ 原有任务代理效用记为 \(U^0_j(m;t)\),包括能力、当期费用、延迟、专长、推理适配、风险和质量短缺惩罚。本轮使用:
60
+
61
+ \[
62
+ U_j(m;t)=U^0_j(m;t)+b_{m,d_j}(t).
63
+ \]
64
+
65
+ 组合求解器继续最大化工作包总效用减去交接惩罚,并执行原有预算与代理质量约束。关键区别是:
66
+
67
+ \[
68
+ q_{m,d_j}(t)\ge\tau_j
69
+ \]
70
+
71
+ 中的 \(q\) **不加入** \(b\)。好评不能把不满足质量门槛的模型抬进可行池,也不能把 unknown/catalog-heuristic 改标为 LiveBench 证据。若整个池都不满足门槛,原有放宽分支仍会明确 `constraintRelaxed`;这不等于偏好绕过门槛。
72
+
73
+ 固定候选下新增有界可加项,不改变 exact/beam 的工程范围。Pareto 剪枝仍必须同时保持实际效用,不能只比较名义质量与费用;含依赖交接的局部剪枝仍关闭。有关条件保证见主推导报告。
74
+
75
+ ## 4 数据刷新、版本与历史费用
76
+
77
+ 用户在“预算与安全 → 动态公共数据”启用公开源后,打开/刷新账本、生成建议及 Host 规划/执行前按 TTL 检查。默认关闭;默认检查间隔24小时。失败重试间隔为 `min(TTL, 5分钟)`。没有后台定时任务,不使用时不会自行联网,也不为学习额外调用模型。
78
+
79
+ 更新流程为“公开地址校验 → 跨进程请求预留 → 有界下载 → 整包验证 → 原子保存”。同进程请求合并,晚到回包不能覆盖另一个请求的更新。每份快照记录来源、核验日、发布日期、版本及 SHA-256 内容身份;刷新失败保留最后有效快照并显示过期/失败状态。清空一个源会立即停止使用该源,但保留磁盘最后有效副本以便恢复。
80
+
81
+ LiveBench 官方发布日不允许倒退。没有发布日期的镜像只能获得内容身份,不能证明其时间顺序。官方 CSV 固定按0–100解释;动态自定义镜像必须是 JSON 且声明 `scoreScale: 1` 或 `100`,拒绝超范围数据和模型规范化碰撞,不把百分制1分当满分。旧的非动态 CSV/JSON 适配调用保留兼容格式,不等于动态入口放宽验证。
82
+
83
+ LiveBench 动态快照按完整原始名称匹配,不猜 API 别名。模型配置新增 `benchmarkModel`:仅在确认版本及测量设置一致后填写榜单中的准确名称。它是用户声明,不是执行证据,不能将 max 档评分当作 low 档的实测。当前还没有完成 `(model, effort)` 联合执行验证,真实验证仍应固定实际模型/档位。
84
+
85
+ 任务类别映射是启发式先验:普通 Coding 映射 code,Agentic Coding 不覆盖它;Data Analysis→research、Language→writing、IF→summarization。缺少类别时遵循现有显式/派生 overall 的证据规则,不能把这种映射叫特定查询校准。
86
+
87
+ 价格快照只支持准确路线、USD/百万token的固定输入/输出和可选缓存费率,人工填写的价格优先。每路 `asOf` 不允许倒退,重复路线、币种/单位错误或复杂阶梯字段使整包更新失败。**这是按官方文档策展的数据接口,不是通用官网自动抓价服务**;填写 `sourceUrl` 也不会自动认证其内容。阶梯、时段、长上下文、TTL、Batch、音视频等复杂计费不能强塞成统一单价;需另加对应厂商适配器或按原实验协议计算。
88
+
89
+ 运行记录冻结当时使用的费率、来源、版本及模型数据/偏好策略版本;后续更新不重写旧费用。旧记录不补造来源。订阅参考费用与 API 预算仍分开,缺失 usage/价格保持未知;当次计费估算使用当前有效快照,过期快照也可能继续作为估算,不能承诺等于现行官网价或真实账单。
90
+
91
+ ## 5 反馈有效性、停用与范围
92
+
93
+ Host 用 `runId/packageId` 反查结果,客户端不能提供模型、任务域或用户ID来伪造学习事实。工作台反馈携带所见结果的 `expectedFinishedAt`;重跑后旧页面不能给新结果误评。Host 写入 `ratedAt`、策略版本和输入来源;衰减仍使用完成时间,反复点击旧答案不能刷新证据年龄。
94
+
95
+ 仅 `ran=true`、`ok=true` 的成功结果参与学习;等待、取消、未执行、失败和不合法时间不自动当差评。CLI 未明确报告相同实际模型时不训练推荐模型。缺少执行标记、结果ID或可用时间的旧记录不猜测;缺少type按general,缺少ratedAt沿用完成时间,不要求旧记录已有策略/来源标签。模型可调用的评价工具要求 Host 审批,Agent 不得自动自评;来源标签仅作审计,不是独立人类身份认证。
96
+
97
+ 可停用学习,设置半衰期/收缩/上限,或“从现在重新学习”。重置仅排除在起点及之前完成的结果,不删除运行、评分展示或费用。模型别名后台换版无法从相同字符串自动检测,需固定版本ID或人工重置。
98
+
99
+ 范围为本地 `DSH_HOME` 工作室,不是可信多租户账号隔离。不同用户应使用独立 DSH_HOME;同目录用户共享记录和偏好。未实现账号权限、跨设备同步或无限长期用户画像。
100
+
101
+ ## 6 已开展的实验与复现
102
+
103
+ 入口:
104
+
105
+ ```powershell
106
+ node scripts/adaptive-routing-study.mjs --out docs/experiments/20261004-adaptive-routing/adaptive-study.json
107
+ node --test tests/adaptive-*.test.mjs tests/dynamic-data.test.mjs
108
+ npm run build:client
109
+ npm test
110
+ npm run check:client
111
+ ```
112
+
113
+ 固定时钟及虚拟 A/B 路线,调用真实 `buildPlan`、`createPlanFromRoutes`、反馈函数及费用记录函数。结果文件:[adaptive-study.json](experiments/20261004-adaptive-routing/adaptive-study.json)。全部标签、能力分、价格和 usage 都是合成,不是最新 LiveBench 逐题数据或真实用户结果。
114
+
115
+ | 实验 | 控制与操作 | 观测 |
116
+ | --- | --- | --- |
117
+ | 正常使用反馈流 | 36轮,只给当轮选中模型合成评价 | 首轮A差评后下一轮B,最终35次B好评;B效用调整约0.03684,能力分始终0.90 |
118
+ | 偏好漂移 | 180天前40条A好评,一小时前4条A差评 | 30天半衰期有效权重约4.621,选B;3650天控制约42.656,仍选A |
119
+ | 价格版本变化 | 只改变假设价:A每百万0.1→5,B保持2 | 同一质量与任务下A→B;不是费用节省百分比实验 |
120
+ | 基准版本变化 | 切换合成 LiveBench-shaped 分数 | 同一费用与任务下A→B;不是实际榜单新旧收益 |
121
+ | 门槛保护 | A能力0.65,200次好评,调整上限0.1 | 仍选达到0.78门槛的B;客观分不被改写 |
122
+ | 撤回与重置 | 从已学习状态移除证据/设置起点 | 恢复未个性化选择;合成记录费用约0.02592美元不变 |
123
+
124
+ 以上9个机制检查全部通过。独立集成测试另外验证 Host 真实开启数据刷新、同一快照 Client/Host 投影一致、人工价优先、清空源不误用缓存、费用版本冻结、旧时间戳拒评,以及20条按域反馈改变选模而不改变客观评分。测试使用独立临时 DSH_HOME、内存公开源和模拟模型流。
125
+
126
+ 浏览器核验只操作内存演示页:参数保存、学习停用、反馈/撤回及重新规划;不等价于真实 Harness Desktop 端到端验收。完整测试日志与源码哈希归档在本轮 exports 目录,历史实验文件不覆盖。
127
+
128
+ ## 7 尚未证明的收益与下一步真实实验
129
+
130
+ 只观察被选择模型的反馈,既有政策会决定可观测样本;不评价的用户也可能系统性不同,因此本轮估计的是已观测结果的偏好,不是所有任务总体满意率。没有随机探索及正概率覆盖,不能用这些日志无偏评估未选模型或宣称找到全局最优。[Li 等,2015](https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/paper-7.pdf)
131
+
132
+ 真实验证应沿用 [同题实验步骤](ROUTING_SELFTEST_STEPS.zh.md),补充时间顺序而非仅随机划分:
133
+
134
+ 1. 固定真实模型/版本/档位、官方计费函数、评价标准和费用上限;冻结数据快照与个人学习参数。
135
+ 2. 先采集训练/调整阶段的合法人工评价,再冻结策略;测试阶段评价不得回灌同一轮选择。
136
+ 3. 在时间外同题集比较“固定先验、仅动态价格、仅动态评分、仅反馈、三者合用”,预先规定非劣界与分组统计方法。
137
+ 4. 分别报告客观任务评分、个人满意度、真实 usage 成本、失败率、反馈覆盖率和策略/价格漂移;不把个人满意度改善替代客观质量非劣。
138
+ 5. 获得充分覆盖后才考虑用户明确同意、有预算约束的探索及 propensity 记录;本轮未实现,也不默认进行。
139
+
140
+ 因此已完成的是可持续更新的工程闭环、估计式推导和机制实验;真实质量—成本收益、最优参数、跨用户泛化以及实际推理档位验证仍未证明。
141
+
142
+ ## 8 实现索引
143
+
144
+ - `shared/adaptive-feedback.mjs`:显式反馈、去重、时间折扣、收缩、重置与独立偏好字段。
145
+ - `shared/dynamic-data.mjs` / `dynamic-data-view.mjs`:Host公开源刷新与浏览器安全投影。
146
+ - `shared/livebench.mjs` / `model-profiles.mjs`:严格动态适配与准确基准映射。
147
+ - `shared/router.mjs` / `harness-plan.mjs`:独立偏好效用、原有质量/预算约束与版本说明。
148
+ - Host `index.mjs`、`router-state.mjs`、`run-ledger.mjs`:持久快照、反馈绑定和历史费率。
149
+ - Client `catalog.mjs`、`router-main.jsx`、`router-insights.jsx`:同源规划、陈旧回包保护和设置界面。
150
+
151
+ 这些路径相对 `.dsh-plugin/`。2026-10-04研究阶段未推送、发布npm或变更用户现有设置;2026-10-05按用户要求将实现纳入正式版`0.16.0`,发布状态及安装方式见README/CHANGELOG。发布不自动修改用户现有设置或发起付费模型调用。