dsh-hippocampus:给养成型伴侣机器人加一层会遗忘的记忆

前言

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 更合适。

注意两点:

  1. 插件以当前 dsh 进程的权限运行。安装前应检查源码与许可证(本插件为 MIT),不要只凭目录页简介就装。
  2. 它管的是记忆,不是模型本身。构造时需要提供 DEEPSEEK_API_KEY,token 缺失时编码、召回跑不起来。

结尾

dsh-hippocampus 的价值在「会忘」和「会说记不清」这两点上:它不追求把每句话都存下来,而是按情绪、按改口、按确定度维护一份随时间变化的记忆,同时保持本地化、平台无关。对做陪伴类机器人的人来说,比「聊天记录表 + 向量检索」更贴近长期对话的形状。

目录页:https://www.skillhub.cn/plugins/kianajunjie/dsh-hippocampus

GitHub:https://github.com/kianajunjie/dsh-hippocampus

羽毛球分组比赛记分
小程序二维码

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

小夜