前言¶
在 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 <5engines.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 上做同一倉庫或多項目切換、依賴上下文壓縮、又需要「找回當時原話與產物路徑」的開發者。
注意:
- 運行時檢索與注入不總結對話、不調模型;bootstrap、rebuild、主題歸納等離線步驟會消耗模型 token,可用
--skip-llm、--max-sessions控制成本。 - 賬本與回放依賴本機會話日誌;剛拉取倉庫未 bootstrap 時,多數 CLI 自測會失敗,需先建賬本。
- 評估腳本自帶的 Hit@k 數字來自作者自建評估集與同義改寫實驗,說明召回優化方向有效,不應等同於對所有真人提問的絕對準確率。
- 插件版本 0.1.0,API 與面板路由以當前 README 爲準;升級後可跑
node cli/doctor.js做全鏈路體檢。
結尾¶
dsh-work-memory 用「指針 + seq 回放」代替二次摘要,讓壓縮後的長會話仍可檢索、可還原。目錄頁:SkillHub - dsh-work-memory;源碼與完整 CLI 說明:GitHub - metallica360qq-web/dsh-work-memory。