前言¶
在用 DeepSeek Harness(DSH)开发智能体或做长期对话时,积累下来的知识如果只是散落在历史记录里,想复用就很难:要么为了省上下文让每条记录彼此独立、不重复,结果换一种问法就找不到;要么为了找得到让同一件事有多个说法、多处出现,结果上下文被填满,还可能让模型悄悄用错信息且不会报错。
dsh-lattice 的做法是把「知识本体」与「检索入口」分开:一份知识只存一份(知识正交),检索入口可以冗余(同一个意思有多个说法可命中),知识之间的关系写出来(链接显式)。数据存在本地 SQLite,向量模型首次使用时下载,之后离线可用。
插件定位¶
dsh-lattice 是 DeepSeek Harness 的本地记忆插件,由维护者 topkie 开发。它的核心价值是提供一个结构化、可检索、可重建的本地知识库,适合需要长期沉淀对话与工作知识的场景。
插件以「原子」为单位组织记忆,主题由聚类派生,可随时重算。除记忆本体外的一切都能从本体重算,备份与升级都很轻。向量模型是可选依赖,没装就退回词面检索。
核心功能¶
本地优先¶
数据存在本地 SQLite,无云端依赖。第一次加载编码器时才从 Hugging Face 或 ModelScope 下载 Xenova/bge-small-zh-v1.5 模型(约 23 MB),之后离线可用。
零第三方依赖¶
不引入第三方运行时依赖,只依赖宿主提供的 @deepseek-ai/* peer 包。向量模型是可选依赖,安装时可用 --omit=optional 跳过。
中文友好¶
针对中文查询的两层检索索引,短词也能命中。
可降级¶
向量模型不可用时自动退回词面检索,功能缩水但不崩。降级事件写入独立的日志库(只记白名单内的字段,不含查询文本),设置页可导出 CSV 或清空。
可视化管理¶
设置页的「lattice 记忆库」页能直接看库里有什么、搜到某一条、不借模型把它删掉。每条会显示来源、被取回次数与是否已被取代。
写入把关¶
过短或过长的内容会被拦下并说明怎么办,与已有内容重复的会被提示(只提示、不阻止)。
安装¶
四种装法,从最省事到最灵活。四种装完都要重启宿主。
一、让助手装(最省事)¶
把下面整段发给一个能执行命令的助手(DSH 自己、Claude Code、Codex 都行),让它把剩下的步骤做完。
我要在这台机器上装 dsh-lattice 这个 DSH 插件。请执行并逐步报结果:
1. 找到 DSH 的 profile 目录:在 ~/.dsh/profiles/ 下找含 package.json 的那一层,名字通常是 desktop。
找不到就停下来问我要路径,不要自己编一个。
2. 把插件装进去:没有源码目录就先
git clone https://github.com/topkie/dsh-lattice.git
进目录跑 pnpm install --no-frozen-lockfile 与 pnpm run build;
然后回到 profile 目录跑 pnpm add "file:<dsh-lattice 源码目录的绝对路径>"。
3. 在 profile 目录的 package.json 里,把 "dsh-lattice" 加进 dsh.profile.bundles 数组
(没有这个数组就按同目录其它条目的写法新建)。
4. 叫我重启宿主。重启后调用一次 lattice_ping,把返回里的 version、dataDir、
caches.encoder.loaded 三项报给我。
5. caches.encoder.loaded 不是 true,说明模型没下成:把 attempts 数组原文贴给我,
不要自己改编码器配置重试。
前置条件:Node 22.13 以上、git、pnpm 9 以上,且 node 在 PATH 里。
不要用管理员权限,不要动 profile 里其它插件的条目。
二、插件管理器(图形化)¶
在宿主的插件管理界面里搜索 dsh-lattice,点安装,重启宿主。依赖登记与插件清单由界面代做,不需要手改文件。
三、npm¶
在宿主 profile 目录(通常在用户目录下 .dsh/profiles/<profile 名>/)里装:
pnpm add dsh-lattice
再把 dsh-lattice 加进同一目录 package.json 里 dsh.profile.bundles 那个数组,重启宿主。要固定版本就写 pnpm add dsh-lattice@0.11.1;之后升级用 pnpm update dsh-lattice 再重启。
四、GitHub 源码¶
想改代码、或者要用还没发到 npm 的提交时走这条。需要 Node 22.13 以上、git 与 pnpm ≥ 9。
仓库有两个长期分支:main 只放发布,dev 是开发汇总。默认 clone 拿到 main,「还没发到 npm 的提交」在 dev 上,所以要显式切过去。
git clone https://github.com/topkie/dsh-lattice.git
cd dsh-lattice
git checkout dev
pnpm install --no-frozen-lockfile
pnpm run build
然后在 profile 目录把它登记为依赖,路径换成上一步那个目录的绝对路径:
pnpm add "file:<dsh-lattice 目录的绝对路径>"
再把 dsh-lattice 加进同一目录 package.json 里 dsh.profile.bundles 那个数组,重启宿主。
配置¶
在 profile 的 cordis.patch.yml 里配置以下参数:
| 键 | 默认 | 说明 |
|---|---|---|
enabled |
true |
总开关 |
dataDir |
空(即 <数据目录>/lattice) |
数据目录;留空按 DSH_HOME/lattice 解析,未设置 DSH_HOME 时用 ~/.dsh/lattice,连用户目录都取不到时退到当前目录的 .lattice |
encoderEnabled |
true |
关掉即为纯词面模式 |
encoderModel |
Xenova/bge-small-zh-v1.5 |
向量模型 |
encoderMirror |
空 | 第二下载源。留空等于 https://modelscope.cn(魔搭);官方源总是先试一次,填成官方地址就只试官方 |
encoderCacheDir |
空 | 模型缓存目录;留空用运行时默认位置 |
tauJoin |
0.78 |
并入已有主题所需的余弦阈值(可调范围 0.6~0.95) |
tauLex |
0.05 |
并入所需的词面重叠阈值(0.02~0.5) |
tauLexOnly |
0.1 |
只靠词面就判同主题的阈值(0.02~0.6) |
tauNew |
0.5 |
新建主题的余弦阈值(0.2~0.8) |
viewBudget |
5000 |
单次注入的字符预算 |
topN |
24 |
注入层的候选数 |
mmapSize |
0 |
SQLite mmap 窗口字节数;0 = 按机器内存与库大小自动 |
cacheSize |
0 |
SQLite 页缓存字节数;0 = 自动 |
busyTimeout |
0 |
写锁等待上限毫秒;0 = 自动 |
其中 viewBudget 与 topN 能在设置页「lattice 记忆库 → 配置」里直接改,改完即时生效;其余十三项要在 profile 的 cordis.patch.yml 里改,然后重启宿主。
典型用法¶
安装完成后,在设置的「lattice 记忆库」页能看到入口。可以:
- 看库里有什么
- 搜到某一条
- 不借模型把它删掉
- 改运行参数
- 把整库导出成 JSON 或 Markdown
日常使用时,模型决定什么时候调用 lattice_write 写入,什么时候调用 lattice_recall 召回。确认装好了可以调用 lattice_ping:它返回插件版本、数据目录、编码器配置,以及五处缓存的实时占用。编码器是否真的加载成功,看 caches.encoder.loaded 是否为 true。
适用场景与注意¶
适合需要长期沉淀对话与工作知识、希望知识可检索、可重建、可降级的场景。
插件以当前 dsh 进程权限运行,安装前应检查源码与许可证。记忆数据在独立的数据目录里,换装法不会丢数据。降级留痕日志与记忆数据互不影响。
参考资源¶
- 插件目录页:https://www.skillhub.cn/plugins/topkie/dsh-lattice
- GitHub 仓库:https://github.com/topkie/dsh-lattice
- DeepSeek Harness:https://github.com/deepseek-ai/deepseek-harness