dsh-learn:把会话里的纠正与修法写成普通 DSH 技能

前言

用 DeepSeek Harness(DSH)做智能体开发时,同类问题会在不同会话里反复出现:工具退出码误判、环境变量没设、某条命令在 Windows 与 Linux 上行为不一致。常见做法是另开一轮模型做「复盘」、或维护一份越写越长的 MEMORY 文件——前者多一次 API 调用且上下文已变,后者难版本管理、也难和宿主自带的技能体系对齐。

下面介绍社区插件 dsh-learn(维护者 xiex16070-jpg,SkillHub 分类为「记忆」):挂在会话事件流上,用确定性规则从用户纠正、失败与修复里提出候选,真正落盘由前台模型显式决定;产出是 <DSH_HOME>/skills/learned/ 下的普通 DSH 技能,不另建第二套注册表,README 写明零额外模型调用。

这是什么

dsh-learn 是 Cordis 插件,当前仓库版本为 0.3.13(MIT,package.json 要求 Node >=22.19、DSH >=0.2.0-rc.1)。它监听 session/event(用户消息、助手消息、工具结果),在内存里维护有上限的观测窗口,回合结束后做审查并把候选写入 <DSH_HOME>/learn/data/;技能正文与四把「伞技能」(durable-preferences、tool-recovery、environment-facts、agent-engineering)则落在技能目录,供 learn_skills 检索、/技能名 加载。

中央分工在 README 里写得很清楚:正则与门槛只产出候选;写技能文件只能由模型触发 learn_skill_manage create 或 learn action=note。系统提示保持稳定,队列与规则摘录走宿主 runtime context,不改写持久会话历史。

核心功能

零额外模型调用的学习回路

环节 行为
观测 capture 脱敏、压缩并按来源分类信号(用户/助手/工具各有限定类型,见 text.js 的 SOURCE_KINDS)
审查 agent/turn-stopping 后防抖约 4 秒运行 runReview,仅写 pending.json;窗口观测数需 ≥ review.triggerObservations(默认 3)
落盘 模型查看 learn action=pending 后自行决定创建技能或往伞技能记规则;相似度 ≥ review.similarity(默认 0.6)的既有规则会被强化而非重复写入
维护 curator 每 10 分钟检查是否到期,在空闲且间隔满足时标记陈旧或移入归档(只移动、不删除);加载次数 ≥ 3 的技能不自动归档

专属技能根与自注册提供者

宿主文件系统技能提供者通常只扫技能根下一层,因此 <skills>/learned/<name>/SKILL.md 这类三层路径无法被默认扫描。插件通过 lib/provider.js 向宿主 registerProvider() 注册 <DSH_HOME>/skills/learned/,rank 330,无需改 profile。写入前会跑探针技能 learn-root-probe,确认目录对宿主可见后再迁移本插件管理的技能。

可见反馈与自检

浏览器客户端在每个回合结束后,在回复下方展示彩色回执(仅统计本回合模型主动调用的 learn* 写操作;自动审查入队不产生回执)。排查可用:

learn action=status
learn action=doctor

开发者可在插件目录执行 npm test(README:宿主侧 23 节断言 + 浏览器侧检查,零依赖)。

安装与启用

DSH 生态里插件多以 Cordis bundle 形式接入;本插件收录在 awesome-dsh-plugin 清单。README 推荐从仓库预构建包安装,下载地址为:

https://github.com/xiex16070-jpg/dsh-learn/releases/latest/download/dsh-learn.tgz

资产名不带版本号,便于 releases/latest/download/ 长期有效。

手动安装时,将插件目录置于 profile 的 node_modules/dsh-learn/,并在 profile 的 package.json 的 dsh.profile.bundles 中列出 "dsh-learn"。插件自带的 cordis.patch.yml 仅 insert 一条 id: dsh-learn 的 loader。README 也说明:因尚未发到 npm registry,暂无法走 plugin_manager 的 install_bundle 包名安装,手工拷贝是文档路径不可用时的办法,而非长期推荐姿势。

安装后勿在 package.json 里对 @deepseek-ai/dsh-* 声明 peerDependencies,否则宿主可能静默跳过整个 bundle。

典型用法

收拢技能到专属根

先 dry-run 看计划,再执行迁移(探针未通过则不会搬任何技能):

learn action=organize dryRun=true
learn action=organize dryRun=false

模型侧写盘入口

  • 新独立技能:learn_skill_manage(create 等;description 必填,是受控写入口)
  • 往伞技能追加规则:learn action=note(需 statement)
  • 浏览候选队列:learn action=pending
  • 语义检索已学内容:learn_skills(只读,query 必填)

用户明确要求「记住」且满足来源条件的候选,审查路径可直接落盘;其余候选需模型根据 pending 列表自行调用上述工具。

配置要点

配置经 normalizeConfig() 解析,相对路径相对 <DSH_HOME>。常用默认值包括:dataDir 为 <DSH_HOME>/learn/data,capture.maxSessions 8、maxItemsPerSession 120,curator.staleAfterDays 14、archiveAfterDays 30。完整键表见 GitHub README「配置」一节;README 强调每个配置键在代码中都有读者,并由 npm test 校验。

适用场景与注意

适合:长期在同一 DSH profile 下做工具链、环境、流程类开发,希望把「这次踩坑的修法」沉淀为可读、可改、可 git 管理的 SKILL.md,而不是依赖额外复盘模型或 monolithic 记忆文件。

注意:

  1. 插件以当前 DSH 进程权限读写 home 目录;安装前请阅读 源码与 LICENSE,确认符合你的安全与合规要求。
  2. 确定性路径曾出现误匹配(v0.1.0 的 REMEMBER_RE 事故);当前设计 deliberately 把「判什么值得记」交还模型,候选多、落盘少是预期行为之一。
  3. SkillHub(https://www.skillhub.cn/plugins/xiex16070-jpg/dsh-learn)是社区目录站点,与 DeepSeek / 幻方无官方从属关系;星标等元数据以各页面当时展示为准(GitHub 仓库当前为 1 star)。

结尾

dsh-learn 把「持久学习」收束成一条保守回路:观察真实事件流、候选排队、模型显式写盘、普通技能文件出仓,并用 curator 做可逆归档。若你在 DSH 上反复纠正同一类错误,可以按 README 安装 bundle,用 learn action=doctor 确认专属根已注册,再让会话里的修法逐步进入 skills/learned。

  • 目录页:https://www.skillhub.cn/plugins/xiex16070-jpg/dsh-learn
  • 源码与文档:https://github.com/xiex16070-jpg/dsh-learn
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye