
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。旧版本文章里的叫法与开关行为以此为准。
很多方案默认「再跑一个服务 + 向量库」,带来端口、进程、运维三件套。dsh-trivium 在 DSH 进程里直接持有内存图,退出时落盘到 .dsh/trivium.tdb。一个工作区一个文件,git 也能跟着走。

设计选择 | dsh-trivium | 常见默认 |
|---|---|---|
运行形态 | 进程内内核,单文件 .tdb | 独立服务 + 向量库 |
接口 | 4 个工具 + 会话图 UI | 往往更多 / 变动 |
默认注入 | 少(≤400 token 地图 + 可选芯片) | 每步自动灌 |
记忆结构 | 图(边一等公民) | 扁平片段 / 向量 |
会话情节 | 第三标签「会话图」:压缩方框 + 分叉 + 记忆芯片 | 无 / 另装工作台 |
人能改错 | JSON 真回写 + 可视化 + 芯片条 | 视实现 |
会话 A:用户说「记住,鉴权走 header X」,抽取或 ctx_remember 写入 preference,用 ctx_link 挂到实体 AuthGateway。
会话 B:模型 ctx_find("鉴权") 命中,返回 L0 摘要 + 实体 path;ctx_read(id) 取全文和入边;find("AuthGateway") 还能打到正文里根本不出现该名的邻居。记忆在进程内的图里常驻,不在 prompt 里接力。
会话图那一侧:会话 A 聊得长、被 DSH 自动压过一次,标题栏「会话图」里就出现「历史方框 → 当前方框」;你点历史方框可以从那个检查点 fork 出一个子会话,画布上长出一条分叉。记忆在两层里各管各的,互不污染。

节点分实体 / 偏好 / 决策 / 经验四类(外加每个工作区恰好一个的 workspace 根);边是内置语义:about、decided、broke / fixed、same_as、in_workspace。决策可带 until(截止日),过期默认不进 find,除非查询本身在问这个期限(如「周五」)。ctx_find 返回 L0 摘要 + 边路径(入边形如 <-label-id);若查询直接点名某实体,即便邻居正文不出现该名,也会带上其未过期的 about/decided/broke/fixed 邻居。图检索按实体摸到邻居,关系本身承载线索。
底层存储一路升级:0.4.4 起入边、按 label 扩邻、按 label 删边都走引擎 API,不再全表扫边;0.4.7 换 triviumdb@0.7.6(searchExact / searchBatch);0.4.14 升到 triviumdb@0.8.1(WAL / 锁更硬、可选只读共享、ARM64 修复)。四工具 / 短地图 / find 路径不变。

ctx_find 检索:L0 摘要 + 实体 path(含入边 <-label-id)
ctx_read 按 id 读全文与入边
ctx_remember 显式写入
ctx_link 建边三者互斥或并存都受控,默认全关(芯片也不全勾)。动态记忆走 agent.inject(),不写 system prompt,避免 persona.complete: true 把注入静默丢掉)。

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

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),也可锁定。
如果你同时用其他 Agent 工具,记忆可以一次性互通——但不是持续双向同步,只是单向迁移,之后各自演进。
同一套一次性严导入现在认三样:WorkBuddy 的 MEMORY.md、Claude Code 的 CLAUDE.md、Codex 的 AGENTS.md。都是单向迁移、不吞会话 jsonl、不双向同步。
方向一:外部 → dsh-trivium(严导入)
.dsh/trivium.tdb。方向二:dsh-trivium → 外部(投影)
提醒:抽取与导入都偏严会漏,导入后建议扫一遍邻居、手动补
about边把偏好挂到正确实体上。
.tdb 是二进制本地索引,不该进版本库;给 git 的是工作区 .dsh/trivium.jsonl——只含业务节点和边,不含向量。开关默认关;打开后图有改动约 1.5 秒延迟写入 jsonl(不额外调模型)。clone / git pull 后 jsonl 变了会自动导回。开着时「生成」用当前 .tdb 覆盖写出同一路径的 jsonl;关掉后「删除 jsonl」会清掉已知工作区的 jsonl(.tdb 不动)。jsonl 冲突按普通文本解决,再打开工作区即可。
官方 DeepSeek chat API 没有 embeddings,也没有本地模型。可填 OpenAI 兼容 URL 开远程向量化,但不开也能用:关键词 + 图遍历。调用失败只记日志,Agent 继续。这也是为什么默认不依赖向量——零向量时扩散 / 余弦本就没意义,退化成 payload 过滤 + 图遍历足够覆盖大多数命中场景。
bash
dsh plugin --profile web add dsh-trivium
# 或
dsh plugin --profile web add github:QWQcool/dsh-trivium重启 dsh web,打开工作区。别把本仓库拷进 DeepSeek_Harness——它是插件,不是补丁。用 Dsh_BatStart 的,双击启动就会装上。
dsh-trivium(0.4.14),MIT@deepseek-ai/dsh@0.1.1-rc.2(兼 0.1.0-rc.8)原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。