前言¶
DeepSeek Harness(简称 dsh)是 DeepSeek 开源的 Agent 运行时,官方仓库的口号是 Everything is a Plugin(一切皆插件):模型、工具、会话、界面都可以在配置层替换,而不必改 Harness 核心源码。日常用它写代码、改配置、排查问题时,主模型往往直接给出可执行结果。结果能落地,但过程里用到的概念、取舍和常见误区,并不会自动留下来。过几天再开一个新会话,上一轮到底为什么那样改,通常已经散在各自的 transcript 里。
社区维护者 yuezengwu 做了一款工具与能力插件 dsh-explain,专门处理这件事。它不往主 Agent 里塞讲解,也不把学习记录绑死在某一个工作会话上,而是在本地维护一条跨会话的学习线程:工作还是原来的工作,值得学的内容另开一条私有通道。本文按社区目录页、GitHub 仓库 README / package.json,以及 DeepSeek Harness 官方仓库交叉核实后整理。
需要先说明两点背景。第一,DeepSeek Harness 目前仍是开发者预览版,插件明确适配 0.1.0-rc.6,更早的私有预览包版本线不在支持范围。第二,DeepSeek Harness 插件库 是独立的社区目录,用来检索和对照安装命令,与 DeepSeek / 幻方没有官方从属关系,不能当成官方应用商店。
这是什么¶
dsh-explain 是一款面向 DSH 的学习模式插件,由 yuezengwu 维护,仓库为 yuezengwu/dsh-explain。社区目录把它归在「工具与能力」,许可证为 MIT,主要语言是 TypeScript。package.json 里的版本号是 0.1.0,并声明了 dsh.bundle 补丁;客户端注入目标是 Web 端的会话与设置界面。GitHub 仓库当前 11 星,目录页显示 10 星。
一句话定位来自仓库中文 README:把多个 DSH 工作会话中值得学习的内容,汇入用户唯一的全局学习线程;每个来源会话最多保留一个等待反馈的讲解;再用全局 ExplainContext 适配知识水平和讲解偏好。
它要解决的不是「让主模型讲得更啰嗦」,而是把讲解从主回合里拆出去:
- 主模型继续干活,不知道 Explain 的存在。
- 讲解由辅助模型完成,只进入学习线程。
- 学习状态存在本机
$DSH_HOME里,工作会话、恢复和 fork 都不会复制这份状态。
仓库 README 也写明:产品目标在社区里没有直接重复的插件。dsh-advisor、dsh-memory-evolve 等项目提供过局部实现参考,但那些方案会把内容注入主 Agent,或依赖外部 UI;Explain 明确不走那条路。
核心功能¶
下面这些能力来自仓库 README / README.zh-CN.md,以及目录页上的功能摘要,不是演示环境里的主观体验。
一条本地学习线程¶
一个 $DSH_HOME 只有一条学习线程。不同工作会话打开的「学习」Tab,读的是同一份全局数据。线程存在本地,不随某个 Session 复制。
每个顶层来源会话可以有一个等待反馈的讲解,也可以没有。同一来源还没反馈时,不会再生成第二条;其他来源不受影响,可以继续各自讲解。来源 Session 如果还在当前 inventory 里,可以从讲解直接打开;来源被删掉后,历史仍可读,但会标成不可用。
主动讲解和快捷入口¶
用户可以从工作会话的 composer 主动发起学习,不必先知道该问什么。仓库文档给出的命令如下:
/explain <学习请求>:在已建立或空白 Session 里,要求 explain agent 生成一条讲解。/explain on、/explain off、/explain status:开关和学习状态查询。
另外两条入口不自动提交,只往 composer 写一份可编辑草稿:
- 选中可见文字后,使用 composer 工具行里的 Explain 快捷入口。
- 在任意已完成的 assistant 回答上,选择「学习这个回答」。
这两条入口由 Explain 自己注册在 DSH 第一方槽位上:选区动作在 conversation.input.left,精确回答动作在 conversation.chat.assistant-actions。README 写明它们不修改、不依赖 dsh-selection-chat、dsh-suggested-replies 或 dsh-advisor。
辅助模型调度和额度¶
主动讲解、自主讲解、重讲和压缩共用一个全局调度器,任意时刻最多一个辅助模型请求。主动请求优先于后台工作,但不会打断已经在途的主动请求或重讲。
自主判断默认最多发送 50 次 / 滚动 24 小时。占额跨进程重启保留;失败和重试会计数;用户触发的主动讲解、重讲与压缩不占这笔额度。
ExplainContext 与压缩¶
Explain 维护一份私有的全局 ExplainContext,汇总对话偏好、知识概况和学习进展。这份上下文只送给辅助模型,不注入主 Agent。主模型不知道插件存在:Explain 不写主 Session 日志、不改主模型上下文、不阻塞主 turn。
辅助历史会在两类条件下压缩:
- 有新的结构化观察或已关闭讲解,且用户连续 30 分钟没有操作 Explain。
- 预计下一次辅助请求会占所选模型上下文窗口的 50% 以上。
压缩只针对辅助模型历史。用户在学习视图里能看到的原始记录不会被删掉。首个讲解条目还会保存最多 2,000 字符的受限来源摘要,供后续重讲;来源 Session 删掉后重讲仍然可用,这份摘要不会通过学习视图 API 暴露。
界面:学习 Tab 和设置页¶
学习线程注册在 DSH 第一方 conversation.view 槽位,界面上是一个「学习」Tab。配置和诊断走第一方 settings.section,不引入外部 UI 宿主,也不要求安装 better-sidebar。
「学习」入口是 Session 范围的,但业务数据来自同一个全局 client store。空白 Session 的 Hero 阶段不显示视图 Tab;进入学习视图后,当前工作 Session 的 composer 仍然保留。插件也不会自动把你切到学习视图。
设置页可以选择辅助模型、启用学习模式、调整滚动 24 小时自主额度,并查看路由、额度恢复、上下文压力和最近一次压缩。普通配置不必手改 YAML。
本地持久化¶
学习历史、来源活跃状态、压缩检查点和 ExplainContext 写在:
$DSH_HOME/dsh-explain/v1/thread.sqlite
开关与模型设置走 $DSH_HOME/settings.yaml。数据留在本机,这就是目录页所说的「本地优先」。
安装与启用¶
社区目录页给出的安装命令原文是:
dsh plugin add github:yuezengwu/dsh-explain
如需可复现安装,目录页建议固定 commit 哈希:
dsh plugin add github:yuezengwu/dsh-explain#commit
把 #commit 换成实际提交哈希即可。插件以当前 dsh 进程的权限运行,安装时可能执行代码。安装前应检查源代码仓库和许可证。
仓库 README 写得更具体:当前适配 DSH 0.1.0-rc.6,并推荐装进 web profile。package.json 的 dsh.client.platform 也是 web,peerDependencies 对齐 0.1.0-rc.6 这一组公开 API 包。README 中的安装命令如下:
npx @deepseek-ai/dsh@0.1.0-rc.6 plugin --profile web add github:yuezengwu/dsh-explain
npx @deepseek-ai/dsh@0.1.0-rc.6 web
Git 仓库插件会在安装时构建。如果 pnpm 要求批准构建脚本,按报错信息把 dsh-explain 加入该 profile 的 pnpm-workspace.yaml,再重新跑安装命令。装完后需要重新启动 profile,新的 bundle 层才会组合进当前插件栈。
package.json 还声明了 Node 引擎为 ^22.19 || >=24,包管理器为 pnpm@11.7.0。本机 Node 版本过旧时,构建步骤可能直接失败。
典型用法¶
下面这些步骤都来自仓库文档,不是虚构的操作演示。
- 按上一节把插件装进
0.1.0-rc.6的 web profile,并启动 Web 界面。 - 打开设置中的 Explain 分区,选择辅助模型,打开学习模式。需要的话再改滚动 24 小时自主额度。
- 回到工作会话继续干活。Explain 不会改主模型上下文,主回合仍按原来的方式进行。
- 想主动学某件事时,在 composer 输入:
/explain 解释刚才这次重构为什么把状态机拆成两层
- 也可以选中对话里的一段文字,点 Explain 快捷入口;或在一条已完成的 assistant 回答上点「学习这个回答」。这两步只会生成可编辑草稿,确认内容后再提交。
- 切到会话头部的「学习」Tab 查看全局学习线程。不同工作会话看到的是同一条线程。
- 需要确认插件是否在跑时,使用
/explain status;临时关掉用/explain off,再打开用/explain on。 - 设置页可以查看路由、额度恢复、上下文压力和最近压缩。出现异常时先看这里,不必先去翻 SQLite。
本地开发或验收时,仓库还提供直接安装 checkout 的写法,不经过 npm:
dsh plugin --profile web add /absolute/path/to/dsh-explain
dsh --profile web --dump-config
dsh --profile web
日常使用不必走这条路径。assembled Web 验收需要一份已构建的 DSH 源码 checkout,那是给插件开发者准备的。
适用场景与注意事项¶
适合谁:已经在用 DSH Web 界面做开发或排查,希望把「做完」和「学会」分开的人。尤其是同一 $DSH_HOME 下会开很多工作会话,又不想让讲解污染主 Agent 上下文的情况。
不适合什么:它不是课程、测验、卡片或间隔复习系统。仓库在查重结论里写明,P0 不做这些;那是 dsh-edu 一类方向,Explain 目前只提供讲解闭环。它也不是通用记忆插件,不会把学习摘要写回主模型。
使用时需要注意:
- 当前只声明了 Web 客户端注入,不要默认它能在非 Web 界面里出现同样的「学习」Tab。
- 明确适配 DSH
0.1.0-rc.6。开发者预览期 API 仍会变,升到其他 rc 之前应先看仓库是否跟进。 - 自主讲解会消耗辅助模型额度,默认 50 次 / 24 小时。失败和重试也计数。
- 学习数据在
$DSH_HOME/dsh-explain/v1/thread.sqlite。备份或迁移 home 目录时,要把这份文件一起带走,否则学习线程不会跟着走。 - 快捷入口只写草稿、不自动提交,是有意设计,避免误把选区送进学习闭环。
- 插件以当前 dsh 进程权限运行。社区目录和官方文档都提醒:安装前检查源码与许可证;需要可复现环境时固定 commit。
小结¶
dsh-explain 把 DSH 的工作会话变成学习素材来源,但不改主 Agent 的行为。一条本地全局线程、按来源最多一条活跃讲解、只送给辅助模型的 ExplainContext,再加上第一方「学习」Tab 和可诊断设置页,构成它目前已经落地的 P0。仓库 README 记录到 M6:选区与精确回答入口都由 Explain 自己实现,并且通过了 DSH 0.1.0-rc.6 的验收门禁。
目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-explain/
GitHub:https://github.com/yuezengwu/dsh-explain