dsh-work-memory:對話級工作記憶與 seq 原文回放

前言

在 DeepSeek Harness(DSH)裏做長會話時,上下文壓縮會把早期輪次收成摘要。摘要能省 token,但「當時問了什麼、怎麼做的、改動了哪些文件」往往不再可讀。再做同類任務時,容易重複探索,也難以接續上次進度。

常見補救是手寫筆記或讓模型總結歷史——前者要人工維護,後者仍是二次概括,不是原對話。dsh-work-memory(維護者 metallica360qq-web)走另一條路:把每段工作記成指針(會話 ID、startSeq/endSeq、標題、提問、產物路徑),正文不落庫,需要時按序號從 DSH 僅追加的會話日誌裏原樣回放。分類屬於「記憶」,當前 GitHub 星標爲 0,版本 0.1.0,MIT 許可證。

這是什麼

一句話:對話級工作記憶索引——記住你提過的需求與產出,命中後回放被壓縮掉的那段原文。

插件掛在 DSH 上,向模型暴露三個工具(memory_search、memory_open、memory_write),並在每步按當前用戶消息做輕量檢索注入(不調用模型)。離線批處理(bootstrap、歸塊、主題歸納等)可選用 OpenAI 兼容接口;運行時檢索與注入爲純本地邏輯。

解決什麼問題

長會話壓縮後,早期工作只剩摘要。本插件用鉤子描述一段工作,例如:

{ "id": "...", "session": "...", "startSeq": 1204, "endSeq": 1288, "ask": "...", "title": "...", "artifacts": [], "ts": "..." }

DSH 會話日誌在磁盤上完整保留,壓縮隻影響界面可見性。按 (session, seq 區間) 即可取回用戶提問、助手回覆與寫過的文件路徑。

核心功能

三個模型工具

工具 作用
memory_search(query, limit?, includeSuperseded?) 檢索標題、需求、產物路徑、時間;不返回正文
memory_open(id, query?, maxChars?) 按 seq 回放原文
memory_write(title, ask?, artifacts?, supersedes?) 手動補記,或標記取代舊記錄

自動捕獲

監聽 session/event:累積本輪用戶消息與 write/edit 路徑,turn/end 時寫入 kind: "auto" 的鉤子,並按關鍵詞判主題歸屬。僅記錄有實義輪次(提問總長 ≥ 20 字,或工作區內有產物);%TEMP%、node_modules、.tmp 等路徑過濾。

上下文注入

在 systemPrompt.context 中按當前用戶消息檢索:

  • 能判主題:主題內檢索,命中 ≥ 0.45 時最多注入 3 行標題。
  • 不能判主題:全局檢索,命中 ≥ 0.6 才注入。
  • 短句(少於 6 字且無主題):不注入。
  • 最高分 ≥ 0.6:額外附 ≤ 300 字原文摘錄。

注入總量 ≤ 400 字符;未命中時不追加。

兩層顆粒度

level 來源 用途
module 離線 rebuild.js 等模型歸塊 主索引,檢索權重 × 1.15
turn turn/end 自動捕獲 細節流水

長會話可能產生大量 turn 鉤子;模塊級索引需批處理生成,兩者並存。可用 cli/autopilot.js 對新會話定時歸塊。

主題層(可選)

topics.json 定義工程主題與關鍵詞,檢索先判主題再搜,減少跨項目噪聲。未配置時退化爲全局檢索。可用 derive-topics.js、tag-topics.js、fix-topics.js 從賬本歸納並修正標籤。

跨 agent 導入

支持將 zcode、hermes、workbuddy 等歷史導入同一賬本,用 memory_open 統一回指;DSH 本會話直接讀 <DSH_HOME>/sessions。對應 ingest / merge CLI 見 README。

Web 面板

安裝後重啓 DSH,瀏覽器訪問 http://127.0.0.1:8282/work-memory/:搜索、展開原文、改標題、歸檔。

記憶治理

時間衰減隻影響排序不刪條目;supersedes 標記取代關係;dedupe.js 僅報告相似項不自動合併。

安裝與啓用

DSH 生態採用「一切皆插件」;社區目錄 SkillHub 爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。目錄頁給出的安裝指引爲:請安裝 DSH 插件 metallica360qq-web/dsh-work-memory(完整步驟以目錄頁與倉庫 README 爲準)。

依賴與運行環境(來自 package.json):

  • peerDependencies:@deepseek-ai/cordis >=4.0.1 <5
  • engines.node:^22.19.0 || >=24.0.0

插件在當前 DSH 進程權限下運行,可訪問會話目錄與賬本路徑。安裝前建議閱讀源碼與 MIT 許可證,確認與本機數據路徑、模型 key 使用方式一致。

典型用法

首次 bootstrap(歷史入賬)

裝好後建議先跑 bootstrap,把本機歷史對話建成賬本:

node cli/bootstrap.js --dry-run          # 預演:看會做什麼、掃描到多少會話
node cli/bootstrap.js --all              # 全跑(需要模型 key)
node cli/bootstrap.js --all --skip-llm   # 只跑不需要模型的步驟
node cli/bootstrap.js --all --max-sessions 50   # 限制歸塊數量,控制成本

階段包括 scan、ingest、rebuild、topics、alts、doctor;中間文件在 <DSH_HOME>/work-memory/.bootstrap/,支持斷點續跑。

不依賴運行時的 CLI 查詢

node cli/query.js stats
node cli/query.js search "關鍵詞"
node cli/query.js open <hookId>
node cli/query.js open <hookId> "過濾詞"

數據位置

<DSH_HOME>/work-memory/hooks.jsonl      # 賬本(append-only)
<DSH_HOME>/work-memory/topics.json      # 主題定義(可選)

寫入通過 .lock 互斥,寫前備份並輪轉(最近 7 天、最多 10 份)。

會話中的工具調用

模型側典型流程:用 memory_search 定位鉤子 → 需要過程細節時 memory_open(id) 拉取 seq 區間原文 → 重要結論可 memory_write 補記或 supersedes 更新關係。

配置(環境變量,均可選)

變量 作用 默認
DSH_WM_LLM_BASE_URL 離線批處理模型端點 智譜 coding plan
DSH_WM_LLM_MODEL 模型名 glm-5.3-flash
DSH_WM_LLM_API_KEY 模型 key 讀 ~/.dsh/.credentials.yaml 的 ZAI_CODING_CN_API_KEY
DSH_WM_LLM_THINKING 是否開思考 off
DSH_WM_ZCODE_DB / _HERMES_DB / _WORKBUDDY_DB 各源數據庫路徑 各自默認
DSH_WORK_MEMORY_DIR 賬本目錄 <DSH_HOME>/work-memory
DSH_WM_SEED 首次啓動複製爲賬本的種子文件 無

適用場景與注意

適合誰: 長期在 DSH 上做同一倉庫或多項目切換、依賴上下文壓縮、又需要「找回當時原話與產物路徑」的開發者。

注意:

  1. 運行時檢索與注入不總結對話、不調模型;bootstrap、rebuild、主題歸納等離線步驟會消耗模型 token,可用 --skip-llm、--max-sessions 控制成本。
  2. 賬本與回放依賴本機會話日誌;剛拉取倉庫未 bootstrap 時,多數 CLI 自測會失敗,需先建賬本。
  3. 評估腳本自帶的 Hit@k 數字來自作者自建評估集與同義改寫實驗,說明召回優化方向有效,不應等同於對所有真人提問的絕對準確率。
  4. 插件版本 0.1.0,API 與面板路由以當前 README 爲準;升級後可跑 node cli/doctor.js 做全鏈路體檢。

結尾

dsh-work-memory 用「指針 + seq 回放」代替二次摘要,讓壓縮後的長會話仍可檢索、可還原。目錄頁:SkillHub - dsh-work-memory;源碼與完整 CLI 說明:GitHub - metallica360qq-web/dsh-work-memory。

羽毛球分组比赛记分
小程序二维码

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

小夜