前言¶
在 DeepSeek Harness(DSH)里跑 Agent,常见问题是:同类失误会在不同任务里重复出现;当前会话结束后,上下文不一定保留;换一个新会话,之前的修正也不一定被沿用。只靠加长 system prompt 能塞下静态规则,却很难自然记录「这次具体出了什么问题、怎么改的、后来有没有再验证」。
下面介绍社区插件 dsh-lessons(维护者 duahciM,SkillHub 分类为工作流)。它尝试把「任务执行 → 结束复盘 → 结构化记忆 → 后续按作用域注入」串成闭环,让一次任务里形成的经验有机会迁移到后续独立任务。README 与目录页均标明这是实验品,效果不保证;是否值得接入,需要结合自己的任务形态和合规要求自行判断。
这是什么¶
dsh-lessons 是 DSH 上的元认知类插件:用 task_start / task_end 划定任务边界,在任务结束时生成决策轨迹与复盘材料,经 task_reflect 把经验写成可治理的记忆,并按 global、session、reflection 三层作用域注入 system prompt 的 ## Accumulated Lessons 区段。
- 插件包名:
dsh-lessons,当前版本 0.2.2(MIT 许可证) - 运行环境:README 写明 DeepSeek Harness
0.2.2-rc.1;package.json要求dsh>=0.2.1-rc.5,Node^22.19.0 || >=24.0.0 - 社区目录:SkillHub - dsh-lessons(独立社区站点,与 DeepSeek / 幻方无官方从属关系)
- 源码:github.com/duahciM/dsh-lessons
插件在分工上明确:程序负责记录、结构校验与注入流程;模型负责语义分类、冲突判断和任务反思。
核心机制¶
闭环与四个工具¶
插件设想的闭环如下:
任务开始 → 决策 → 任务结束 → Agent反思 → 结构化记忆
↑ │
└──────────── 后续任务读取并应用经验 ────────┘
对外暴露四个工具(名称与参数以 README 为准):
| 工具 | 作用 |
|---|---|
task_start(goal, expected_result) |
声明任务目标与预期结果,建立任务记录 |
task_end(task_id, status, result) |
声明任务结果,关闭任务并生成复盘材料 |
task_reflect(task_id, assessment, source, lessons[]) |
保存 Agent 对任务的反思和经验 |
lessons_lookup(lesson_id) |
按需追溯一条经验的完整来源(只读) |
task_end 会在任务时间窗内整理决策轨迹(用户请求与纠正、Agent 对外表述等),反思对象是 Agent 的工作决策,而不是完整的工具调用技巧清单。任务状态包括 succeeded、failed、abandoned、aborted。
三层记忆与注入¶
| 层 | 主要用途 | 默认作用范围 |
|---|---|---|
global |
跨任务通用的方法论 | 所有会话 |
session |
与特定会话/项目背景绑定的约束或经验 | 指定会话 |
reflection |
从具体任务反思中产生的经验 | 产生该经验的会话 |
注入由作用域决定;经验可晋升到 global 或指定 session,晋升是状态迁移而非复制条目。三层目前渲染在同一 system prompt 区段,按层分组。
经验字段与治理¶
单条经验的核心字段包括:problem(现象)、attempted(当时做法)、correction(应当怎么做)、applies_when(适用条件)、confidence(low/medium/high)。写入时由模型声明与已有经验的关系:new / repeat / revise / none;生命周期含 active、superseded、deprecated、deleted 等。冲突关系可声明为 condition、goal、contradiction、apparent,渲染时并列呈现,不由程序自动裁决。
决策环境快照¶
task_start 会把当时实际生效的经验冻结进 task_open 记录,避免事后修改记忆库改写历史任务「当时看到的约束」。反思材料里可呈现 DECISION ENVIRONMENT 段;渲染是否简略由配置项 environmentInBrief(默认 true)控制。记录与渲染可分开取舍:快照始终落盘,关掉简略渲染可减少复盘时的 token,但不影响按 id 反查。
默认开启的 silentReflection 要求模型在思维链内完成复盘,直接调用 task_reflect,对外最多一行说明任务是否成功,以减少重复输出 token 和决策轨迹污染(详见 README 第 2.4 节实测说明)。
安装与启用¶
依赖方面:无外部服务,零 npm 依赖(仅 Node 内置模块)。安装前建议浏览仓库源码与 MIT 许可证;插件以当前 dsh 进程权限运行,数据目录由你配置,需自行评估路径与备份策略。
方式 A:DSH 界面(推荐)¶
- 打开 DSH,进入 插件 → 添加插件。
- 输入
dsh-lessons(或仓库地址https://github.com/duahciM/dsh-lessons),点击 安装。 - 安装完成后点击 立即启用。
方式 B:命令行¶
Web 模式示例:
dsh plugin --profile web add dsh-lessons
命令行安装后请重启 dsh web。Headless 用户请使用 --profile headless。
配置要点¶
插件通过 cordis.patch.yml 挂载;下列片段摘自官方文档,安装后可在对应配置中按需修改路径与开关:
- insert:
- id: lessons
name: 'dsh-lessons'
config:
taskDir: '<你的数据目录>/dsh-lessons-data'
fsyncEvery: 16
taskBoundaryHints: true
injectReflection: true
recordEvents: true
stateFromFile: true
silentReflection: true
lessons:
enabled: true
maxLessons: 0
diagnostics: true
scopes:
global: true
session: true
reflection: true
batching: true
instantNotice: true
commitEvery: 8
commitEveryTokens: 0
taskDir 决定任务记录与经验的存放位置。stateFromFile: true(默认)时,进程重启可从 tasks.jsonl 重建进行中任务等状态,避免 task_end 报 no open task。batching 与 instantNotice 用于在「system prompt 全量重算成本高」与「新反思尽快可见」之间折中:未达提交阈值时先发 plugin 通知,达到 commitEvery 等阈值后再更新 system prompt 区段。
典型用法¶
Agent 侧流程¶
系统提示会引导 Agent:任务开始前调用 task_start(文档要求其为任务第一项动作);有明确结果后调用 task_end;根据复盘材料调用 task_reflect 写入结构化经验。若任务开始后才补开 task_start,插件无法补回此前未收录的决策过程——这是 README 明确写明的限制。
需要追溯某条经验时,由 Agent 自行决定是否调用 lessons_lookup(lesson_id),以换取完整来源链(目标、结果、事件区间、任务开启时的其他经验等),而不是在每次反思时预塞全部来历。
人工维护记忆¶
在插件目录下,可用附带的 CLI 做审计与治理(会话 id 等参数以你环境为准):
node tools/lessons.mjs list --session <会话id>
node tools/lessons.mjs check
node tools/lessons.mjs add --scope global --pattern "…" --correction "…" \
--applies-when "…" --boundary "为什么属于这一层"
node tools/lessons.mjs move <id> --to global
node tools/lessons.mjs remove <id>
node tools/lessons.mjs remove <id> --yes
node tools/deprecate.mjs <id> --reason "…"
node tools/deprecate.mjs --list
remove 默认只预览、exit 3 等待确认;--yes 才写入墓碑。这与 README 中「危险操作需审批」的设计一致。
适用场景与注意¶
更适合谁: 希望在 DSH 工作流里显式区分「任务边界」、愿意让 Agent 在任务结束后做结构化复盘,并把经验按会话/全局分层注入后续对话的团队或个人。SkillHub 将其归入工作流类插件,与「纯工具封装」型插件的定位不同。
务必留意的限制(摘自 README 第三节,此处只列要点):
- 任务边界仍依赖模型是否调用
task_start/task_end,漏开会缺决策轨迹。 - 分层、冲突、重复等语义判断由模型负责,结构检查器无法识别「分错层」或空泛
boundary。 - 三层共用一个 system prompt section,内容变化可能触发较大范围的提示词缓存重算(README 给出过量级实测,因使用方式而异)。
- 插件自述为实验品,第四节实验数据需在仓库内查阅,不宜在未经复现的情况下当作生产 SLA。
经过上面的步骤,若你已在测试环境验证安装、数据目录权限与复盘流程,再推广到日常会话会更稳妥。
结尾¶
dsh-lessons 把 DSH「一切皆插件」的思路落到 Agent 元认知上:用工具划定任务、用结构化字段沉淀经验、用作用域与治理规则控制注入,并保留按需溯源能力。它不替代你自己的评测与合规流程,而是在 Harness 内多一层可审计的记忆闭环。