前言¶
在 DSH(DeepSeek Harness)裏打開 Web 界面時,歷史會話側欄往往要等第一次 session/list 返回後才能渲染。DSH 的實現會遍歷各項目與會話目錄,打開日誌頭、解壓並 stat 文件;資料中舉例約 1,200 個 session 時,單次調用大約需要一秒,瀏覽器會在這段時間內空等。
若不處理,每次冷啓動或首次拉列表都會重複這一掃描。下面介紹的 dsh-carrick-optimize 由維護者 Carrick-K7 發佈,歸類爲「記憶」相關插件,把 session 發現挪到進程啓動後預熱,並用 stale-while-revalidate 緩存結果,讓首屏歷史列表更快可用。
這是什麼¶
dsh-carrick-optimize 是一個體量較小的 DSH 插件(當前包版本 0.1.0,許可證 MIT)。它針對 ctx.sessionPersistence.list() 所代表的 session 列表發現路徑做優化:啓動後延遲預熱列表,請求命中緩存;同時在 session/created、session/disposed 時失效緩存,避免新會話被 TTL 拖慢。運行中會話的合併仍交給 sessionQuery,標題與 live session 保持原有 freshness。
插件通過 cordis.patch.yml 掛入 profile,patch 的是 DSH 內部服務;DSH 大版本升級後需要重新驗證是否仍兼容。
核心功能¶
資料中明確列出的行爲如下。
- 列表預熱與緩存:啓動後在可配置延遲後調用
ctx.sessionPersistence.list(),後續請求先走 stale-while-revalidate 緩存,後臺再校驗刷新。 - 事件驅動失效:監聽
session/created、session/disposed,即時作廢列表緩存,不必等到listTtlMs結束。 - 可選會話級預熱:可配置最近更新的 N 個 session,預寫入 session-query 觀察緩存;單日誌與總壓縮字節有上限,過大文件會跳過。
- 卸載清理:插件 unload 時恢復被 patch 的原方法並清除定時器;若目標服務不存在或已被 patch,插件保持 idle 並打 warning。
README 在 DSH 0.2.1-rc.3、801 個 session 上測得:首次 session/list 約 306–376ms 降到 47–94ms。該數字來自倉庫說明,環境與 session 規模不同會有差異。
不覆蓋的範圍(資料原文強調):任意「冷」會話仍可能需要完整 Zstandard 日誌解碼;分頁與 projection 仍依賴完整事件數組。插件 bundle 加載不受此插件影響。
安裝與啓用¶
面向 Web profile 的安裝命令以 README 爲準,安裝後需重啓 DSH。
dsh plugin --profile web add git+https://github.com/Carrick-K7/dsh-carrick-optimize.git#v0.1.0
# restart DSH
若使用本地打包產物:
dsh plugin --profile web add file:/path/to/dsh-carrick-optimize-0.1.0.tgz
安裝後,cordis.patch.yml 會向 profile 插入條目(示例):
- insert:
- id: carrick-optimize
name: dsh-carrick-optimize
插件以當前 DSH 進程權限運行。安裝前建議在 GitHub 閱讀源碼與 MIT 許可證,確認 patch 行爲可接受。
配置¶
在 profile patch 裏覆蓋 carrick-optimize 的 config 即可。README 示例:
- id: carrick-optimize
config:
listTtlMs: 60000
prewarmList: true
prewarmDelayMs: 500
prewarmSessions: 2
| 配置項 | 默認值 | 含義 |
|---|---|---|
enabled |
true |
關閉插件 |
listTtlMs |
60000 |
後臺重新校驗前的緩存窗口(毫秒) |
prewarmList |
true |
啓動時預熱列表 |
prewarmDelayMs |
500 |
啓動預熱前的延遲(毫秒) |
prewarmSessions |
2 |
預熱的最近 session 數量;0 表示關閉 |
prewarmMaxSessionBytes |
24 MiB | 超過此大小的單條日誌跳過預熱 |
prewarmTotalBytes |
48 MiB | 預熱階段壓縮字節總預算 |
典型用法無需改代碼:裝好插件、按需調上述字段,重啓 DSH 後打開 Web 歷史側欄即可感受首屏列表延遲變化。若 session 體量很大,可先保持默認,再按機器負載調整 prewarmSessions 與字節上限。
適用場景與注意¶
適合:本地或服務器上 session 數量多、頻繁用 Web 歷史列表瀏覽與切換的用戶;目標 DSH 版本與插件聲明一致(資料寫明面向 DSH 0.2.1-rc.3,Cordis 4)。
注意:
- 兼容性綁定內部 API
ctx.sessionPersistence.list;DSH 升級後應跑一遍歷史列表與新建/銷燬 session,並查看日誌是否有 idle / warning。 - 預熱只加速列表與已預熱 session 的首次打開,不能替代完整日誌解碼成本。
- 社區目錄 skillhub.cn 插件頁 與 GitHub 倉庫由社區維護,與 DeepSeek / 幻方無官方從屬關係;安裝來源以你信任的倉庫與 tag 爲準。
結尾¶
dsh-carrick-optimize 把耗時的 session 目錄掃描前移到啓動階段,並用緩存與事件失效平衡 freshness 與首屏速度。若你主要痛點是 Web 歷史側欄「第一次打開要等 list」,可以按 README 安裝 v0.1.0 並微調配置。
- 目錄頁:https://www.skillhub.cn/plugins/Carrick-K7/dsh-carrick-optimize
- 源碼與文檔:https://github.com/Carrick-K7/dsh-carrick-optimize