現有的記憶插件(如 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。