前言¶
在 DeepSeek Harness (DSH) 的使用过程中,当你在不同模型之间切换会话时,系统的行为通常是:切换到新模型后,会自动应用该模型当前的默认推理努力级别。当你切回之前使用的模型时,之前设定的那个推理努力级别往往不会被保留,而是重置为新模型的默认值。
dsh-effort-memory 是一个 Host-only 插件,它的作用是记录每个 (provider, model) 路由上最后生效的推理努力级别,并在会话切回该模型时将其恢复。
插件简介¶
这是一个 DeepSeek Harness (DSH) 的外部插件,由开发者 cup113 维护。它不依赖任何客户端 UI 或 React 组件,完全运行在 DSH 的 Host 层。
该插件的核心功能是利用 DSH 的公共命令接口来重新发出模型选择,从而持久化推理努力级别的设置。
核心能力¶
- Host-only 实现:仅存在于 DSH 进程内部,不包含任何 UI 代码或客户端逻辑。
- 记忆与恢复:以
(provider, model)为键,记忆该路由最后生效的reasoningEffort。 - 自动恢复:当会话路由变更并切回该模型时,插件会通过
ctx.sessionController.selectModel重新发出选择,将之前保存的推理努力级别应用到当前会话中。 - 安全机制:
- Loop-safe:仅当路由实际变更且事件中的努力级别与记忆不同时才会触发,防止无限循环。
- Replay-safe:能够正确处理会话的构造函数种子(如恢复、分叉等场景),并检查序列号。
- 容错设计:
- 如果目标模型不再支持某个推理努力级别,会静默回退到模型的默认值,不抛出错误。
- 如果模型声明不支持推理能力,则不进行操作。
- 无重试机制,任何失败仅记录日志。
安装与启用¶
插件通过 DSH 的插件系统安装。安装后需要重启 DSH 进程以使配置生效。
dsh plugin --profile <name> add github:cup113/dsh-effort-memory
持久化与配置¶
插件的记忆功能依赖于 DSH 的存储域。
- 存储域:使用
effort_memory域,数据表名为efforts。 - 存储路径:在基础存储栈挂载的情况下,数据存储在
$DSH_HOME/storages/effort_memory.json,能够跨进程重启保留。 - 内存回退:如果上下文中缺少
ctx.storageDomain,插件会降级为进程本地的Map,并在应用时记录警告。这种状态在进程重启后会丢失。
适用场景与注意¶
- 适用场景:需要在多个模型间频繁切换,且希望保持特定模型在切换回来后保持相同推理努力级别的开发者。
- 全局记忆:记忆是全局的,所有会话和工作区共享同一个
(provider, model)的记忆条目。 - 限制:
- 插件会作用于所有活跃会话,包括子代理会话。
- 如果没有
sessionProjections,会话在重启后的第一次切换只能建立基准,无法恢复之前的记忆。 - 仅支持单进程可见,数据不会通过
domain/changed跨进程同步。
结语¶
dsh-effort-memory 通过极简的设计(仅一个核心命令接口),解决了 DSH 中模型切换导致推理努力级别丢失的痛点。它不写入配置文件,也不提供 UI 开关,而是通过代码层面的介入,确保了模型设置的连贯性。