为机器人建立长期记忆,按 QQ 号认人并分层召回
30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/27 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/k423xilin/dsh-Abyssal-Node-memory.git状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 8 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 2 处,展示前 2 条)
- 发起网络请求index.js:123
const r = await fetch(cfg.ollamaUrl + '/api/embed', { - 删除本地文件test.js:71
fs.rmSync(dir, { recursive: true, force: true })
扫描于 2026/11/2(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
dsh-Abyssal Node-memory:给 Koishi 的持久记忆循环,含全文索引、会话归档、双层记忆、倾向、边界、QQ 号身份。
README
由 DeepSeek 最新模型翻译生成dsh-Abyssal Node-memory · 记忆循环系统
给 Koishi 机器人用的长期记忆层。
一个文件、一个 SQLite 数据库、不依赖云服务。只有向量化会调本机 Ollama,其余全是 SQL。
全文索引 · 会话档案 · 两层记忆 · 倾向 · 界限 · 按 QQ 号认人 · 记忆门
它解决什么问题
大模型本身不记事。所谓「机器人记得」,其实是两件事做对了:
1. 写:会话还活着的时候,值得留的东西落到了磁盘;
2. 读:下一次被重新拼进提示词的时候,那条东西递到了正确的位置。
这个插件只做这两件事,外加不让它们互相污染。它是从一个长期在跑的机器人身上抽出来的,里面每一条设计决定都是踩过坑之后才定下的。
展开完整文档(README 剩余 1 节)
dsh-Abyssal Node-memory · 记忆循环系统
给 Koishi 机器人用的长期记忆层。
一个文件、一个 SQLite 数据库、不依赖云服务。只有向量化会调本机 Ollama,其余全是 SQL。
全文索引 · 会话档案 · 两层记忆 · 倾向 · 界限 · 按 QQ 号认人 · 记忆门
它解决什么问题
大模型本身不记事。所谓「机器人记得」,其实是两件事做对了:
1. 写:会话还活着的时候,值得留的东西落到了磁盘;
2. 读:下一次被重新拼进提示词的时候,那条东西递到了正确的位置。
这个插件只做这两件事,外加不让它们互相污染。它是从一个长期在跑的机器人身上抽出来的,里面每一条设计决定都是踩过坑之后才定下的。
八层结构
| 层 | 表 | 作用 |
| 全文索引 | dsh_msg_text + dsh_msg_fts | 按词找原话(FTS5 trigram,中文可搜) |
| 会话档案 | dsh_archive | 一次谈话一条:标题 / 要点 / 消息数 |
| 两层记忆 | dsh_memory2 | 短期池 + 长期库,带「意义」与重要度 |
| 倾向 | dsh_tendency | 同类事件够多 → 一条「它会怎么做」 |
| 界限 | dsh_boundary | 用户划过的线,第 3 次升级,14 天不犯淡出 |
| 认人 | dsh_person / _name / _group | 按 QQ 号认人,昵称只是标签 |
| 记忆门 | 无表 | 一句话打分,够分才翻记忆 |
| 向量 | dsh_vec + Ollama bge-m3 | 按意思召回(异步、可关) |
私聊 / 群聊隔离:dsh_msg_text.scene(private / group / legacy),召回时只翻当前场景 —— 私聊里不会冒出群里的闲话,反之亦然。
装上
npm install koishi-plugin-dsh-abyssal-node-memory
plugins:
dsh-memory:
dbPath: data/koishi.db
ownerQQ: '你的QQ号'
不用 npm 也行 —— 把 index.js 放进本地插件目录:
app.plugin(require('./dsh-memory'), {
dbPath: 'data/koishi.db',
ownerQQ: '你的QQ号', })
要求:Node 22+(用内置的 node:sqlite)、Koishi 4.18+。
向量可选:
ollama pull bge-m3
没有 Ollama 也能用 —— 全文索引、档案、两层记忆、倾向、界限、认人全都走 SQLite。
配置
| 键 | 默认 | 说明 |
| dbPath | data/koishi.db | 数据库路径(与 Koishi 共用一个) |
| ownerQQ | — | 必填,主人 QQ |
| ownerName | owner | 注入文案里怎么称呼他 |
| embedModel | bge-m3:latest | Ollama 嵌入模型 |
| ollamaUrl | http://127.0.0.1:11434 | |
| enableTools | true | 注册 dsh-memory.status |
| enableInject | true | 每轮注入旧事 / 倾向 / 界限 / 认人 |
| enableTimers | true | 索引 / 档案 / 衰减 定时器 |
| memGateThreshold | 3 | 记忆门门槛,越大越少翻 |
| memMinImportance | 0.35 | 召回的最低重要度 |
| indexIntervalMs | 600000 | 索引补齐 |
| archiveIntervalMs | 86400000 | 会话归档 |
| tendencyIntervalMs | 86400000 | 倾向提取 |
| boundaryIntervalMs | 86400000 | 界限淡出 |
| tendencyMinHits | 3 | 同类事件最少次数 |
| tendencyMinRatio | 0.66 | 主导反应占比 |
| boundaryPromoteAt | 3 | 第几次升级成硬界限 |
| boundaryFadeDays | 14 | 多少天不犯就淡出 |
| keepVectorDays | 90 | 向量保留天数 |
| maxTextLen | 1200 | 单条入库上限 |
给宿主用的 API
全部挂在 ctx.dshMemory:
ctx.dshMemory.memGate(文本) // { need, score, why }
ctx.dshMemory.extractKeywords(文本)
ctx.dshMemory.keywordSearch(db, '码头', 3, 'private')
ctx.dshMemory.archiveSearch(db, '画', 2, 'group')
ctx.dshMemory.mem2Add(db, 内容, 意义, 4.5) // 4 分以上直接进长期
ctx.dshMemory.mem2Recall(db, '看海', 2, 'private')
ctx.dshMemory.tendList(db, 4)
ctx.dshMemory.boundaryNote(db, 它说的, 他说的) // 记一次「过了」
ctx.dshMemory.boundaryHit(db, 他这句话)
ctx.dshMemory.personSeen(db, qq, 昵称, 是否私聊, 群号, 最后一句)
ctx.dshMemory.personById(db, qq) // 含昵称历史
ctx.dshMemory.personContext(db, qq, 昵称, 是否私聊, 群号)
ctx.dshMemory.vecSearch(db, 'msg', '关键词', 8, 'private')
ctx.dshMemory.indexBatch(db, 200)
宿主只需要做三件事:
① 每条消息:personSeen(...),并把原文放到插件能读到的地方 ② 每次调模型前:memGate() 判断要不要翻,然后 keywordSearch / mem2Recall ③ 每 10 分钟:indexBatch() 补索引
五个设计决定
认人只看 QQ 号。 昵称会改,也会有人冒充。有人把昵称改成主人的名字,照样认得出来。
私聊和群聊不混。 scene 在入库时按会话标识判定;判不出来的标 legacy, 不参与召回 —— 宁可少记,不许串台。
简单的话不翻记忆。 「在吗」「早」「晚安」直接回;「你还记得上次…」才翻。
打分:提旧事 +4、约定 +3、指代 +2、寒暄 −5。
倾向不是设定。 同类事件满 3 次、且某种反应占 66% 才成立;之后 3 次反向自动退休。
界限要三次。 前两次只记一笔,第三次才升级,14 天不犯淡出。
验证
dsh-memory.status
→ 索引 4878 / 档案 147 / 记忆 4 / 倾向 0 / 界限 2 / 认得的人 20
[记忆] 表已就绪(data/koishi.db) [记忆] 索引 {"text":18,"archive":1,"mem":0}
常见问题
| 现象 | 原因 | 处理 |
| 检索返回 0 | 关键词只有 1 个字 | 至少 2 字;2 字走 LIKE,3 字以上走 FTS |
| 向量搜不到 | Ollama 没跑 | ollama serve,确认 11434 在听 |
| 记忆不增长 | text_cursor 卡住 | 删 dsh_meta 里那行,重建索引 |
| 私聊翻不到群聊旧事 | 这是设计 | 想放开就改调用处的场景判断 |
| 老库缺列 | 结构没升级 | init() 里有 ALTER TABLE ADD COLUMN,跑一次即可 |
许可
MIT。随便用、随便改、随便卖。唯一的要求:别把 boundary 表(用户划过的线)当训练数据。
English README预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
k423xilin/dsh-Abyssal-Node-memory
为机器人建立长期记忆,按 QQ 号认人并分层召回
相关插件 · 平台集成
智能体工程课walkinglabs/learn-harness-engineering
一门项目制课程,教你搭建环境、管理状态、做验证、加控制机制,让 AI 编程智能体稳定干活。
★ 21,155已汉化DSH
71.7
视频翻译配音liuzhao1225/YouDub-webui
开源视频本地化工作台:导入视频,识别、翻译并逐句克隆原声,生成字幕和配音成片。
★ 5,778已汉化Cordis
71.4
失败经验库Ikalus1988/MisakaNet
📚 零依赖、由 git 支撑的微课程库,让 AI 智能体异步分享并检索经过验证的调试经验。| https://misakanet.org
★ 550已汉化DSH
71.2
桌面智能体工作区freestylefly/wesight
WeSight 是开源桌面控制台,面向本地 AI 智能体。它帮你安装或复用 Claude…
★ 933已汉化MCP
71
IM 机器人接入xmanrui/dsh-im
让 DeepSeek Harness 触手可及 Connecting DeepSeek Harness
★ 3,110已汉化DeepSeek 客户端
70.9
中国平台研究引擎Jesseovo/last30days-skill-cn
给 AI Agent 的中文互联网研究 Skill:检索 8 大平台最近 30…
★ 2,031已汉化DSH
70.7