C
dsh-self-memory
cyanxi69-jpg/dsh-self-memory
DSH自记忆插件:结构化记录问题、方案与模型调用,支持加权检索、前提感知排序与外部导入。
Instalar
dsh plugin --profile web add github:cyanxi69-jpg/dsh-self-memoryREADME
dsh-self-memory — DSH 自记忆插件
一句话概览:给 DSH 智能体装上跨会话的「经验记忆」——遇到问题先查历史记录,尝试成功/失败都有回写,并把方法、脚本文件与模型调用全过程沉淀下来,新会话不再重复踩坑。
快速开始(3 步上手)
1. 安装
dsh plugin --profile web add <本目录>
免重启热挂载:对 AI 说 dev_install_package {"dir": "<本目录>"}。
2. 验证已生效
对 AI 说:selfmem_status → 应返回 schema=2 records=… solutions=…。
(代码更新后需 dev_reload_package dsh-self-memory,或重启 dsh 由 bundles 重新装配。)
3. 第一次使用
对 AI 说:selfmem_search {"query":"如何识图"} → 返回最匹配的记录列表(问题 + 多个方案,含 hits / 适用前提 / 冲突标注)。
日常闭环:新会话遇到问题 → 先 selfmem_search 查记录 → 有方案就执行,成功 selfmem_hit 标记、失败 selfmem_fail 记根因 → 没有方案就自行解决 → 最后 selfmem_record 把方法写回。
核心能力
| # | 解决的 5 个问题 | 方案 |
|---|---|---|
| 1 | 多关键词关联度 | keywords 为 {canonicalKey: 权重},检索按权重加权打分 |
| 2 | 隐去细节增强泛化 | 记录时自动生成 abstractProblem(版本/路径/哈希/数字→占位符),检索同时匹配原始+泛化文本 |
| 3 | 大量案例快速检索 | lib/indexer.js 倒排索引(canonical key→记录 id),记录 >100 时先取候选集再打分 |
| 4 | 前提不同结果矛盾 | 记录级 preconditions + 方案级 appliesTo/conflictsWith/status;selfmem_search 传 context 前提,按前提匹配排序并标注「不适用/矛盾/已废弃」 |
| 5 | 关键词规范统一 | lib/norm.js 同义词表(插件/plugin/模组→plugin),存与查走同一套规范化 |
工具一览
| 工具 | 作用 |
|---|---|
selfmem_search | 检索既有方案(支持 context 前提过滤/排序) |
selfmem_list | 列出全部记录摘要 |
selfmem_record | 记录/追加方案(同问题多方案、前提、矛盾、关键词权重) |
selfmem_hit / selfmem_fail | 方案成功 / 失败回写 |
selfmem_import | 外部导入(文件 / 内联 JSON / 文本) |
selfmem_status | 状态与规模统计 |
使用示例
记录一个带前提的方案
selfmem_record {"problem":"断网时如何安装插件","solution":"解压本地包 → dsh plugin add <目录> → pnpm install → dev_install_package 热挂载","keywords":{"plugin":1,"network":0.6},"appliesTo":{"network":"no"}}
前提感知检索(不同前提返回不同方案并标注)
selfmem_search {"query":"如何识图","context":{"model_vision":"no"}}
→ sol-offline-script(适用);sol-switch-model 标注 [不适用当前前提]
外部导入
selfmem_import {"source":"examples/import-demo.json"}
标记成功 / 失败
selfmem_hit {"query":"断网时如何安装插件","solutionId":"s-…"}
selfmem_fail {"query":"…","solutionId":"s-…","rootCause":"…"}
记录结构
{
"schema": 2,
"problem": "原始问题(含细节)",
"abstractProblem": "泛化问题(细节隐去,自动生成)",
"problemType": "…",
"keywords": { "plugin": 1, "network": 0.6 },
"tags": ["…"],
"preconditions": { "network": "no" },
"solutions": [
{ "id": "s-…", "method": "…", "scripts": [], "modelCalls": [],
"appliesTo": { "network": "no" }, "conflictsWith": ["s-…"],
"status": "active|superseded|conflicting",
"hits": 0, "failedAttempts": 0, "rootCauses": [] }
]
}
项目结构(零依赖,纯 JS)
dsh-self-memory/
├── entry.js # 公共出口
├── index.js # 核心实现 + 工具注册(含 schema 合法性守卫)
├── lib/
│ ├── store.js # JSON 持久化(v1 自动迁移 v2)
│ ├── search.js # 打分:加权关键词 + 泛化 + bigram + 前提匹配
│ ├── indexer.js # 倒排索引(快速候选集)
│ ├── norm.js # 关键词规范化 + 同义词 + 问题泛化
│ └── seed.js # 初始知识
├── tests/ # 单元测试(node:test,零依赖)
├── examples/ # 使用示例(如 import-demo.json)
├── cordis.patch.yml # bundle 装配补丁
├── LICENSE # MIT
└── package.json # dsh.bundle.patch -> cordis.patch.yml
存储位置
~/.dsh/self-memory/records.json({schema:2, records:[...]},v1 自动迁移)。
零运行时依赖,只用 Node 内建模块。
测试
node --test # 10 个单元测试:norm / search / store / schema(含防 400 事故的 schema 合法性测试)
许可证
MIT — 见 LICENSE。