前言¶
在 DeepSeek Harness(DSH)里跑长对话时,上下文会随轮次线性变长:要么迟早触达窗口上限,要么靠摘要、向量检索等方式「省地方」,但摘要仍占 token,向量库往往还留着原文分块。Full-Life Memory 是社区维护者 Toctsu 发布在 DSH 插件目录(分类:记忆)里的一款插件,npm 包名为 @tuhengyu/dsh-full-life-memory,当前 README 标注版本 0.7.1,MIT 许可。它的思路是:不存对话原文,只把旧轮次蒸馏成关键词与 seed token 线索写入 SQLite;需要时再交给模型按线索「想起」场景,同时通过 DSH surface 节点替换把被折叠的历史从下一轮请求里物理移除。下面介绍它解决什么问题、如何运转,以及安装与配置要点。
这是什么¶
Full-Life Memory 是给 DeepSeek Harness 用的「仿生终身记忆」插件。自述目标是:上下文快满时把旧对话折叠成少量线索并从会话 surface 删除;用户再提起相关话题时,顺着线索重建一段回忆提示,而不是把整段原文或 embedding 检索结果塞回上下文。
与全量保留、LLM 摘要压缩、向量 RAG 等做法相比,README 强调三点差异:遗忘阶段用正则蒸馏、不调用模型(0 token 计费);落盘只有 keywords、seed_tokens 和摘要,没有 message 正文与向量;折叠走 surface 替换,被切节点不再进入后续请求,而不是仅在 system 里要求模型忽略更早内容。
维护与源码:https://github.com/Toctsu/dsh-full-life-memory。目录页:https://www.skillhub.cn/plugins/Toctsu/dsh-full-life-memory(社区站点,与 DeepSeek / 幻方无官方从属关系)。
核心功能¶
自动遗忘(Phase 2,默认开启)¶
在 agent/pre-step 阶段用 tokenMeter.measure(session) 估算上下文。当 token 达到配置的阈值(默认 8000)且已完成轮数足够时,保留最近若干轮(默认 4 轮),对最老的若干轮(默认 2 轮)做折叠:
- 用规则从文本里抽取引号原话、路径、标识符、中文短语等,得到
keywords与seed_tokens(不经过 LLM)。 - 线索写入 SQLite 文件(默认
~/.dsh/full-life-memory/memory.db,WAL 模式)。 - 通过 surface 替换,把被折叠的多条节点收成一条 checkpoint,并在界面侧出现「记忆已折叠」类提示。
手动回忆(Phase 1)¶
安装后为会话提供 recall_from_clues 工具。从线索库按配置取回若干条(默认 limit: 5,上限 20),组装回忆提示,字符总长受 maxPromptChars(默认 1800)限制,超出会截断并标注更早线索已淡忘。
多场景与群聊隔离¶
全局 YAML 可设 sceneOverrides,键为会话 header.agentPreset(小写);未匹配时可退回 header.origin 或 default。场景内未写字段继承全局;enabled: false 时该场景跳过折叠。也可用 sceneMap 用正则匹配 preset、origin、会话 id、cwd,给未设 agentPreset 的桥接兜底。
Phase 3 支持 isolateByUser:从用户消息前缀识别发送者(可配置 senderPatterns),折叠时把本人对话记为私有线索,他人对话可记为全群共享或丢弃(othersAsGlobal)。召回 scope 支持 auto / user / global。isolationScope 可选 user(跨群同人共享)或 user+scene(同群才共享私有线索)。
生态外消费同库¶
仓库含 AstrBot 侧插件与 flm CLI,可读写同一 SQLite,供 NapCat / AstrBot 等不经 DSH 主链路的场景使用;DSH 不在场时,Full-Life Memory 的 Host 内钩子不会执行,需按 README 选择 AstrBot 插件或 CLI 接入。
安装与启用¶
环境要求:Node.js ≥ 24(README badge)。与 @deepseek-ai/dsh-agent、@deepseek-ai/dsh-tools 的 peer 兼容区间为 >=0.2.1-rc.2 <0.3.0。
官方 README 给出的安装方式为 bundle / link 安装(将 <本目录的绝对路径> 换成本地克隆或解压后的插件目录绝对路径):
plugin_manager { action: "install_bundle", target: "<本目录的绝对路径>" }
装完后需重启一次 DSH。README 说明:link 安装下改代码不必重装,但需重启 Host 才会重新加载模块。
插件以当前 DSH 进程权限运行;安装前应自行审阅 GitHub 源码与 MIT 许可证,确认线索库路径与自动删除历史的行为符合你的安全与合规要求。
配置示例¶
在 DSH 插件配置中插入(字段含义以 README 表格为准):
- insert:
- id: full-life-memory
name: '@tuhengyu/dsh-full-life-memory'
config:
dbPath: '~/.dsh/full-life-memory/memory.db'
limit: 5
maxPromptChars: 1800
autoForget: true
forgetThresholdTokens: 8000
forgetTurns: 2
keepCompletedTurns: 4
sceneOverrides: {}
群聊示例(更早触发折叠、按人隔离):
sceneOverrides:
qqbot:
enabled: true
forgetThresholdTokens: 4000
keepCompletedTurns: 1
isolateByUser: true
设置页提供「Settings → 终身记忆」与插件详情页配置区两处入口,可与手写 YAML 并用。
典型用法¶
DSH 内¶
长对话过程中插件在 token 超阈值时自动折叠;模型或用户可通过 recall_from_clues 在提到旧事时拉取线索。折叠后上下文里会出现 checkpoint,旧轮次不再随请求发送。
flm CLI(JSON 输出)¶
全局安装 npm 包后可使用(README 示例):
npm i -g @tuhengyu/dsh-full-life-memory
flm recall --text "你还记得上次那个数据库吗" --user 10001 --scene qqbot
flm remember --keywords "数据库,sqlite" --seed "用 node:sqlite 存线索" --user 10001
flm stats
AstrBot¶
将 db_path 指向与 DSH 相同的 memory.db,在触发词命中时回忆并注入 system_prompt;安装方式见仓库 astrbot/README.md。
适用场景与注意¶
适合:需要长时间单 Session 对话、希望降低上下文与 KV 占用、又愿意用「线索 + 模型重建」代替原文或向量检索的 DSH 用户;QQ 群等碎片消息多、需按人或按场景调节折叠策略的场景。
注意:
- 线索是规则蒸馏结果,不是无损存档;关键事实若只存在于被切除的原文且未进入线索,可能无法完整找回。
- 群聊桥接必须按群复用 DSH Session,且发送者格式需可被识别;纯昵称作键不稳定,README 建议桥接带上 QQ 号形式前缀。
forgetThresholdTokens优先用ctx.tokenMeter;无该服务时按字符粗估。- 若整条链路不经过 DSH,应使用 AstrBot 插件或
flm,而非指望 Host 内钩子。
结尾¶
Full-Life Memory 把「遗忘」做成零 LLM 成本的正则蒸馏 + surface 物理切除,把「回忆」做成线索查询与提示重建,在 DSH 插件生态里提供了一条与向量 RAG 不同的记忆路径。进一步了解可查看目录页 dsh-full-life-memory 与源码仓库 Toctsu/dsh-full-life-memory。