前言¶
在使用 DeepSeek Harness(DSH)进行智能体开发时,模型会因配置不当、意图偏差或安全边界问题反复产生相同的错误。修复这些问题通常需要人工介入:先找出错误场景,整理成规则,再手动配置到模型中。随着项目演进,这类规则会越来越多,手动维护的成本也随之上升。
DSH 的插件体系允许通过 lessonLoop 服务收集各类报告(如拒绝、失败、人工点踩),将它们聚合成候选规则卡片,由人工确认后重新注入到新会话中。dsh-lesson-loop 插件实现了这个闭环:提供统一的「课程总线」,让报告不再散落在各个插件中,并提供规则卡片的人机交互界面。
插件定位¶
dsh-lesson-loop 是 DSH 的一个插件,由维护者 JayYuen666 开发。它不提供任何模型工具或 HTTP 路由,而是作为 DSH 生态中「课程总线」的中间件,接收其他插件(如安全守护、质量门禁、会话救援)的报告,将其聚合成规则卡片,并支持人工确认、降级、归档等操作。
核心价值在于:将一次性的错误处理过程固化为可复用的规则,并在后续会话中自动注入,减少重复排查成本。
核心功能¶
统一的「课程总线」¶
插件通过可选的 lessonLoop 服务接收报告。其他插件只需调用该服务,将报告发送到事件流中;未安装本插件的 profile 不会影响这些插件运行,只是丢弃报告。
插件提供两个部分:
- 主机端:提供 lessonLoop 服务
- 客户端:渲染 Web 卡片,展示规则审核台和开关
规则收集与聚合¶
每个报告追加一行到事件流,按 (project, category, signature) 键合并到候选卡片。当满足 promoteThreshold 条件时,该卡片标记为待审核。
人机确认的规则注入¶
只有人类可以执行 arm 操作,将规则状态设为 armed(就绪)。机器不会自动提升规则。规则一旦确认,会在每个项目的根会话启动时,将所有 armed 规则的完整文本注入到 agent/created 端点,供模型使用。
统计与衰减¶
规则卡片维护三个计数器:
- violation:场景触发且被违反的次数
- suppressed:场景触发但遵守的次数(由 pass 触发)
- samples:规则存在且未被违反的次数(会话曝光,不计入分母)
唯一的比率是 violation / (violation + suppressed),samples 仅用于判断是否满足降级所需的样本数。
降级与归档¶
当满足降级条件时,可通过 reject、demote、archive、edit、revive 等操作管理规则状态。降级需要同时满足:
- suppressed 为正
- violation 达到 demoteThreshold
- 样本数达到 demoteMinSamples
- 比率在 demoteRatio 以下
对于从未有过合规命中且持续触发的场景,插件无法判断其有效性,保持 armed 状态,等待人工处理。
安装与启用¶
安装命令如下:
dsh plugin --profile web add @jayyuen66/dsh-lesson-loop
卸载时使用:
dsh plugin --profile web remove @jayyuen66/dsh-lesson-loop
插件发布在公共 npm 仓库,安装无需凭证。
环境要求¶
- Node.js >= 22.12
- DSH 版本 >= 0.2.1-rc.3
插件在 package.json 中声明了 engines.dsh 字段(^0.2.1-rc.3),由 DSH 主机自行决定兼容性。实测 0.2.0-rc.2 和 0.2.1-rc.1 会被拒绝,0.2.1-rc.3 和 0.2.2 通过,0.3.0 被拒绝。
版本兼容注意¶
如果 profile 中通过 pnpm 的 overrides 锁定了 @jayyuen66/dsh-plugin-shared,该版本号必须大于等于本插件声明的版本。否则运行时会报告导出未激活或缺少导出名称。
验证插件运行¶
确认插件已正确加载,可以通过以下步骤:
- 检查配置加载
运行dsh --profile web --dump-config,在输出末尾应看到:
# == @jayyuen66/dsh-lesson-loop
- id: lesson-loop
该命令会修改 profile 的根组装文件,需注意同时检查 stdout 和 stderr,因为未匹配的补丁目标只会出现在 stderr。
- 检查卡片渲染
在 DSH 的 Web 界面中,规则审核卡片的头部应显示当前候选规则、已就绪规则的数量等实时数据。
数据与隐私¶
插件的数据平面使用 DSH 官方的 Typert Remote 命名空间 lessonLoopRules,通过主机 /api 网关访问。插件本身不直接暴露 HTTP 路由,也不向外部发送数据。
已知边界¶
- 插件不提供任何模型工具或 HTTP 路由。
- 子会话不会接收
armed规则的注入,仅根会话接收。 samples计数对同一会话只计一次,即使会话被恢复也不会重复统计。
适用场景¶
适合需要长期维护规则库、希望从错误中自动沉淀经验的 DSH 项目。特别是涉及安全守护、质量门禁、会话救援等需要持续优化的场景。
注意事项¶
- 插件以当前 DSH 进程的权限运行,安装前建议查看源码与许可证。
- 插件依赖
@jayyuen66/dsh-plugin-shared的特定版本,若 profile 中已有锁定的 overrides,需确保版本兼容。
结语¶
dsh-lesson-loop 将 DSH 生态中的各类报告转化为可确认的规则,并通过「课程总线」实现统一管理。人工确认后的规则会在新会话中自动注入,形成从错误到经验的闭环。插件本身轻量,不引入额外模型工具或 HTTP 路由,适合希望构建自演化规则库的项目。
- 目录页:https://www.skillhub.cn/plugins/JayYuen666/dsh-lesson-loop
- GitHub:https://github.com/JayYuen666/dsh-lesson-loop