前言¶
在 DSH 裏跑 Agent,上下文通常只覆蓋當前會話的最近幾輪。更早做過什麼、定過什麼、試錯過什麼,換會話或壓縮上下文後就很難追溯。常見做法是手寫筆記、靠外部向量庫,或讓模型「憑印象」回答——這些都和宿主會話日誌脫節,Agent 也很難在對話裏主動查自己的歷史。
下面介紹社區插件 dsh-recall(維護者 liu-zhengdong):在 DSH 側把每個 turn 落成一條可檢索的 Run,後臺異步生成摘要,並提供工具與 /runs 命令供 Agent 與人瀏覽同一份歸檔。插件歸類爲「記憶」,倉庫 GitHub,目錄頁 skillhub.cn。DSH 生態是「一切皆插件」;社區目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。
這是什麼¶
dsh-recall 是 DeepSeek Harness 的記憶類插件:完成一個 turn 就歸檔一條 Run(起止時間、工作目錄、狀態、目標、摘要等),不復制消息正文——正文仍由宿主會話日誌持有,檢索時通過 ctx.sessionQuery.readSession() 回讀。行爲契約自 pi-experiencev2 移植,存儲與注入機制按 DSH 插件面重寫;與 pi-experiencev2 相比,Run 邊界爲 turn/start → turn/end(一個 turn = 一條 Run),界面側爲 /runs、回憶設置頁與左側復盤會話,配置寫在 profile 的 cordis.patch.yml(schemastery Config)。
核心功能¶
歸檔與摘要¶
turn/end 提交時,從會話日誌摺疊該 turn 的邊界並寫入 run_archive 存儲域。復盤會話本身不歸檔、不生成摘要,其過程與報告在獨立的 dream 存儲域。
歸檔後異步排隊調用模型生成中文概述;摘要失敗只記 summaryError,歸檔照常。當前 package 版本爲 0.2.11(以倉庫 package.json 爲準)。
檢索、展開與刪除¶
| 工具 | 作用 |
|---|---|
recall |
按關鍵詞 / Run ID / 時間 / 工作目錄檢索;命中摘要與正文,分頁 |
recall_message |
按 r3/m2 讀一條消息全文;format=raw 返回原始 JSON |
forget |
在用戶明確要求下批量刪除 Run;未知 ID 整批拒絕 |
dream |
查詢保存的審計報告、固定材料範圍與來源 |
dream_complete |
復盤會話提交有來源的審計報告並在正常結束後完成 |
recall 按字面關鍵詞在摘要與正文裏查;工具結果與卡片均按「歷史證據」措辭——記錄已保存不等於任務成功。
新會話啓動索引¶
主 Agent 新會話開始時,可將當前目錄最近若干條 Run 收成一段索引注入上下文,只注入一次。子代理、fork 會話、復盤會話、恢復已有會話、清空和壓縮等場景不注入;當前目錄不夠配置條數時不從其他目錄補。
自動復盤¶
全局積累 30 條未整理 Run 後(門檻可配),自動啓動獨立復盤會話:回顧這批經歷、把值得長期記下的寫進記憶,並留下可審閱的審計報告;左側「復盤」可查看過程與結果。細節見倉庫文檔 自動復盤。
/runs 命令¶
在 DSH 中可直接輸入:
/runs 當前目錄最近的 Run
/runs search <關鍵詞> 檢索當前目錄
/runs all 全庫最近的 Run
/runs r12 展開某條 Run 的消息列表
/runs r12/m3 讀某條消息
/runs summary r12 只看某條 Run 的摘要
/runs debug 診斷信息(條數、墓碑數、摘要失敗數)
輸入不是以上任一形式時,整行按關鍵詞檢索當前目錄。
安裝與啓用¶
本包未發佈到 npm,add dsh-recall 會失敗。官方安裝方式如下:
# 從 GitHub
dsh plugin --profile <profile> add github:liu-zhengdong/dsh-recall
# 本地 checkout(開發用)
dsh plugin --profile <profile> add /abs/path/to/dsh-recall
包聲明瞭 dsh.bundle.patch,添加後包名會追加進該 profile 的 dsh.profile.bundles。可用下面命令確認配置已掛上:
dsh --profile <profile> --dump-config | grep -B2 -A6 dsh-recall
package.json 中聲明與 DSH 0.2.0-rc.2、0.2.1-rc.2 兼容;Node 引擎爲 ^22.19.0 || >=24.0.0。許可證 MIT。
配置要點¶
配置字段在 profile 的 cordis.patch.yml 中,常用項如下(完整說明見 README):
| 字段 | 默認 | 說明 |
|---|---|---|
overviewLimit |
200 |
每條 Run 摘要目標 Unicode 字符數(1–2000) |
noSummary |
false |
關閉 Run 摘要 |
summaryProvider / summaryModel |
"" |
須同時填寫才指定摘要模型;都留空則用當前會話路由;只填一半視爲配置錯誤 |
autoDream |
true |
達門檻時自動復盤 |
dreamThreshold |
30 |
自動復盤門檻(1–1000),每批最多 30 條 |
dreamProvider / dreamModel |
"" |
同時留空用宿主默認;同時填寫可指定復盤模型 |
startupRecall |
true |
新會話是否注入最近 Run 索引 |
startupRecallCount |
10 |
注入條數(1–100) |
startupRecallScope |
cwd |
cwd 僅當前工作目錄;all 含全部目錄並標出目錄 |
數據落盤位置¶
<dsh home>/storages/run_archive/
runs/<sessionId>__<turn>.json
tombstones/<sessionId>__<turn>.json
存儲域名 run_archive,後端由 profile 的 storage-domain 決定(默認 json)。復盤相關數據在獨立 dream 存儲域。
典型用法¶
- 按上文命令把插件加入 profile,確認
dump-config中出現dsh-recall。 - 在正常對話中完成若干 turn,讓插件自動歸檔;用
/runs查看當前目錄最近 Run,或/runs search 關鍵詞檢索。 - 需要 Agent 自行查歷史時,依賴模型調用
recall/recall_message;展開單條消息示例:recall_message傳入r12/m3。 - 全局未整理 Run 達到
dreamThreshold且autoDream爲 true 時,關注左側「復盤」與dream工具返回的審計報告;長期記憶文件的改動以審計報告記載爲準,不在run_archive內。
適用場景與注意¶
適合:長期在同一 DSH profile 下做編碼、排查、多輪決策,希望 Agent 能檢索「自己以前在這臺機器、這個目錄裏做過什麼」,並可選地把批量 Run 整理成長期記憶。
注意:
- 插件以當前 dsh 進程權限運行,安裝前請閱讀源碼與 MIT 許可證,確認歸檔與復盤行爲符合你的合規要求。
- 不存儲消息正文副本,刪除 Run(
forget)後留下墓碑,序號不復用。 - 社區目錄星標等信息以站點展示爲準(撰寫時 GitHub 星標爲 0),版本更新需維護者升
package.json的version並打 tag,市場側先比版本號。
結尾¶
dsh-recall 把「每個 turn 一條 Run + 摘要 + 檢索 + 可選自動復盤」接到 DSH 會話生命週期上,讓執行歷史成爲 Agent 可查詢的證據,而不是散落在上下文外的筆記。進一步瞭解可打開 目錄頁 與 GitHub 倉庫 README。