前言¶
在 DeepSeek Harness(DSH)里给陪伴型智能体加记忆,常见两难是:忘得太多会丢掉用户认真说过、希望被记住的细节;把每次闲聊都塞进下一轮,上下文迟早装不下。压缩、检索、分层能缓解容量问题,但对情感陪伴还要再问一层:存下来的,是不是这个人真正在意的?
通用记忆插件往往按内容类型、关键词或固定规则取舍。下面介绍社区插件 dsh-plugin-companion-memory(维护者 123zxs345),它把问题从「怎样少忘一点」推进到「怎样提炼重要信息」:主动维护用户画像,用三层结构存原始经历与提炼后的意义,相关才入选候选,并复用原生会话前缀与已有总结,减轻重复整理的开销。
这是什么¶
dsh-plugin-companion-memory 是面向 DeepSeek Harness 的选择性记忆插件,分类为「记忆」。项目描述为:主动用户画像、三层渐进披露、会话缓存与总结复用(Selective companion memory for DeepSeek Harness)。
插件不把用户定型:画像帮助理解「你看重什么、希望怎样被对待」,用户当下的表达优先;重要性由后台模型结合画像与情境判断,而不是按情绪分数或固定遗忘天数硬筛。
核心机制¶
README 用一张表概括设计,要点如下。
| 机制 | 作用 |
|---|---|
| 主动维护用户画像 | 新经历补充或修正理解;完整画像始终参与后台取舍,不依赖本轮检索碰运气。 |
| 原始记忆 → 提炼记忆 → 简短总结 | 保留原话与来源;提炼意义和适用情境;短总结作为检索入口。 |
| 相关才入选 | 只比较简短总结的语义相似度,达标才进入候选,最多 24 条,可以是 0 条。 |
| 渐进披露 | 模型自行决定先看提炼内容,还是进一步核对原始来源。 |
| 缓存与总结复用 | 复用刚完成的原生会话前缀、已有总结与阶段结果,减少重复整理。 |
聊天时,插件向宿主模型提供 recall_memory 与 read_memory:先看到摘要,需要时再展开意义或原话。后台模型决定记忆的保留、提炼、合并与修正;执行层检查来源、容量、依赖与事务一致性。记忆落在本地 SQLite;启用 Hindsight 时,短总结也会送到你配置的检索服务。插件不额外保存宿主 API 密钥,也不自动下载嵌入模型。
默认在安静约 15 秒后尝试整理;持续聊天时,从首个完整待整理交互起最多等待 60 秒,生成回复期间会等待其结束。普通闲聊可以不形成长期记忆。未配置检索服务时,本地 SQLite 与后台画像维护仍保留,经历候选为空,不用无关内容补位。
安装与启用¶
已验证环境:Node.js 24+、DeepSeek Harness 0.2.1-rc.2、Cordis 4.0.5。先在宿主中配置好模型与凭据,插件复用宿主,不需要再填写模型 API Key。
在常用的 web profile 中安装发布包(当前资料中的版本为 v0.3.2):
dsh plugin --profile web add https://github.com/123zxs345/dsh-plugin-companion-memory/releases/download/v0.3.2/dsh-plugin-companion-memory-0.3.2.tgz
也可以从固定版本的 Git 仓库安装:
dsh plugin --profile web add "git+https://github.com/123zxs345/dsh-plugin-companion-memory.git#v0.3.2"
安装后重启 dsh web。组合包会在当前 profile 下加载 companion-memory,数据保存在该 profile 的 companion-memory/ 目录。仓库内包含可安装的编译结果,使用者无需先构建源码。
使用 DSH「自定义插件索引」时,可在「发现 → 添加索引源」填入:
https://raw.githubusercontent.com/123zxs345/dsh-plugin-companion-memory/main/market/index.json
语义召回依赖宿主已有的 Hindsight chunks 服务。在当前 profile 的 cordis.patch.yml 中配置地址(资料原文示例;补丁会替换整个 config,请保留数据目录及已有自定义项):
- id: companion-memory
config:
dataDir: !!js "ctx.get('profileContext').dir + '/companion-memory'"
companionId: default
idleReviewSeconds: 15
reviewMaxDelaySeconds: 60
candidateBudget: 24
minimumSimilarity: 0.55
contextTokens: 800
hindsightUrl: http://127.0.0.1:8888
将 hindsightUrl 换成你的实际服务地址。默认面向单一主人的 profile;多用户部署应使用隔离作用域、独立 companionId 和数据目录。
典型用法示意¶
README 中的虚构示例(说明提炼与「当前表达优先」):
用户:以后我说累了,先听我吐槽两句,别急着给建议。
模型可将其提炼为:疲惫时希望先被倾听,并保留适用情境与原话依据。另一天用户说「今天我想听听你的办法」时,按当天需要回应,也可修正已有理解。
卸载插件(数据目录默认保留,是否删除由你决定):
dsh plugin --profile web remove dsh-plugin-companion-memory
卸载后需重启宿主。
程序化接入(可选)¶
在创建或恢复宿主 Agent 之前加载插件(摘自 README):
import { resolve } from 'node:path';
import CompanionMemory from 'dsh-plugin-companion-memory';
await root.plugin(CompanionMemory, {
dataDir: resolve('.dsh-companion-memory'),
companionId: 'my-companion',
hindsightUrl: 'http://127.0.0.1:8888',
candidateBudget: 24,
minimumSimilarity: 0.55,
});
root 为已有 Cordis Context,需提供 agents、systemPrompt、tools、llm 等服务。插件不替换宿主人设。可通过 root.companionMemory.reviewNow('preview') 预览整理计划,applyPreview() 应用,userProfile() 读取画像。设置 idleReviewSeconds: 0 可关闭自动调度,保留手动整理。更完整的架构说明见仓库 docs/architecture.md。
适用场景与注意¶
适合谁: 在 DSH 上做长期情感陪伴、希望关系能「接着上一次相处」、又需要控制上下文体积的开发者。插件理念是理解这个人、提炼在意的事,用 evolving user profile 与分层召回保持连续性,而不是堆满无关历史。
生态说明: DSH 主张「一切皆插件」;社区目录 SkillHub 插件页 为独立站点,与 DeepSeek / 幻方无官方从属关系,不要当作官方应用商店。
安装前请知悉: 插件以当前 DSH 进程权限运行,会读写 profile 下数据目录并调用你配置的模型与 Hindsight 服务。安装前应自行查看 GitHub 源码 与 MIT 许可证。删除插件记忆不等于删除宿主原始聊天或微信、QQ 等平台记录。缓存是否实际命中由模型提供商决定,插件不承诺固定命中率。
结尾¶
经过上面的步骤,你可以在 web profile 里加载 dsh-plugin-companion-memory,用画像与三层选择性记忆让陪伴对话更连贯,同时把无关闲聊挡在候选之外。介绍视频见 B 站 BV1G1436xEp4;索引与详情见 SkillHub 目录页 与 GitHub 仓库。