前言¶
DSH 的理念是「一切皆插件」,模型之外的记忆、工具、通道都靠插件拼。做长期陪伴类机器人(养成型伴侣,比如「大肥鱼」)时,常见做法是把聊天记录塞进数据库,或者直接套一个向量库做检索。前者没有遗忘,机器人记得越多越僵;后者检索回来的内容没有「记不清」这个概念,容易一本正经地编。
下面介绍 dsh-hippocampus,一个面向这类机器人的记忆层,维护者是 kianajunjie。它按人脑海马体的环节组织记忆,会遗忘、会随用户改口失效,也会承认自己记不清。
这是什么¶
- 插件名称:dsh-hippocampus
- 仓库:kianajunjie/dsh-hippocampus
- 维护者:kianajunjie
- 版本:0.3.1
- 许可证:MIT
- 运行要求:Node.js >= 22.5
- 分类:记忆
一句话定位:给长期运行的陪伴机器人提供记忆层,不是数据库存储,也不是向量库套壳。资料里的定性是「照着海马体抄的」,拆成事件编码、巩固、遗忘、联想、元记忆五个环节。
核心功能¶
事件记忆:把对话变成「谁、何时、发生了什么、什么情绪」。底层分事件、关系、事实、章节、技能/缺口几类表。
情绪加权遗忘:遗忘不是均匀的。资料里写的是「被凶那天的记忆能撑七个月,普通的一天一个半月就没了」;90 天实测,有情绪权重的旧记忆召回率 27%,去掉情绪权重只有 9%。
确定度:每条记忆带置信度,分「记得清 / 大概记得 / 只记得有这回事」。它不会把模糊的记忆说得斩钉截铁。
改口即失效:用户先说喜欢咖啡、后来说戒了,旧那条自动作废,不会自相矛盾。
关系层:跟每个人的亲密、信任,以及没解开的疙瘩。久不出现会淡,原谅了才解开。
按人隔离:A 看不到 B 的记忆,群聊看不到私聊。
平台无关:QQ、im、网页、Telegram 都可以接,同一人从几个门进来,记忆只有一份。底层靠 identities 表把身份统一成一个 subject。
零依赖:用 Node 内置 SQLite,一个本地文件就是全部记忆,不上传,不需要额外服务。
调用入口是 handleTurn():解析身份 → 组装 context → 召回,输出 r.context(塞进系统提示)和 r.recall(召回结果)。每天再跑一次 replay() 做巩固与遗忘。
安装与启用¶
直接用 npm 安装,适合直接调库或命令行:
npm i dsh-hippocampus
作为 DSH 插件启用(im / 网页接入):
dsh plugin --profile web add github:kianajunjie/dsh-hippocampus
package.json 里还声明了 dsh.bundle.patch 字段,指向 ./cordis.patch.yml,需要 dsh plugin 流程时留意这个补丁文件。
典型用法¶
直接调库
import { createHippocampus } from 'dsh-hippocampus'
const hip = await createHippocampus({ apiKey: process.env.DEEPSEEK_API_KEY })
// 每条消息
const r = await hip.handleTurn({ channel: 'qq', externalId: msg.user_id, text, reply })
// r.context → 塞进系统提示,r.recall → 召回结果
// 每天一次
await hip.replay()
先用 npm i 装包,再写这段。构造时传 apiKey,说明编码、召回的语义处理依赖模型;检索与整理本身走本地实现。
HTTP 接口(任何语言都能调)
import { createMemoryServer } from 'dsh-hippocampus/http'
await createMemoryServer({ hip, port: 7717, token: 'secret' })
curl -s localhost:7717/context -H 'authorization: Bearer secret' \
-H 'content-type: application/json' \
-d '{"channel":"telegram","externalId":"42","text":"我腿疼"}'
先起服务,再发 POST /context。鉴权走 Bearer,端口和 token 自己定。
命令行
node cli.mjs demo # 不需要模型,先看效果
node cli.mjs encode --turns turns.json
node cli.mjs replay
node cli.mjs context --subject 主人 "我腿疼"
node cli.mjs list 20 | audit | stats
demo 不碰模型,用来先看效果;encode 需要一份 turns.json 输入,replay 用来跑巩固与遗忘。npm test 有 26 项测试。
更多接入方式见 docs/integration.md,提示词配法见 docs/prompt.md,实测数据见 docs/bench.md。
适用场景与注意¶
适合:长期陪伴机器人、养成型伴侣,同一个人在多个入口(QQ、im、网页、Telegram)需要共用一份记忆,希望机器人有遗忘、有明确度、能随用户改口更新。
不适合:客服 FAQ、通用助理、多租户 SaaS、知识库问答。资料明确说这些场景用 RAG 更合适。
注意两点:
- 插件以当前 dsh 进程的权限运行。安装前应检查源码与许可证(本插件为 MIT),不要只凭目录页简介就装。
- 它管的是记忆,不是模型本身。构造时需要提供
DEEPSEEK_API_KEY,token 缺失时编码、召回跑不起来。
结尾¶
dsh-hippocampus 的价值在「会忘」和「会说记不清」这两点上:它不追求把每句话都存下来,而是按情绪、按改口、按确定度维护一份随时间变化的记忆,同时保持本地化、平台无关。对做陪伴类机器人的人来说,比「聊天记录表 + 向量检索」更贴近长期对话的形状。
目录页:https://www.skillhub.cn/plugins/kianajunjie/dsh-hippocampus
GitHub:https://github.com/kianajunjie/dsh-hippocampus