现有的记忆插件(如 Mem0、Letta)倾向于让智能体记住一切。dsh-memory-forget 则执行相反的操作:将“遗忘”从故障变为设计。它为 AI 智能体提供了管理记忆生命周期的机制,包括 TTL、衰减、驱逐和审计。
定位¶
这是一个面向 AI 智能体的遗忘引擎,核心价值在于回答“何时遗忘”、“哪些记忆仍值得信任”、“注入多少上下文”以及“当前上下文包含什么”。该插件由 XIAOke8698 维护,采用 MIT 许可证,核心零依赖。
核心功能¶
- 可插拔内存总线:记忆即插入,遗忘即拔出。遗忘是协议操作,而非故障。
- 保质期与衰减:每个记忆都有 TTL 和基于 Ebbinghaus 曲线的衰减逻辑(活跃 -> 陈旧 -> 遗忘)。
- 重要性管理:支持显式标记 (
pin: true),或通过使用次数获得重要性(滑动更新机制,“用进废退”)。 - 可恢复性:支持将已遗忘的记忆恢复,恢复操作会产生新的 ID 和 TTL,并附带审计记录。
- 审计与隐私:默认物理删除内容,仅保留 SHA-256 哈希用于审计追踪。
- 硬注入预算:限制每次注入的 Token 数量(默认 2000),死记忆绝不注入,超预算时减少选择而非截断。
- Token 记账:提供
status()查询和preview()非接触式预览,用于成本核算。 - 多智能体作用域:支持工作区、会话、团队级作用域,子智能体死亡时自动拔除临时记忆。
- 轻量级与隐私优先:无 Embedding,无 LLM 重写,无服务器进程。默认物理删除。
安装与启用¶
通过 DSH 官方插件命令安装。确保运行环境为 Node.js >= 20。
dsh plugin --profile <name> add @xiaoke8698/dsh-memory-forget
卸载时使用 remove 命令,记忆数据会保留在工作区目录的 .dsh-memory-forget/store.json 中。
典型用法¶
作为库使用时,首先创建 AmnesiaEngine 实例。
import { AmnesiaEngine } from '@xiaoke8698/dsh-memory-forget'
const memory = new AmnesiaEngine({ restorable: true })
// 插入带保质期的记忆
const v = memory.plug({
content: 'validation drink is lapsang',
ttlMs: 60_000,
kind: 'preference',
tags: ['validation'],
})
// 输出包含 ID 和过期时间
// 查看健康状态(活跃/陈旧/遗忘计数及 Token 占用)
console.log(memory.status())
// 查询记忆会触发滑动 TTL(use it or lose it)
memory.recall('lapsang')
// 物理删除记忆
memory.unplug({ id: v.id })
// 恢复已遗忘的记忆(restorable 模式)
const back = memory.restore(v.id)
// 预算化注入选择(死记忆不入选)
const sel = memory.selectForInjection(2000)
console.log(sel.tokens, sel.skippedDead)
// 预览(不触发任何操作)
console.log(memory.preview())
持久化¶
引擎默认基于内存运行。若需持久化,需提供 StoreAdapter。
import { readFile, writeFile } from 'node:fs/promises'
import { AmnesiaEngine } from '@xiaoke8698/dsh-memory-forget'
const memory = new AmnesiaEngine({ restorable: false }, {
async load() {
try { return JSON.parse(await readFile('memories.json', 'utf8')) }
catch { return undefined }
},
async persist(items, audit) {
await writeFile('memories.json', JSON.stringify({ items, audit }))
},
})
await memory.ready
适用场景与注意¶
适合需要严格控制上下文长度、防止记忆污染(如过时事实、中毒记忆)以及需要审计追踪的场景。注意:当前版本引擎基于内存,需自行实现 StoreAdapter 以确保数据持久化;依赖 Node.js >= 20。