🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

冷热记忆 sutanglime/dsh-companion-memory

DeepSeek Harness
sutanglime6 天前有提交已提供中文文档扫描:含敏感能力

自动归档对话并按线索召回旧事,压缩每轮上下文

30.6/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/29 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add sutanglime/dsh-companion-memory
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · chat
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 6 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件
查看扫描证据(共 3 处,展示前 3 条)
  • 读取本地文件
    lib/archive-index.js:121
    this.lastFileBytes = (await stat(store.archivePath)).size
  • 读取本地文件
    lib/archive-index.js:143
    bytes = (await stat(store.archivePath)).size
  • 删除本地文件递归
    selfcheck.mjs:543
    await rm(dir, { recursive: true, force: true, maxRetries: 10, retryDelay: 50 })
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

DeepSeek Harness 的陪伴 AI 冷热记忆:自动归档对话、渐进降温、线索触发召回、1600 token 记忆快照。

README

由 DeepSeek 最新模型翻译生成
dsh-companion-memory 陪伴 AI 的冷热分层记忆 DSH 插件:全自动归档对话、旧事渐进冷存、按用户线索从冷库召回,并在每轮请求发出前用一个有预算上限的记忆快照替换掉「每次都重读全部旧对话」。 设计思路来自公开方案 Companion-AI-Memory-Context-Token-Optimization。 本插件是独立实现:代码与提示词均为自行编写,未复制上游文本或代码。 上游仓库未声明 LICENSE,再分发时请保留本说明并自行评估。 它做什么 | 机制 | 实现 | | 全自动归档 | 订阅 session/event 提交后事件流,每轮用户与助手原文追加进 archive.jsonl | | 冷热分层 | pinned / hot / cold 三层,tier 只决定调用位置,原文归档不动 | | 热度公式 | heat = 0.45F + 0.35R + 0.20O,F 为去重且每日封顶的有效提及频率 | | 渐进冷却 | 细节(≤72h) → 摘要(≥24h 可用后) → 冷库(候选宽限期 7 天 + 热度 <0.30 或 14 天未提及) | | 线索召回 | 双通道:记忆卡 0.80S + 0.20C(自带维度索引)+ 归档原文 BM25 词法检索;都不惩罚年代 |
展开完整文档(README 剩余 1 节)
dsh-companion-memory

陪伴 AI 的冷热分层记忆 DSH 插件:全自动归档对话、旧事渐进冷存、按用户线索从冷库召回,并在每轮请求发出前用一个有预算上限的记忆快照替换掉「每次都重读全部旧对话」。

设计思路来自公开方案 Companion-AI-Memory-Context-Token-Optimization。
本插件是独立实现:代码与提示词均为自行编写,未复制上游文本或代码。
上游仓库未声明 LICENSE,再分发时请保留本说明并自行评估。

它做什么

| 机制 | 实现 |
| 全自动归档 | 订阅 session/event 提交后事件流,每轮用户与助手原文追加进 archive.jsonl |
| 冷热分层 | pinned / hot / cold 三层,tier 只决定调用位置,原文归档不动 |
| 热度公式 | heat = 0.45F + 0.35R + 0.20O,F 为去重且每日封顶的有效提及频率 |
| 渐进冷却 | 细节(≤72h) → 摘要(≥24h 可用后) → 冷库(候选宽限期 7 天 + 热度 <0.30 或 14 天未提及) |
| 线索召回 | 双通道:记忆卡 0.80S + 0.20C(自带维度索引)+ 归档原文 BM25 词法检索;都不惩罚年代 |
| 预算约束 | 快照 1600 tokens = 固定 160 / 活跃 960 / 召回 480,互不借用 |

工具

- memory_remember — 写入/更新一条记忆卡(带来源片段、主题、维度索引)。
- memory_recall — 按用户线索检索冷库,两条通道一起查:记忆卡(带维度索引、强精确匹配优先)与归档原文(BM25 词法,返回命中片段)。返回 matched / ambiguous / not_found,候选与正文共用 ≤3 条、≤480 tokens。
- memory_forget — delete(连归档副本一起清)、supersede(更正并保留旧版本)、 recall_only(问到再说)、unpin、allow_normal。
- memory_continuity — 写入基础人格与当前相处状态;reset: true 在用户明确要求时清空两者。
- memory_archive — stats 归档量与会话分布、backfill 从会话日志回填历史轮次、 purge 清理本插件归档副本(按会话 / 按时间 / 全部,需用户明确依据)。
- memory_status — 各层条目数、Top 热度、预算余量、最近一次冷却结果。

删除与更正会立即让已授权的召回副本失效,不需要等 30 分钟许可到期。

全自动对话归档怎么工作

- 订阅 session/event(post-commit 的追加事件流),只取 user/message 与 assistant/message;工具结果、系统消息与推理不入档。
- 正文优先用 Session 自带的 deriveEventMessage(event) 还原,失败时退回事件 data,并以 content / blocks / parts 三种命名的容错方式读取文本块。
- 业务上下文会被标记:harness 把运行时上下文、时间戳与注入块也作为 user 消息写进日志。
这些条目标记为 system_context: true,可与用户真实发言区分(实测在历史日志中约占 user 消息的 1/3)。
- turn / step 由 turn/start、step/start 事件推进的游标补齐,用户消息也能正确归属轮次。
- 水印按 (session_id, seq) 记录,写入成功后才推进,所以同一条不会重复入档;进程异常退出漏掉的轮次可以用 memory_archive 的 backfill 幂等补回。
- 回填通过 ctx.sessionQuery 读取历史会话日志;首次建议手动执行一次 backfill。

归档原文怎么被召回(词法索引)

archive.jsonl 会建一份内存倒排索引,作为 memory_recall 的第二条通道:

- 只索引对话轮次:system_context 注入块、空正文(纯工具轮)、记忆卡条目都不进索引。
- BM25 + IDF 打分:稀有词(硅基流动、npm、codearts)权重天然高于「插件/视频」这类泛词;出现频率超过语料 35% 的 token 直接当噪声忽略。
- 不惩罚年代:打分完全不读时间字段,同内容不同年代分数相同;同分按 id 升序稳定排序。
- 强度门控:命中要同时满足「分数 ≥ minScore」和「含稀有词(df ≤ 5%)」才当作已定位;否则只返回候选卡,请用户补一句线索——避免「自信地错」。
- 增量与保鲜:运行期新归档的轮次即时入索引;外部改动按文件大小每 60 秒检测一次后重建。
- 上限保护:超过 maxEntries 后退化为「先到的这些」,并在结果里如实标记 degraded。
- 只放内存不落盘:索引里含原文 token,落盘等于多一份隐私副本。

实测(1419 条对话轮次):首次建索引约 33 ms,单次查询 0.1–8 ms。
词法检索的固有短板见下方「已知边界」。

注入

每轮把连续性状态 + 固定事实 + 相关活跃记忆合成一个动态上下文块注入,整体受 1600 tokens 约束;冷库正文不注入,只在用户给出线索时由工具取回。

数据位置

默认 $DSH_HOME/companion-memory/:

records.json 记忆卡 state.json 连续性状态、计数器、归档水印 archive.jsonl 原文归档(追加写)

装到别人的「鱼鱼」上

1. 把这个 dsh-companion-memory/ 目录给对方(打包、发布 npm 或收进插件市场都可以);
2. 对方用 plugin_manager 的 install_bundle,target 指向该目录或包名;
3. 新 bundle 会通过 HMR 直接激活,不用重启;
4. 建议的上手顺序:memory_archive 的 backfill 回填历史 → memory_continuity 写入自己的基础人格与当前相处状态 → 之后正常聊天即可。

分发时必须注意:

- 插件目录里的 archive.jsonl / records.json / state.json 是你自己的私密记忆,不要把 $DSH_HOME/companion-memory/ 一起打包发出去。插件是代码,记忆是隐私。
- 本插件是 DSH 专用:依赖 ctx.tools / ctx.systemPrompt / session/event / ctx.sessionQuery。
- 代码与提示词为 MIT(见 LICENSE);设计思路出处见本文件开头的说明。

已知边界(诚实说明)

- 归档检索是纯词法的,同义改写召回差:这是没有 embedding 的固有限制,不是 bug。
实测「B站那个刷视频的插件」只能命中「视频/插件」这类泛词;「硅基流动」「npm」这类专有名词则相当可靠。要真正解决同义问题,需要接向量模型或维护同义词表。
- minScore / rareDfRatio 只是工程初值:需要按真实对话校准,别把它们当准确率承诺。
- 索引占用内存且随条目线性增长:实测 1419 条约 28 MB 堆;到五万条量级需要靠 maxEntries 上限保护,超出后检索质量会随 degraded 标注下降。
- 归档单位是「消息」而非「交互轮次」:一个用户交互会产生多步助手消息,所以归档里助手条目远多于用户条目。turn / step 已随条目记录,将来可按轮聚合。
- 归档是 fire-and-forget:观察者失败不会让会话提交失败(好事),但进程异常退出可能漏记一轮;用 backfill 可幂等补回。
- 删除只覆盖本插件副本:archive.jsonl 里的条目可以按你的要求清掉,但 DSH 自己的会话日志由 harness 的保留策略管理,本插件无法删除,也不应声称已删除。
- 回填默认关闭(backfillOnStart: false):首次回填会一次性写入大量历史,建议手动执行。
- 无向量模型:S(语义相似度)由词法相似度在本地替代,属于方案里的 fallback 降级模式(禁止混用不同空间的分数)。
配置了 embedding 模型后才应切回 0.65S + ... 的真实向量排序。
- 热度权重未经真实对话校准:上游明确说明这是工程初值,不是心理学规律。
- token_counter_mode 为 estimated:中文按 1 字≈1 token、拉丁字符 ≈4 字符 1 token 估算并留有余量,不是硬保证。
- system_context 标记是启发式(按已知的注入标题前缀匹配),已随条目写入归档,方便后续核对与改进。
预览分享卡片长什么样 ↓sutanglime/dsh-companion-memory
分享 · DeepSeek Harness Hub
sutanglime/dsh-companion-memory

自动归档对话并按线索召回旧事,压缩每轮上下文

这是你的仓库?认领条目

回到顶部