首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >用 dsh-trivium 给 DeepSeek Harness 补上跨会话图记忆

用 dsh-trivium 给 DeepSeek Harness 补上跨会话图记忆

原创
作者头像
晨星成焰
修改2026-08-27 07:53:11
修改2026-08-27 07:53:11
2880
举报
文章被收录于专栏:AI开发相关AI开发相关

DSH 把「一切皆插件」做得干净,但原装运行时没有跨会话的图记忆,也没有把一次长会话的压缩与分叉画出来

dsh-trivium 就是为了补这两块而存在的进程内内核:它随 DSH 进程加载 TriviumDB,每个工作区一个文件 <workspace>/.dsh/trivium.tdb不另起服务,安装即用。从 0.3.0 到现在,它从「四个工具 + 一张短地图」附带了「记忆内核 + 会话层」两层结构——记忆负责跨会话,会话层(芯片标签下的情节画布)负责把当前这次对话的脉络看清楚,插件为了更好的适配dsh的生态 除了底层的记忆上下文,新增的这些功能全都是在配置里可选的,并且确保了插件卸载时所有痕迹清空。

版本说明:本文对应 dsh-trivium 0.4.14(npm dsh-trivium@0.4.14)。0.4.9 起芯片标签与会话层画布默认关;0.4.11 起标题栏标签叫 芯片(不再叫「会话图」);0.4.12 新增 Git 旁路;0.4.14 存储升到 triviumdb@0.8.1。旧版本文章里的叫法与开关行为以此为准。


1. 不另起服务

很多方案默认「再跑一个服务 + 向量库」,带来端口、进程、运维三件套。dsh-trivium 在 DSH 进程里直接持有内存图,退出时落盘到 .dsh/trivium.tdb。一个工作区一个文件,git 也能跟着走。

请在此添加图片描述
请在此添加图片描述

设计选择

dsh-trivium

常见默认

运行形态

进程内内核,单文件 .tdb

独立服务 + 向量库

接口

4 个工具 + 会话图 UI

往往更多 / 变动

默认注入

少(≤400 token 地图 + 可选芯片)

每步自动灌

记忆结构

图(边一等公民)

扁平片段 / 向量

会话情节

第三标签「会话图」:压缩方框 + 分叉 + 记忆芯片

无 / 另装工作台

人能改错

JSON 真回写 + 可视化 + 芯片条

视实现


2. 一次完整回路

会话 A:用户说「记住,鉴权走 header X」,抽取或 ctx_remember 写入 preference,用 ctx_link 挂到实体 AuthGateway。 会话 B:模型 ctx_find("鉴权") 命中,返回 L0 摘要 + 实体 path;ctx_read(id) 取全文和入边;find("AuthGateway") 还能打到正文里根本不出现该名的邻居。记忆在进程内的图里常驻,不在 prompt 里接力。

会话图那一侧:会话 A 聊得长、被 DSH 自动压过一次,标题栏「会话图」里就出现「历史方框 → 当前方框」;你点历史方框可以从那个检查点 fork 出一个子会话,画布上长出一条分叉。记忆在两层里各管各的,互不污染。

请在此添加图片描述
请在此添加图片描述

3. 图模型

节点分实体 / 偏好 / 决策 / 经验四类(外加每个工作区恰好一个的 workspace 根);边是内置语义:aboutdecidedbroke / fixedsame_asin_workspace。决策可带 until(截止日),过期默认不进 find,除非查询本身在问这个期限(如「周五」)。ctx_find 返回 L0 摘要 + 边路径(入边形如 <-label-id);若查询直接点名某实体,即便邻居正文不出现该名,也会带上其未过期的 about/decided/broke/fixed 邻居。图检索按实体摸到邻居,关系本身承载线索。

底层存储一路升级:0.4.4 起入边、按 label 扩邻、按 label 删边都走引擎 API,不再全表扫边;0.4.7 换 triviumdb@0.7.6searchExact / searchBatch);0.4.14 升到 triviumdb@0.8.1(WAL / 锁更硬、可选只读共享、ARM64 修复)。四工具 / 短地图 / find 路径不变。

请在此添加图片描述
请在此添加图片描述

4. 四个工具

代码语言:javascript
复制
ctx_find     检索:L0 摘要 + 实体 path(含入边 <-label-id)
ctx_read     按 id 读全文与入边
ctx_remember 显式写入
ctx_link     建边

5. 默认少注入:窗口更静

  • session-start 地图(默认开):开头只灌 ≤400 token 的短地图(实体数、偏好数、决策数 + 几个名字),逼模型用工具下钻。
  • autoRecall / 实体名折中(默认关):含直接用户文本时最多灌 3 条 L0,或话里出现实体名才灌 1 跳邻居。
  • 记忆芯片(可选):在会话图顶部勾选,从你发的下一条起钉进当前会话,单会话预算 ≤300 token,与上面三者并存、优先占预算。

三者互斥或并存都受控,默认全关(芯片也不全勾)。动态记忆走 agent.inject(),不写 system prompt,避免 persona.complete: true 把注入静默丢掉)。

请在此添加图片描述
请在此添加图片描述

6. 芯片标签:记忆白名单 + 会话层画布

入口:设置「Trivium 记忆」里拨开 芯片(记忆白名单),标题栏「对话 / 轨迹」旁立刻出现第三个标签 芯片(不必重启)。0.4.9 起默认关;0.4.11 起标签名从「会话图」改为「芯片(记忆白名单)」,0.4.13 起标题栏只显示「芯片」。

记忆芯片(白名单)

芯片顶部列出未归档的 preference / decision / entity(experience 不进芯片,避免太吵)。

操作

生效时机

勾上某条

当前这段里你再发的下一条带上它(L0,≤300 token)

取消勾选

再下一轮不再带

新增

点一次写入一条;整段粘贴也是一条

选择 → 归档

软删除:find / 短地图 / 芯片不再出现,节点还在 .tdb

选择 → 删除

从 .tdb 去掉,不可恢复

已经发出去的轮次

不回写

芯片按会话隔离;fork 出的子会话默认不继承钉选(分叉时可勾「分叉时继承钉选」)。短地图仍 session-start 自动带,不占芯片位。

会话层(情节画布,嵌在芯片开关下,默认关)

打开后,同一标签里画出 compaction / 分叉方框。只投影 DSH 已有的压缩与 fork,不按消息条数自己切方框

  • 没压过上下文:只有一个「后续」方框。
  • 一次成功的 compaction 之后:左边历史检查点(摘要来自 DSH),右边仍是「后续」。
  • 点「生成检查点」:把当前「后续」收成左边一格,只切情节图、不触发 DSH 压缩;同一轮次再点不会双写。
  • 装插件之前已经压过 / 分过叉的旧会话:点「更新检查点」,从对话里的压缩标记和侧边栏分叉补方框(可重复点、幂等)。会话长、工具多不等于 DSH 已经压缩(默认约窗口 80% 才自动压);要分段请点「生成检查点」或对话里输入 /compact
  • 方框自己不压缩,质量来自 DSH 已经做的摘要替换;fork 时不会再总结一遍。
  • 「改名」只改方框标题,不动 DSH 摘要。点方框可跳回对话里对应的检查点,或打开轨迹。

分叉

点方框上的分叉图标,走宿主的 session.fork:子会话出现在侧边栏,前缀(含当时已压的摘要)由 DSH 拷过去。有检查点时从那个检查点切开;只有「后续」时就从你点的方框连出去。在对话页用 DSH 自带 fork,切回芯片标签也能看到对应分支;侧边栏归档子会话后,图上分叉方框跟着消失。画布支持空白处拖动平移、滚轮缩放。关掉会话层就停止写检查点,已有节点仍在 .tdb

记忆白名单 + 会话层画布
记忆白名单 + 会话层画布

7. 人能自我纠正改错

Settings「Trivium 记忆」可搜、看邻居、改名改正文、合并同类型节点、归档删除。JSON 导入导出是真回写;Markdown 导出是只读投影(行如 - 鉴权走 header X —about→ AuthGateway),别拿它当回写格式。写入卫生闸门(0.4.8 起)会拒绝乱码、复读、JSON envelope、base64 残骸和密钥,脏节点仍可在设置里看见以便归档。

会话层里也能在芯片条上直接新增、归档、删除条目——这是「即插即用」的热操作;更重的改名 / 合并 / 全局开关仍走设置页,避免把情节图画成记忆工作台。

设置页结构(0.4.12 起):「检查更新」在最上(对比已装版本与 npm latest,给出升级命令,不自动升级),记忆条目保持可见,其余选项收在 配置设置 折叠里(默认收起):注入策略、抽取、芯片、Git 旁路、界面语言、导入、embedding。开关拨一下即写入 ~/.dsh/trivium.json;界面语言默认跟随宿主(zh / en),也可锁定。


8. 互导:WorkBuddy / Claude Code / Codex

如果你同时用其他 Agent 工具,记忆可以一次性互通——但不是持续双向同步,只是单向迁移,之后各自演进。

同一套一次性严导入现在认三样:WorkBuddy 的 MEMORY.md、Claude Code 的 CLAUDE.md、Codex 的 AGENTS.md。都是单向迁移、不吞会话 jsonl、不双向同步。

方向一:外部 → dsh-trivium(严导入)

  1. 在 Settings 选「导入」,指向上述任一文件。
  2. 导入器跳过闲聊、一次性改文件记录、密钥、无线索段落;只留可作实体 / 偏好 / 决策的条目。
  3. 限写保护:每批正文 ≤3000 字、最多 24 条。
  4. 导入后导出 JSON 校验,节点与边确实落进 .dsh/trivium.tdb

方向二:dsh-trivium → 外部(投影)

  1. 用 Settings「Markdown 导出」拿到只读投影。
  2. 把需要的条目整理进目标工具的记忆文件——这是人读格式,不是回写格式。要真回写请走 JSON 导出再合并。

提醒:抽取与导入都偏严会漏,导入后建议扫一遍邻居、手动补 about 边把偏好挂到正确实体上。


9. Git 旁路:把记忆交给 git(0.4.12 起,默认关)

.tdb 是二进制本地索引,不该进版本库;给 git 的是工作区 .dsh/trivium.jsonl——只含业务节点和边,不含向量。开关默认关;打开后图有改动约 1.5 秒延迟写入 jsonl(不额外调模型)。clone / git pull 后 jsonl 变了会自动导回。开着时「生成」用当前 .tdb 覆盖写出同一路径的 jsonl;关掉后「删除 jsonl」会清掉已知工作区的 jsonl(.tdb 不动)。jsonl 冲突按普通文本解决,再打开工作区即可。

10. 可选远程 embedding(默认关)

官方 DeepSeek chat API 没有 embeddings,也没有本地模型。可填 OpenAI 兼容 URL 开远程向量化,但不开也能用:关键词 + 图遍历。调用失败只记日志,Agent 继续。这也是为什么默认不依赖向量——零向量时扩散 / 余弦本就没意义,退化成 payload 过滤 + 图遍历足够覆盖大多数命中场景。


装上试试

代码语言:txt
复制
bash
dsh plugin --profile web add dsh-trivium
# 或
dsh plugin --profile web add github:QWQcool/dsh-trivium

重启 dsh web,打开工作区。别把本仓库拷进 DeepSeek_Harness——它是插件,不是补丁。用 Dsh_BatStart 的,双击启动就会装上。

  • 仓库:github.com/QWQcool/dsh-trivium
  • npm:dsh-trivium(0.4.14),MIT
  • 当前测试宿主:@deepseek-ai/dsh@0.1.1-rc.2(兼 0.1.0-rc.8


原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 1. 不另起服务
  • 2. 一次完整回路
  • 3. 图模型
  • 4. 四个工具
  • 5. 默认少注入:窗口更静
  • 6. 芯片标签:记忆白名单 + 会话层画布
  • 7. 人能自我纠正改错
  • 8. 互导:WorkBuddy / Claude Code / Codex
  • 9. Git 旁路:把记忆交给 git(0.4.12 起,默认关)
  • 10. 可选远程 embedding(默认关)
  • 装上试试
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档