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

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

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

小夜