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
羽毛球分组比赛记分
小程序二维码

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

小夜