前言¶
DeepSeek Harness(DSH)与 Oh-My-Pi(omp)各自有自己的记忆系统:DSH 可以通过 dsh-mnemon 的 Hindsight provider 写入记忆,但读侧不支持按项目过滤,只能召回整库;omp 的原生 Hindsight 后端则支持按项目过滤,却无法产生无标签的全局层。两边各自读写同一记忆库,标签规则不统一,最终导致互相“看不见”。
dsh-hindsight-memory 是一个 DSH 插件,作为中间层把 DSH 的记忆行为对齐到 omp 的语义:使用同一个记忆库、同一套标签规则、同一套分层与过滤规则。模型只接触语义化工具,标签与路由由插件自动处理。
核心价值与定位¶
- 插件名称:dsh-hindsight-memory
- 维护者:meisijiya
- 分类:记忆
- 版本:0.7.3
- 许可证:MIT
- 插件职责:在 DSH 与 omp 之间建立统一的记忆语义,避免两边各自写、各自读的分裂。
解决的问题¶
| 现状 | 痛点 |
|---|---|
DSH 用 dsh-mnemon 的 Hindsight provider |
写侧能打标签,但读侧不支持按项目过滤 ⇒ 读的是整库 |
| omp 用官方原生 Hindsight 后端 | 读侧按 project:<label> 过滤,读不到别的项目;但无法产生无标签的全局层 |
| 两边各写各的 | 同一记忆库内的标签规则不统一 ⇒ 写着写着就互相看不见 |
插件将 DSH 侧替换为受控的中间层:模型只看到 4 个语义化工具,标签与记忆库路由由插件自动处理,模型接触不到 tags 或 bankId。
核心功能¶
插件提供 9 个语义化工具,与 omp 的记忆能力一一对应:
| 工具 | 作用 | 与 omp 的对应 |
|---|---|---|
memory_recall(query, scope?) |
召回长期记忆。scope=project(默认)= 本项目 + 全局;project_only = 只本项目;global = 只全局 |
omp 的 recall |
memory_retain(content, tier?) |
写入耐久事实。tier=project(默认)只有本项目可见;tier=global 所有项目可见 |
omp 的 retain |
memory_reflect(query, scope?) |
让记忆服务综合回答(不返回原始条目) | omp 的 reflect |
memory_status() |
连通性、当前记忆库(含 bank 体检告警)、项目标签、各层条数与类型分布、任务队列健康度 | omp 无(诊断用) |
memory_hygiene(action?, scope?) |
整理共享记忆库:预览/清理近重复事实、触发 observation 合并、查看分层与口径命中;维护动作 audit/retract/restore/correct/supersede;scope 可锁定某一层 |
omp 无(见“记忆卫生”一节) |
memory_mental_models(action?) |
维护精神模型(跨会话的经验总结):ensure 幂等建好三个模型(用户偏好 + 本项目约定/决策),list/content/refresh/patch,以及维护动作 delete/clear/dry-run |
omp 启动时自动建同样的三个 |
memory_operations(action?) |
运维观测:列出抽取/刷新/合并任务,可 retry 失败任务 |
omp 无(但 omp 也看不见失败任务) |
memory_pages(action?, id?, query?, title?, sourceQuery?) |
知识页层(服务端合成的长文):list 读知识库树、search 检索、read 读整页、create 建页(自动盖本项目标签),以及维护动作 update/delete |
omp 无(服务端同一套能力) |
memory_initiative(action?, title?, question?) |
把正在做的事登记成受跟踪的一页 + 一条标记事实(页与事实互链):capture 登记、list 查看 |
omp 无(服务端同一套能力) |
知识页与 initiative 是 Hindsight 服务端原生能力(/knowledge-base),本插件将其封装为与 omp 同语义的工具,产出盖 project:<小写项目名> 标签,写入走 async:true + metadata.session_id。可通过配置 knowledgePages: false 整体关闭这两个工具。
标签由插件生成,不暴露给模型。插件按 basename(主 checkout 根).toLowerCase() 盖章,与 omp 的 projectLabel() 规则一致。
安装与启用¶
从 GitHub 安装(推荐):
dsh plugin --profile web add "git+https://github.com/meisijiya/dsh-hindsight-memory.git"
本地开发(Windows 不能用裸绝对路径):
dsh plugin --profile web add "file:D:/path/to/dsh-hindsight-memory"
安装后需要重启 DSH Web 才会装载。回滚:
dsh plugin --profile web remove dsh-hindsight-memory
也可通过插件市场发现页装:在 DSH → 插件 → 发现 → 索引源中填入索引地址:
https://raw.githubusercontent.com/meisijiya/dsh-hindsight-memory/main/index.json
配置要点¶
插件配置通过 YAML 写入,核心字段包括:
- insert:
- id: hindsight-memory
name: 'dsh-hindsight-memory'
config:
enabled: true # 总开关
inject: true # 是否注入常驻系统提示词段
writeEnabled: true # false = 只读(灰度第一步)
apiUrl: 'http://127.0.0.1:8888'
bankId: shared # 必须与 omp 的 hindsight.bankId 一致
bankIdPrefix: ''
scoping: per-project-tagged # global | per-project | per-project-tagged
types: [world, experience] # 与 omp 的 recallTypes 同值
budget: mid
reflectBudget: low
maxTokens: 1024
recallMaxQueryChars: 800
autoRecall: true # 首回合自动召回(与 omp 的 autoRecall 默认值一致)
autoRetain: true # 回合结束自动留存(与 omp 的 autoRetain 默认值一致)
retainEveryNTurns: 3
sectionOrder: 950
hygieneThreshold: 0.9 # 近重复判定阈值(越高越保守)
hygieneMaxFacts: 500 # 单次扫描的事实条数上限
hygieneProjectMission: '只保留该项目中长期有效的技术决策、约定、硬约束与踩过的坑;不保留一次性进度、临时状态与重复表述。'
hygieneProjectMaxObservations: 40 # 项目层每个 scope 的 observation 上限
hygieneGlobalMission: '只保留跨项目长期有效的约定、环境事实与用户偏好;不保留一次性进度、临时状态与重复表述。'
hygieneGlobalMaxObservations: 30 # 全局层 observation 上限
配置写错不会导致 profile 损坏,所有非法输入会回落到默认值。如需只读或纯手动,可在插件配置面板中关闭 writeEnabled 或 autoRetain,无需改代码。
面板与观测¶
- 插件管理(配置):DSH → 插件 →
dsh-hindsight-memory→ 详情页 → “配置”。可逐项查看与修改配置项。 - 插件管理(记忆看板):同详情页 → “记忆看板”(v0.7.0 新增)。提供只读快照:记忆库条数与告警、全局层/项目层/其它项目层分层、事实类型分布、近重复组、体检计数(陈旧/孤儿 observation/被取代/空知识页/卡住任务)、任务状态分布、精神模型与知识页清单。支持手动刷新。
- 终端状态面板:运行
node scripts/panel.mjs。显示服务健康、记忆库清单、分层条数(全局层 / 本项目层 / 其它项目层)、最近事实与其标签。项目标签按 omp 同规则自动推导,可用--project <名字>覆盖。 - 官方前端:访问 http://127.0.0.1:9999(Hindsight Control Plane),查看知识页、实体、关系图、原始事实、库管理。
与 dsh-mnemon 的分工¶
两个插件不冲突,但只有一层能连接 Hindsight。当前配置如下:
| 层 | 归谁 | 连 Hindsight? | 说明 |
|---|---|---|---|
| ① 运行时记忆 | dsh-mnemon |
❌ | 本地 MEMORY.md / USER.md 投影,常驻注入上下文,omp 看不到 |
| ② 项目档案 | dsh-mnemon |
❌ | 本地 markdown,按需检索,omp 看不到 |
| ③ 记忆空间 | 本插件接管 | ✅ | 与 omp 记忆系统同层:同一个记忆库、同一套标签、同一套过滤 |
| ④ 技能管理 | dsh-mnemon |
❌ | 技能账本,不是记忆层 |
注意:dsh-mnemon 的 Hindsight provider 必须保持“不启用”(enabled.hindsight=false),否则会出现两边都在写、但过滤规则不一致的分裂。记忆空间组件本身不要关闭,否则会导致 dsh-mnemon 的检索提醒整片清空。
适用场景与注意¶
- 适合需要与 omp 共享记忆、保持标签与分层一致的 DSH 场景。
- 插件以当前 DSH 进程的权限运行,安装前建议阅读源码与许可证。
- 配置修改后需重启 DSH Web 才会生效(DSH 在启动时解析
package.json并缓存结果)。 - DSH 理念是“一切皆插件”,社区目录与 DeepSeek / 幻方无官方从属关系。
短结尾¶
dsh-hindsight-memory 在 DSH 与 omp 之间建立统一的记忆语义,使用同一个记忆库与标签规则,避免分裂。访问插件目录页与 GitHub 了解更多:https://www.skillhub.cn/plugins/meisijiya/dsh-hindsight-memory | https://github.com/meisijiya/dsh-hindsight-memory