前言¶
在 DeepSeek Harness(DSH)里跑智能体时,上下文窗口始终是硬约束。把整段对话历史原样塞回下一轮,很快就会撞上限;只留一个摘要文件,细节又容易丢。社区插件按「一切皆插件」的思路扩展能力;目录在 SkillHub 这类独立站点上架,与 DeepSeek / 幻方无官方从属关系。
下面介绍维护者 cycocyco 的 alice-memory:会话结束后自动捕获值得记的内容,下一轮按语义相关性静默召回,并暴露显式工具供手动记、查、删。插件分类为「记忆」,当前 GitHub 星标为 0;npm 包名 dsh-alice-memory,版本 3.0.0,许可证 MIT。
这是什么¶
一句话:给 DSH 用的长期记忆插件——自动捕获、向量 + FTS5 混合召回、零 npm 运行时依赖,纯 Node(node:sqlite),不需要 Python 或独立数据库进程。
它针对两种常见做法的缺口:全量注入会占满 token;纯摘要会丢过程细节。alice-memory 把正文落在本机 SQLite,用 embedding 做语义检索,用 FTS5 兜住专有名词和字面匹配,并按热度分成 hot / warm / cold,避免每条记忆每轮都扫全库。
核心功能¶
自动捕获¶
每轮结束时判断对话是否值得记:过滤「好的」「继续」、斜杠命令、插件自己的注入;压缩成长度受限的问答文本,脱敏后写入库。配置项 capture.min_prose、capture.daily_cap 等可在 config.json 中调整(见安装与配置)。
混合召回¶
用户本轮输入会先算 embedding(默认 6s 超时),再在 hot + warm 内存向量块里扫描,同时跑 FTS5 全文;命中不足时 worker 在预算内扫冷层。两路排名用 RRF 融合(README 给出向量 1.0、全文 0.35、冷层 ×0.8 等权重)。默认 recall.limit 为 3,recall.max_chars 为 400,控制注入上下文的体量。
记忆分层¶
按时间衰减与被强化次数计算热度,划分 hot / warm / cold / archive。默认 memory.hot_max 3000、memory.warm_max 12000,只有 hot + warm 常驻一块连续 Float32Array;冷层不占这块内存,需要时再扫盘。
显式工具¶
除静默召回外,插件注册四个工具(README 表述为「三个(其实是四个)」):
| 工具 | 用途 |
|---|---|
alice_memory_save |
用户要求「记一下」时手动写入,默认 pinned、不衰减 |
alice_memory_recall |
主动检索 |
alice_memory_forget |
按 id 或子串删除,同步向量与墓碑 |
alice_memory_prune |
清理长期未召回的冷记忆,默认仅预览,需 token 或 force 才真删 |
数据与隐私¶
单库文件 <data_dir>/memories.sqlite3(WAL),正文、向量、墓碑、FTS 同库。默认 data_dir 为空时使用 $DSH_HOME/alice-memory。
要点有三条(来自 README「隐私」节):
- 向量检索会把记忆正文发给配置的 embedding 服务商;可改
embedding.url指向自托管或本地兼容接口。 - 默认脱敏会替换常见密钥形态后再入库,属兜底而非绝对安全。
- 库文件在本地,插件 README 声明不联网上传、不统计。
安装与启用¶
要求 Node ≥ 24(node:sqlite 从 24 起稳定)。装完重启 DSH,插件会自行建库并建索引,无需单独初始化脚本。
尚未发布到 npm,从 GitHub 安装(命令摘自仓库 README):
dsh plugin --profile <你的 profile> add github:cycocyco/alice-memory
本地联调源码时,README 给出 file:/absolute/path/to/alice-memory 方式;按你的任务约束,正文不展开 git clone 步骤。
插件在 当前 dsh 进程权限 下运行,安装前建议自行审阅 仓库源码 与 MIT 许可证。
配置¶
开箱即用,默认值在 lib/config.mjs。要覆盖时,将 config.example.json 复制为插件目录下的 config.json。优先级:环境变量 > config.local.json > config.json > 内置默认。
示例结构(字段含义以 README 为准):
{
"data_dir": "",
"scope_id": "default",
"api_key_env": "SILICONFLOW_API_KEY",
"embedding": {
"url": "https://api.siliconflow.cn/v1/embeddings",
"model": "BAAI/bge-m3",
"dimensions": 1024
},
"recall": { "limit": 3, "timeout_ms": 6000, "max_chars": 400 },
"capture": { "min_prose": 25, "daily_cap": 150 },
"memory": { "hot_max": 3000, "warm_max": 12000, "half_life_days": 45 }
}
API key 建议放在 $DSH_HOME/.env,例如:
SILICONFLOW_API_KEY=sk-...
更换 embedding 模型或 dimensions 会导致全库重嵌,选型前需想清楚。
典型用法¶
在对话里¶
依赖 DSH 把工具暴露给模型:用户说「记住以后都用 pnpm」会走 alice_memory_save;「回忆一下上周那个方案」走 alice_memory_recall;「删掉关于 X 的记忆」走 alice_memory_forget;「整理记忆」走 alice_memory_prune(先预览再确认)。
命令行排查¶
插件提供 alice-memory 可执行文件,常用示例如下:
alice-memory status
alice-memory doctor
alice-memory recall "上周说的那个方案"
alice-memory remember "以后都用 pnpm" --title 包管理
alice-memory forget --id <id>
alice-memory prune --days 90
alice-memory export dump.jsonl
doctor 会真实请求一次 embedding,用于确认 key 与接口可用;export 便于人工查看或迁移。
适用场景与注意¶
更适合:长期在同一 profile 下做项目助手、个人偏好与过程性结论需要跨会话保留,且能接受为 embedding 配置 API(或自建兼容端点)的场景。上万条量级时,分层 + 混合检索比全量 Markdown 注入更可维护。
需要提前想清楚:
- 必须有可用的 embedding 服务(或本地兼容实现),这是语义召回的前提,也带来费用与出网范围问题。
- 冷层召回受 README 所述时间预算约束,老记忆的延迟可能高于热区。
- 实现复杂度高于「单文件摘要」方案,出问题时可依赖
status/doctor/ CLIrecall分解耗时。
README 在 Windows 11、Node 26、约 1 万条 × 1024 维库上给出端到端召回约 289ms 的实测参考;你的环境会以网络 embedding 延迟为主。
结尾¶
alice-memory 把 DSH 会话变成可检索、可分层、可导出的 SQLite 记忆库:自动捕获减人工,RRF 混合召回兼顾说法变化和字面命中,四个显式工具保留可控性。零第三方 npm 依赖、单文件 SQLite,适合想在自建 Harness 上补长期记忆、又不愿再起一套向量数据库服务的开发者。