READMESource: main@dfe3447a
memory-companion — dsh 记忆与陪伴插件
⚠️ 纯 Vibecode 许愿式编程产物
参考 AstrBot 的 astrbot_plugin_memory_companion(我会牢牢记住你)与 astrbot_plugin_private_companion(我会永远陪着你),为 DeepSeek Harness (dsh) 打造的记忆 + 陪伴插件,并额外内置 QQ(OneBot 11 / snowluma) 接入。
功能
| 能力 | 说明 |
|---|---|
| 跨会话长期记忆 | 记忆持久化在 dsh 存储域中,重启不丢;按 owner 分域(桌面会话 = local,每个 QQ 号 = qq:<id>) |
| 分层记忆注入 | 每次模型请求前,把该 owner 的高权重记忆 + 陪伴状态作为 runtime-context 注入(按权重/半衰期排序,字符数受限) |
| 模型工具 | memory_remember / memory_recall / memory_forget / memory_list,让助手主动记、查、忘 |
| 自动沉淀 | 轮次结束后用 LLM 从对话摘录中抽取 0-3 条值得长期记住的用户信息(可关,默认开) |
| 好感度与心情 | 互动增长好感(每日封顶),按亲密度分档:初识→熟悉→亲近→默契→知己;心情由互动间隔推导 |
| 每日日记 | 每天的对话摘录在跨天后生成第一人称日记,/memory diary 查看 |
| 主动问候 | 可选:久未互动时让助手主动发一句问候(桌面会话 + QQ,默认关,支持静音时段与每日上限) |
| QQ 接入 | OneBot 11 正向 WebSocket(snowluma):私聊直接回复;群聊 @触发;每个 QQ 用户独立会话与记忆;支持人设 |
| 人类命令 | /memory status / list / search / add / forget / diary |
安装
本插件是一个 workspace bundle。在 dsh 会话里对助手说:
用 plugin_manager 的 install_bundle 安装 C:\DSH工作区\bot\memory-companion
或在 Web 界面的插件面板中安装该目录。安装后无需重启即会激活(HMR);若提示 restart-required,重启 dsh 即可。
配置
默认配置即可在桌面会话使用记忆功能。要开启 QQ,在 cordis.patch.yml 里(或在插件面板的配置中)设置:
- insert:
- id: memory-companion
name: '@local/dsh-memory-companion'
config:
provider: deepseek-official # 自动沉淀/日记/抽取用的 LLM 路由
model: deepseek-flash
autoCapture: true # 自动沉淀(轮次结束后抽取记忆)
diaryEnabled: true # 每日日记
proactiveEnabled: false # 桌面主动问候(默认关)
qq:
enabled: true # 总开关
url: ws://127.0.0.1:3001 # snowluma 的正向 WS 地址
accessToken: '' # snowluma 设置了 access_token 就填
persona: '' # QQ 人设;留空用内置默认(温暖伙伴+纯文本短句)
groupEnabled: true # 群聊(@机器人才回应)
allowedUsers: [] # QQ 号白名单,空 = 所有人
allowedGroups: [] # 群号白名单,空 = 所有群
proactiveEnabled: false # QQ 主动问候(默认关)
snowluma 对接
snowluma 需开启正向 WebSocket(forward WS)服务,例如监听 ws://127.0.0.1:3001。若配置了 access_token,本插件会通过 ?access_token=... 查询参数携带(snowluma/NapCat/Lagrange 等实现均支持)。断线自动重连(2s 起指数退避,上限 60s),每 60s 心跳探测。
QQ 消息的路由规则:
- 私聊:每条消息进入该用户的独立 dsh 会话(
session-qq-<QQ号>),回复自动发回私聊,长回复自动分段; - 群聊:仅在消息 @机器人 时触发,回复带 @发送者;
- 会话与记忆:每个 QQ 号有自己的记忆、好感度、日记,与桌面会话(
local)完全隔离;会话持久化,重启后自动 resume; - 工作目录:QQ 会话的 workspace 默认在
<DSH_HOME>/memory-companion-qq/<QQ号>,可用qq.workspaceDir改。
数据与隐私
- 所有数据存放在 dsh 存储域
memorycompanion(JSON/SQLite 后端由 dsh 配置决定;域名仅限小写字母数字),四张表:memories/diary/bindings/companions; - 自动抽取只保留跨会话仍然成立的用户相关信息,每轮最多 3 条、每条 ≤300 字,可在配置中整体关闭(
autoCapture: false); - 记忆注入默认最多 12 条 / 1500 字符,可调。
开发说明
- 代码结构:
index.js(装配)+lib/domain.js(存储域与纯函数)+lib/store.js(读写门面)+lib/memory.js(注入/工具/命令/自动沉淀)+lib/companion.js(日记/主动问候)+lib/onebot.js(QQ 适配器); - 纯函数冒烟测试:
node .tools/smoke-test.mjs(在上级bot/目录); - 仅使用 dsh 内置服务(
tools/systemPrompt/storageDomain/llm/commands/agents),无外部 npm 依赖。
已知限制
- 记忆检索是词法打分(标签命中 > 正文命中 > 重要度+时间衰减),不是向量检索;
- QQ 群聊只支持 @触发,不支持回复引用触发;图片/语音消息会被忽略(只取文本);
- OneBot 适配器按 OneBot 11 标准消息段与 CQ 码字符串两种格式解析,未经 snowluma 实机验证 —— 首次连接后请看 dsh 日志中的
memory-companion(onebot)条目排查。
No comments yet. Be the first to write one.