dsh-zcode-project-memory:DSH 項目級長效記憶

前言

在 DeepSeek Harness(DSH)裏做同一倉庫的多輪協作時,模型往往只能依賴當前會話的上下文。架構約定、調試踩坑、部署約束這類「代碼裏推不出來」的知識,會話結束就斷了;下次新開進程或新窗口,又要從頭解釋一遍。

社區裏已有把 ZCode 項目記憶思路遷到 DSH 的做法。下面介紹維護者 ffyfox 發佈的 dsh-zcode-project-memory:按項目隔離、落在磁盤上的長效記憶,裝好後通過工具寫入,並在新會話開場自動把索引帶進上下文。分類爲「記憶」,當前 GitHub 星標爲 0;這是非官方社區移植,與 Z.AI(ZCode)及 DeepSeek 無隸屬關係。

這是什麼

dsh-zcode-project-memory 是 Cordis 插件:註冊 save_project_memory 工具,並向 system prompt 注入兩段內容——記憶使用指引(何時寫、格式、如何刪)與 MEMORY.md 索引快照。機制以 zai-org/ZCode 爲準復刻,DSH 側接口以 DeepSeek Harness 官方文檔 爲準。

記憶按項目維度隔離:目錄名由項目根目錄規範絕對路徑經 sha256 派生,同一項目在不同進程、不同會話命中同一份數據;不同項目互不可見。數據默認寫在 ~/.dsh,不進項目倉庫。

核心功能

插件在運行時做三件事(資料原文歸納):

  1. 註冊 save_project_memory —— 寫一條記憶(獨立 Markdown 文件 + 維護索引)。
  2. 注入記憶指引 —— 通過 ctx.systemPrompt.section(),說明何時保存、正文格式、刪除方式。
  3. 注入記憶索引 —— 通過 ctx.systemPrompt.context(),新會話開場即帶上既有記憶的目錄行。

裝好後無需額外配置即可使用;可選配置見下文「配置項」。插件 inject 了 tools 與 systemPrompt,由 dsh-base 提供,web / headless / tui 等繼承 dsh-base 的 profile 均可生效;缺少這兩項服務的部署裏插件會停留在 PENDING,不產生副作用。

記憶類型在 frontmatter 裏分爲四種:user、feedback、project、reference。同一條記憶重複保存會替換對應文件與索引行,不會堆疊重複條目。索引超過 200 行或 25000 字符時會被截斷,注入時帶提示。

未默認掛載的部分:倉庫在 src/subsystems/ 提供了 manifest 掃描、自動抽取、後臺總結等子系統模塊,供單獨導入;默認行爲僅是「工具 + 兩處注入」,不會每輪自動觸發抽取或後臺 Agent,以避免 token 與併發壓力(見 README「與 ZCode 的差異」)。

安裝與啓用

從 npm 安裝(命令來自 README):

dsh plugin --profile <你的 profile> add dsh-zcode-project-memory

dsh plugin add 會把參數轉發給 profile 目錄下的 pnpm;包內聲明瞭 dsh.bundle.patch,插件會自動加入 profile 的 bundle 層。

若要在本地改源碼並即時生效,可用絕對路徑安裝(須絕對路徑,pnpm 會建符號鏈接):

dsh plugin --profile <你的 profile> add /絕對路徑/dsh-zcode-project-memory

運行時要求 Node.js >=20(見 package.json 的 engines)。包版本在資料中爲 0.1.0,許可證爲 MIT AND Apache-2.0。

安裝插件會以當前 dsh 進程的用戶權限讀寫 ~/.dsh/memories/;安裝前建議在 GitHub 查看源碼與 NOTICE.md,確認符合你的安全與合規要求。

典型用法

日常用法是正常對話,不必記專用 CLI。下面示例話術來自 README。

讓模型記住

直接說明,或由模型在遇到非顯而易見的約定、架構決策、調試坑時主動保存:

記住:這個項目的 migration 必須先在 staging 跑滿 24 小時才能上生產。

模型調用 save_project_memory 後,會寫入單條 .md 並更新 MEMORY.md 索引。指引明確排除:臨時任務狀態、以及倉庫裏已有的事實(代碼結構、git 歷史、AGENTS.md 等)。

在新會話裏回憶

索引已在開場注入,可直接問:

這個項目的長效記憶裏有什麼?
上次說的那個 migration 約束是什麼?

模型根據索引行按需讀取對應記憶文件;跨會話、跨進程有效,因爲數據在磁盤上。

讓模型忘記

沒有單獨的刪除工具。按 README,可以說:

忘掉關於 migration 的那條記憶。

模型應刪除記憶文件,並從 MEMORY.md 去掉對應行。只刪文件會留下懸空索引,需兩行一併處理。

人工查看與清理

記憶是純 Markdown:

M=~/.dsh/memories/projects/<項目基名>-<哈希>/memory
cat "$M/MEMORY.md"
ls "$M"

清空某項目記憶可刪除整個 memory/ 目錄;目錄不存在時插件安靜降級。

可選 profile 配置(非法值在加載期失敗,不靜默降級):

- id: project-memory
  config:
    indexLineLimit: 200
    indexCharacterLimit: 25000
    maxMemoryChars: 8000

端到端手工驗證(需可用模型憑據,來自 README):

cd /your/project
dsh --profile headless "把這條教訓存進項目記憶:<...>,然後回覆 DONE"
dsh --profile headless "這個項目的長效記憶裏說了什麼?引用索引行原文。"

適用場景與注意

適合:長期維護同一 DSH 工作區、希望把「教訓與約定」沉澱在項目維度、又不想把記憶文件 commit 進倉庫的團隊或個人。

與 ZCode 保存路徑的差異(資料已說明):本插件用 save_project_memory 統一寫入並由代碼維護 MEMORY.md,索引併發採用排隊與文件鎖,避免 ZCode 側樂觀併發導致的一次保存失敗;索引不會塞進 # agentsMd 標題(DSH 側由 dsh-agent-instructions 負責指令塊)。

注意:

  • 非官方項目,包名中的 zcode 僅說明實現來源。
  • 記憶是增強能力:讀失敗時注入空串,拿不到項目目錄時工具返回 saved: false,不應拖垮會話。
  • 讀取拒絕符號鏈接與非普通文件,單文件 5 MiB 上限;寫入側採用原子 rename 與文件鎖,降低併發丟條目風險。
  • DSH 生態是「一切皆插件」;SkillHub 等社區目錄爲獨立站點,並非 DeepSeek / 幻方官方應用商店。

鏈接

經過上面的步驟,你可以在 DSH profile 裏裝上該插件,用對話完成「寫入—跨會話召回—按需遺忘」,並把項目級知識留在 ~/.dsh 而不污染 git 工作樹。

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

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

小夜