dsh-recall:把每個 turn 歸檔爲 Run,讓 Agent 檢索自己的執行歷史

前言

在 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 存儲域。

典型用法

  1. 按上文命令把插件加入 profile,確認 dump-config 中出現 dsh-recall。
  2. 在正常對話中完成若干 turn,讓插件自動歸檔;用 /runs 查看當前目錄最近 Run,或 /runs search 關鍵詞 檢索。
  3. 需要 Agent 自行查歷史時,依賴模型調用 recall / recall_message;展開單條消息示例:recall_message 傳入 r12/m3。
  4. 全局未整理 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。

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

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

小夜