dsh-memory-starmap:把 DSH 会话记忆渲染成可旋转的 3D 星云

前言

DSH 的会话记录堆在 ~/.dsh/sessions 里,时间一长就只是一堆 jsonl 文件:你知道聊过什么,但看不出哪些话题反复出现、哪些内容是「核心记忆」。日常排查记忆问题要么 grep 关键词,要么通读整段记录,成本都随记录长度线性上升。

下面介绍的 dsh-memory-starmap 换了条路:不是做检索,而是把会话记忆算成语义向量、降维后铺进一个球里,用 Three.js 渲染成星云。白点是普通对话,蓝点是重要记忆,金点是人格核心,连线表示语义相近。

这是一个实验性项目,由 1837458003-ctrl 维护,在社区插件目录里的分类为「模型推理」,当前星标数为 0。属于个人维护的第三方插件,不是 DeepSeek / 幻方的官方项目。

这是什么

一句话定位:dsh-memory-starmap 是「DSH 插件 + 本地小服务」的组合。插件部分只负责 Web 端浮层入口和本地服务保活,真正干活的是仓库里的一组 Python 脚本:

读取 ~/.dsh/sessions 里的会话记录 → 用 bge-small-zh-v1.5 算语义向量 → UMAP 降到 3D 铺进球里 → Three.js 渲染成星云。

设计上的取舍很明确:全部在本机跑,不联网、不上传任何数据。模型、推理、服务都在你自己的机器上。代价是数据管道依赖 Python,没有 Node 原生版。

核心功能

先讲只被资料支持的能力,README 声明的特性如下:

  1. 真语义向量:bge-small-zh-v1.5(ONNX Runtime,CPU 推理),不是关键词匹配。
  2. 3D 球状布局:UMAP 保局部距离,按 UMAP 方向铺球面,核心记忆收在里层。
  3. 交互:拖拽旋转、滚轮缩放、悬停看全文、点击看详情、统计栏、暂停/重置/刷新。
  4. 本地优先:模型、推理、服务全在本地。
  5. 零配置启动:一条命令起服务,插件里点 ✦ 打开。

配色规则与重要性直接挂钩:白点是普通对话,蓝点是重要记忆,金点是人格核心,连线表示语义相近。

内部管道是四步串起来的,README 的流程图如下:

~/.dsh/sessions/*/session.v4.jsonl.zstd
        │  extract.py:解压、跳过 subagent、抽 user/assistant 文本
        ▼
   memories.json
        │  embed.py:bge-small-zh-v1.5 ONNX,512 维,L2 归一化
        ▼
   (N, 512) 向量
        │  build.py:余弦相似度 → 每点 top1 连线(阈值 0.70)
        │            UMAP 3D → 白化 → 球面方向 + 球内半径填充
        ▼
   graph.json(nodes + links + stats)
        │  server.py(本地 http.server)
        ▼
   web/index.html(Three.js)

两个设计选择 README 给了理由。一是不用 PCA 而用 UMAP:PCA 投出来的方向天然集中,实测轴比约 2~5 倍,点会压成一条斜带,没有球感;UMAP 保局部邻域,方向分布更均匀,再做白化和球面投影落位。二是核心点放在内圈:is_core 的节点半径乘 0.62,is_longterm 乘 0.85,普通点在外围,视觉上一眼能看出哪些是「人格核心」。

安装与启用

前置

  • Python 3.10+
  • DSH(DeepSeek Harness)桌面端或 web 端
  • 磁盘:模型约 95MB,依赖约 300MB

准备仓库

README 的快速开始要求先把仓库克隆到本机,再装依赖、下模型:

git clone https://github.com/1837458003-ctrl/dsh-memory-starmap.git
cd dsh-memory-starmap

python -m pip install -r requirements.txt
python download_model.py          # 默认走 hf-mirror.com,可 --mirror 换源

download_model.py 只是下载器,bge-small-zh-v1.5 的版权归北京智源研究院(BAAI),本项目本身采用 MIT 许可。

生成星图

python extract.py      # 从 ~/.dsh/sessions 抽取记忆 -> memories.json
python build.py        # embedding + UMAP + 连线 -> graph.json
python server.py 8126  # 起本地服务

浏览器打开 http://127.0.0.1:8126/ 就能看到。数据变化后跑 python rebuild.py(extract + embed + build 串起来),或者交给插件每小时自动重建。

装插件

README 给出的插件安装命令是 link 方式,指向本地目录:

dsh plugin add link:C:/path/to/dsh-memory-starmap

然后在 DSH 设置里确认 dsh-memory-starmap 已启用并重启 DSH,Web UI 右下角会出现一个 ✦ 按钮,点开就是星图浮层。

插件需要知道仓库在哪,设置环境变量 STARMAP_HOME 指向克隆目录,否则只显示入口、不自动起服务。Windows 下也可以在系统环境变量里加一项:

STARMAP_HOME = C:\path\to\dsh-memory-starmap

配置项

环境变量 默认 说明
STARMAP_HOME 空 仓库目录。插件用它启动/重建服务;不设则插件不自动起服务
STARMAP_PYTHON python / python3 Python 可执行文件
STARMAP_PORT 8126 本地服务端口
STARMAP_AI_NAME 小鱼 星图中心显示的名字
STARMAP_MODEL_DIR ./models/bge-small-zh-v1.5 模型目录
DSH_SESSIONS ~/.dsh/sessions DSH 会话目录

典型用法

下面走一次完整流程,前提已装 Python 3.10+ 和 DSH 桌面端/web 端。

1、准备环境。克隆仓库、装依赖、下模型,命令见上面的「准备仓库」。

2、跑一次建图,验证数据管道通不通:

python extract.py
python build.py
python server.py 8126

浏览器打开 http://127.0.0.1:8126/,能看到星图说明 extract / embed / build / server 四步都正常。

3、装插件,把入口嵌进 DSH。设好 STARMAP_HOME 后跑 dsh plugin add link:<仓库路径>,重启 DSH,点右下角 ✦ 打开浮层。

4、日常维护。会话记录更新后,手动跑 python rebuild.py;想让插件自己处理,就把 STARMAP_HOME 配好交给插件每小时重建。

适用场景与注意

适合的场景:想直观复盘「我让 AI 记住了什么」的 DSH 用户;想给记忆做语义聚类、观察话题漂移的人;以及愿意在本地跑 Python 管道、能接受首次建图慢的开发者。

README 自己列出的限制,值得逐条对照自身条件:

  • 依赖 Python 运行时,没有 Node 原生版,不想装 Python 就用不了。
  • 模型 95MB,首次需要下载,之后完全离线。
  • 首次建图慢,几百条记忆约 10~30 秒(UMAP + ONNX CPU)。
  • 中文优化,bge-small-zh 是中文模型,中英混排能用,纯英文效果一般。
  • 浮层里嵌的是 http://127.0.0.1:8126,端口被占用或服务没起时会提示启动命令。
  • 只读 user/assistant 正文,工具调用、思考过程、系统注入都不算记忆。

安全方面要注意两点。一是插件以当前 DSH 进程的权限运行,装之前建议读一遍 plugin/index.js、plugin/client.js 和 plugin/cordis.patch.yml,确认 patch 内容符合预期,再看许可证(项目为 MIT)。二是插件会读取本地会话文件、启动本地 HTTP 服务,端口默认 8126,建议确认该端口未对外暴露。

结尾

dsh-memory-starmap 的价值不在多一个新功能,而是把已经有的会话记录换个角度呈现:语义相近的记忆聚在一起,核心记忆沉到内层,比翻 jsonl 更容易看出长期记忆的结构。它目前是实验性项目,星标为 0、只有个人维护,管道依赖 Python,安装前需要自己审一遍源码。

  • 目录页:https://www.skillhub.cn/plugins/1837458003-ctrl/dsh-memory-starmap
  • GitHub:https://github.com/1837458003-ctrl/dsh-memory-starmap
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜