前言¶
在 DeepSeek Harness(DSH)里用 Our Free Model(OFM)跑长回答时,常见两类摩擦:输出碰到 token 上限被截断,需要反复手动发「继续」;多个免费模型路由共用一套默认参数,想给某个模型单独设思考档位、输出上限或温度,只能每次在对话里临时改。
dsh-ofm-addition 是 OFM 的附属插件:不改内核、零依赖、无构建步骤。它在截断时按策略自动续写,并为每个已配置的 OFM 路由维护独立的请求参数表。下面介绍它的定位、能力与安装用法。
这是什么¶
- 名称:
dsh-ofm-addition(npm 包名同) - 维护者:DeepseekDays
- 分类:模型推理
- 仓库:github.com/DeepseekDays/dsh-ofm-addition(当前版本 0.4.0,MIT)
- 社区目录:skillhub.cn/plugins/DeepseekDays/dsh-ofm-addition
插件不包装、不替换宿主服务,只监听事件并调用公开的 agent.followup();卸载后组合与未安装时一致。与 Our Free Model 本体独立安装、独立升级。
核心功能¶
截断自动续写¶
当模型因输出 token 上限结束(finish_reason = length,对应宿主 turn/end 中 reason.kind === 'max-tokens')时,插件在会话进入空闲后等待一小段时间(默认 0.35s),再次检查条件,然后发送续写提示(默认「继续」)。你在界面上看到的「已达到输出 token 上限…发送『继续』可让模型接着输出」提示,即由该能力接管发送。
流程概览:
模型输出到了上限
↓ turn/end { reason: { kind: 'max-tokens' } }
↓ 会话转为空闲(agent/status → idle)
↓ 等待一小段时间(默认 0.35s)
↓ 重新检查全部条件
↓ agent.followup("继续")
触发范围:默认开启「只对 Our Free Model 生效」,其它供应商的会话不续写、不折叠、不标注;关闭该选项后才使用 provider / 模型白名单(支持 * 通配)。正常结束、报错或你手动停止不会触发;停止会使本轮连续计数归零。
两道刹车(至少应保留一道):
| 机制 | 含义 | 配置要点 |
|---|---|---|
| 连续上限 | 同一次截断链已自动续写几次 | 不限 / 1 / 3 / 5 / 10 / 自定义,默认 3(0 表示不限,自 0.2.0 起;0.1.0 中 0 表示一次都不续) |
| 上下文保护 | 下一条请求的 prompt 是否逼近模型窗口 | 默认开,阈值默认可用窗口的 90% |
设为「不限」时,上下文保护是主要约束;两者都关时设置页会警告。保护使用 tokenMeter.measure() 与路由窗口比较;量不出时放行,若真的出现 CONTEXT_WINDOW_EXCEEDED 则停止续写并记录「上下文溢出,已停止」。等待窗口内你若打字、停止、排入新输入或切换模型,本次续写会取消。
每个 OFM 路由的请求参数¶
在 agent/request 组装完成、派发之前写入参数,下一次请求即生效,无需重启。仅修改你在参数表里配置过的 provider|model 路由;未配置的模型插件不碰任何字段。
每个模型可单独设置:
- 思考档位(须为该模型适配器声明过的档位)
- 输出上限(含「顶配 N」,N 为适配器报出的容量)
- 温度(0–2 或模型默认)
- 停止序列(一行一条,最多 8 条)
设置页提供 全部顶配、AI 智能填写(先预览再写入)、撤销上一次改动;可选「会话临时选择优先」,让模型选择器里的临时档位压过本页配置。
安装与启用¶
在插件仓库目录执行官方安装脚本(不跑 pnpm,零依赖):
node install.mjs # 安装 / 修复
node install.mjs --uninstall # 卸载(保留插件目录)
node install.mjs --dry # 只看要改什么
脚本会在 profile 的 node_modules/ 下建立目录联接、在 package.json 的 dependencies 写入 link:,并把 dsh-ofm-addition 加入 dsh.profile.bundles。
装完后须完全退出 DSH(含托盘)再启动,bundle 与浏览器模块表在启动期加载。
运行环境要求 Node:^22.19.0 || >=24.0.0(见 package.json 的 engines)。
设置与配置存储¶
DSH 设置里有两个分区:设置 → OFM 增强、设置 → OFM 模型参数。
- OFM 增强:自动续写总开关、连续上限、上下文保护、发送前等待、续写提示词(明确 / 简单 / 自定义);折叠自动续写、显示续写次数;生效范围与运行状态(含「立即续写」——无需先有截断,点击即发)。
- OFM 模型参数:逐模型表格与上述四个参数字段及恢复默认 / 移除规则。
持久化文件位于 $DSH_HOME(默认 ~/.dsh):
ofm-addition/settings.json— 设置页字段ofm-addition/stats.json— 计数与最近 60 条决策ofm-addition/params.json— 逐模型参数表
也可在 profile 的 cordis.patch.yml 里为插件 id ofm-addition 预置配置,例如:
- id: ofm-addition
name: dsh-ofm-addition
config:
maxContinuations: 0 # 0 = 不限
contextGuard: true
contextRatio: 0.9
providers: ['our-free-model*']
modelParams:
scope: ['our-free-model*']
entries:
'our-free-model|space-bunny-free':
enabled: true
effort: deep
maxTokens: 32768
temperature: null
stop: []
文件中的初始值优先;页面改过以页面为准。
典型用法¶
- 安装插件并重启 DSH,确认已启用 Our Free Model。
- 打开 OFM 增强:保持「只对 Our Free Model 生效」,按需设连续续写上限(长文档可配合上下文保护,慎用「不限」且关闭保护)。
- 打开 OFM 模型参数:为常用路由添加一行,设思考档位与
maxTokens;需要批量拉满时用「全部顶配」或「AI 智能填写」,在预览确认后写入。 - 发起对话;若回答因输出上限截断,插件会自动发「继续」。可在运行状态查看决策记录,或点「立即续写」手动补一刀。
离线自测(不需启动 DSH):
node --test test/model-params.test.mjs test/policy.test.mjs test/host.test.mjs test/client.test.mjs
完整测试套件见仓库 package.json 的 scripts.test(含 policy、host、ledger、client、transcript 等)。
适用场景与注意¶
适合:长期用 DSH + OFM 写长回答、多模型切换且希望参数「写一次、每次请求自带」的开发者。
注意:
- 插件以当前 DSH 进程权限运行;安装前请阅读仓库源码与 MIT 许可证,仅从可信来源获取。
- 自动续写只处理真实的输出上限截断,不能替代你对上下文长度的整体规划;
compaction-basic未挂载时,上下文保护更常起作用。 - 社区目录 SkillHub 与 DeepSeek / 幻方无官方从属关系,属 DSH 生态的独立收录站点。
结尾¶
dsh-ofm-addition 把 OFM 上「截断后手动继续」和「多模型共用默认参数」两件事做成可配置策略:续写有连续上限与上下文保护,参数表在请求链路上注入且只作用于你配置过的路由。需要细节与更新说明见 GitHub README,安装入口亦可从 SkillHub 目录页 跳转仓库。