dsh-annals:给 AI 一份跨会话可查的工作记忆

前言

用 DSH 做智能体开发时,每一轮对话往往像新开一张白纸:上一轮定下的方案、踩过的坑、已经否掉的路线,下一轮都不在上下文里。你会反复解释同一件事,模型也会反复推荐你早就排除的做法。代价不只是多花时间,更是难以信任它是否查过前情。

单靠自律写日志不够;只在 AGENTS.md 里写规矩也常见漂移——技能没被加载、规矩被别的指令挤掉、目录和 git 没初始化。下面介绍 DSH 社区插件 dsh-annals(维护者 duhuashan,分类:工作流):把「每天一个日志文件、可检索索引、独立 git 仓库」和技能、常驻规矩、轮次提醒、一键初始化打包在一起,让模型在需要时能自己查到历史,而不是每轮从零口述。

这是什么

dsh-annals 是 DeepSeek Harness(DSH)插件,当前版本 0.5.2(MIT 许可证)。它解决的是人与 AI 之间缺少共享上下文——不是帮你写周报,而是让 AI 在动手前能检索「当时为什么这么定、失败记录在哪」。

装完后在工作区得到:日志\ 目录(按日 Markdown)、_日志索引.md(由生成器维护)、以及 日志\ 内的独立 git 仓库;插件侧注册 annals 技能、常驻日志规矩、轮次与索引新鲜度提醒,以及 annals_init、annals_query、annals_links 等工具(是否注册可由配置关闭)。

核心功能

记忆结构

组件 作用
日志\YYYY-MM-DD.md 按天一条日志,模型按技能规矩写入
日志\build-index.mjs / log-parse.mjs 零依赖索引生成器与解析模块
日志\ 内 git 版本记录,便于追溯谁改了什么
_日志索引.md 检索入口;日志更新后需跑生成器并提交

插件不自动写日志、不自动跑生成器,只通过 agent.steer() 在轮次收尾提醒模型判断该不该记、索引是否过期。提醒不出现在 GUI 对话气泡里,漏记时你会看到模型回头补写。

工具与技能

能力 用途
annals 技能 该不该写、写多细、排版与写完后的步骤
常驻规矩 每轮系统提示里精简版规矩,降低「没加载技能就忘记」
annals_init 一次初始化目录、生成器、今日骨架、git init、.dsh\log-system.json
annals_query 按关键词/content 找历史(「以前 X 是怎么弄的?」)
annals_links 按关系反查(「这个文件以前哪些条目碰过?」)

检索工具不会每轮自动触发,避免打爆 prompt 缓存;由模型在常驻规矩或技能触发词下自行调用。

工作区状态

状态写在 <工作区>\.dsh\log-system.json:

  • 未决定:新会话时模型问是否启用;拒绝则静默
  • 已启用:正常提醒;已有 日志\build-index.mjs 的老工作区视为已启用
  • 已拒绝:不再询问、不提醒;可随时 annals_init(enabled=true) 或删状态文件重新问

初始化只创建 日志\ 与 .dsh\ 下文件,已存在的不覆盖。

安装与启用

从 Releases 下载最新 dsh-annals-<版本>.tgz,再执行(路径换成你的实际位置):

dsh plugin --profile web add C:\path\to\dsh-annals-0.5.2.tgz

装完重启 DSH 生效。开发时可链源码(依赖需自备 @deepseek-ai/schemastery):

dsh plugin --profile web add link:C:/path/to/dsh-annals

注意:本地 tgz 在 profile 的 package.json 里以 file: 绝对路径记录,删 tgz 会导致该 profile 无法再装;从 tgz 装会自动装 peer 依赖,从 link: 装不会。

首次进入新工作区,插件会注入提示让模型问你:是否启用日志系统。同意则调用 annals_init(enabled=true);拒绝则写拒绝记录并完全静默。

GUI 总开关与多数选项在 设置面板 → 日志系统;保存写入 profile 的 cordis.patch.yml,热重载、无需重启。无 GUI 时在 cordis.patch.yml 里 override annals 的 config,改 YAML 后需重启 DSH。queryTool、linksTool、probe 仅 YAML 可改。

卸载:

dsh plugin --profile web remove dsh-annals

卸载不删 日志\ 与 .dsh\log-system.json,重装可接上。

典型用法

大部分时候无需口令:启用后模型会在合适轮次被提醒补日志。下面说法在 README 中有明确对应行为:

你说 效果
启用询问时答「好」/「启用吧」 初始化整个日志系统
「不用了」 拒绝记录,之后静默
「记一下」/「先记一下」 把当前进展写入今日日志
「简单记」/「详细记」 控制本条粒度(默认 B 档)
「这个不用记」/「别碰日志」 本会话不再催写
「以前那个 X 是怎么弄的?」 倾向调用 annals_query
「这个文件以前哪些条目碰过?」 倾向调用 annals_links

索引维护:日志更新后应运行 日志\build-index.mjs 更新 _日志索引.md 并 git 提交;插件会在「写了日志但索引 mtime 旧于今日日志」时提醒,同秒写入在理论上可能漏报。

适用场景与注意

适合:长期在同一 DSH 工作区与 AI 协作、需要决策与踩坑记录可检索、希望交接时读日志而非口述前情的开发者。

务必知晓:

  • 插件以当前 DSH 进程权限运行;安装前请阅读 GitHub 仓库 源码与 MIT 许可证,社区目录 SkillHub 插件页 与 DeepSeek / 幻方无官方从属关系。
  • 日志目录名固定为 日志,改名会被判未启用。
  • 工作区 .dsh\skills\annals\SKILL.md 会覆盖插件版技能(工作区 rank 更高)。
  • annals_links 对带空格的 Windows 反引号路径可能截断;引用失效不校验,改名删除后反查仍可能列出旧链接。
  • 宿主要求:engines.dsh 为 >=0.2.0。

结尾

dsh-annals 把「规矩能被执行」和「记录能被查到」绑在一起:日志 + 索引 + git,再配合技能、常驻注入与轮次提醒,减轻跨会话重复解释。细节与边界见仓库 ARCHITECTURE.md、LIMITATIONS.md。

  • 目录页:https://www.skillhub.cn/plugins/duhuashan/dsh-annals
  • GitHub:https://github.com/duhuashan/dsh-annals
羽毛球分组比赛记分
小程序二维码

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

Xiaoye