dsh-plugin-context-manager:自動記錄對話、注入記憶並摺疊真實上下文的 DSH 插件

前言

在 DeepSeek Harness(DSH)裏跑長會話,常見兩個麻煩:一是上下文窗口有限,早期定下的結論被擠出窗口後,模型就「忘了」;二是換一個會話,上次記下的重點帶不過去。常見對策是把摘要塞進 system prompt,但那隻作用於輔助提示塊,真實對話歷史原樣增長,token 佔用照漲。

下面介紹的 dsh-plugin-context-manager 針對的就是這兩點:自動記錄每輪對話,按優先級把記憶與跨會話置頂筆記注入每次模型請求,並且直接摺疊模型可見的真實對話歷史來降低 token 佔用。

這是什麼

dsh-plugin-context-manager 是 luxiwusuobuneng 維護的 DeepSeek Harness 自定義插件,README 標題寫作 dsh-context-manager(上下文管理插件),採用 MIT 許可證。一句話定位:自動記錄每輪對話,按優先級注入記憶與跨會話置頂筆記,並摺疊真實對話歷史以節省 token;數據全部落盤,持久化、重啓安全。

倉庫拆成三個包,各管一層:

所在層 職責
dsh-context-manager-service-luxi Host 持久化存儲、全局記錄、Remote API,以及根平面 agent/pre-step 監聽器:執行排隊的歷史摺疊、把記錄與自定義文本注入真實消息流
dsh-context-manager-agent-luxi Agent preset 行 僅保留回退注入:injectIntoMessages: false 時把記錄注入 system-prompt 快照。記錄邏輯已退役(2026-08-17 起由服務端全局接管)
dsh-context-manager-ui-luxi Web 層行 瀏覽器 UI:輸入框右下角「上下文」按鈕與管理窗口

核心功能

自動記錄與優先級注入

每輪對話自動記錄成一條記錄,按優先級存儲:index 0 最重要,注入時按這個順序取前 N 條。開啓 summarize: true 後,每輪交換會異步調用當前默認模型路由,提煉「總結/描述」兩行;調用失敗自動回退爲截斷。

記錄有上限:超過 maxRecordsPerSession 時,刪除 createdAt 最舊的非置頂記錄,置頂記錄不受上限影響。記錄範圍是所有 preset 的根會話;子代理和工作流子會話不記錄,避免污染與 token 浪費。

置頂筆記與自定義文本進入真實消息流

置頂(⭐)記錄和「注入設置」裏的自定義文本,會作爲一條真實消息前置注入每次模型請求,由服務端在 pre-step 修改 messages 實現(injectIntoMessages),而不是隻放進輔助提示塊。

真實對話查看與手動摺疊

conversationList 列出模型實際看到的每條消息,含角色、文本、token 估算和總佔用,也包括之前摺疊留下的摘要節點。

foldRange 在「真實對話」裏選中一段消息範圍排隊,下次對話開始時由服務端在 agent/pre-step 內執行 compaction.compactRegion(),把舊文本真正摺疊成一條摘要,降低 token 佔用。摺疊需在回合內執行,所以是「下一條消息後生效」;foldStatus 可查詢排隊與執行狀態。

瀏覽器管理窗口

安裝後在網頁輸入框右下角出現「上下文」按鈕,點開是管理窗口,含記錄、真實對話、注入設置等標籤頁,支持搜索、編輯、跨會話置頂、拖拽排序、導出、清空。

運行時可調與持久化

注入條數(maxInjected)、字符預算(maxInjectionCharsmaxCharsPerRecord)、記錄上限(maxRecordsPerSession)等通過 setSettings 運行時覆蓋並持久化,不用改配置重啓。記錄、注入、排隊中的摺疊、摺疊審計全部落盤,重啓後照常工作。

安裝與啓用

先說清楚:這是手動多步安裝,不是標準的一鍵安裝。流程是先複製三個包目錄,再手動接線 cordis.patch.yml,最後重啓 DSH。

第一步,複製包文件。把 dsh-context-manager-service-luxidsh-context-manager-agent-luxidsh-context-manager-ui-luxi 三個文件夾完整複製到 C:\Users\你的用戶名\.dsh\profiles\node_modules\;或者在倉庫根目錄執行下面的命令,由腳本自動複製:

powershell -NoProfile -ExecutionPolicy Bypass -File .\install.ps1

install.ps1 只負責複製三個包,不修改 cordis.patch.yml,接線要手動完成。如果輸出 [FAIL],說明對應包的源目錄缺少 package.json,先檢查目錄擺放。

第二步,接線。編輯 %USERPROFILE%\.dsh\profiles\web\cordis.patch.yml,向 insert 列表追加三行。若文件裏已經有 - insert: 開頭的內容,把三行並進去,不要重複鍵:

- insert:
    - id: compaction-passive
      name: '@deepseek-ai/dsh-compaction-basic'
      config:
        auto: false
    - id: context-manager
      name: 'dsh-context-manager-service-luxi'
      config:
        maxRecordsPerSession: 200
        injectIntoMessages: true
        maxInjectionChars: 800
        maxInjected: 5
        maxGlobalInjected: 3
        maxCharsPerRecord: 200
        summarize: true
        maxSummaryChars: 400
        maxDescriptionChars: 200
        summarizeTimeoutMs: 20000
        summarizeMaxInputChars: 6000
        summarizeMaxOutputTokens: 300
    - id: context-manager-ui
      name: 'dsh-context-manager-ui-luxi'

上面是示例默認值:maxInjected 是每次注入取前幾條記錄,maxRecordsPerSession 是單會話記錄上限,summarize 相關項控制 LLM 總結的長度與超時,都可按需調整。

接線有三條約束:

1、compaction-passive 行是瀏覽器摺疊按鈕的依賴,缺行隻影響摺疊功能,不影響記錄。
2、UI 行必須掛在 web 組合(loader 條目);掛到 agent preset 行不會被 clientModules 掃描,bundle 會 404。
3、dsh-context-manager-agent-luxi 行是可選的,只在 injectIntoMessages: false 時提供回退注入,不掛不影響功能。

第三步,驗證。經過上面的步驟後,完全重啓 DSH(Service/Agent 是進程啓動時加載,熱重載無效),打開網頁版對話界面,輸入框右下角出現「上下文」按鈕、點擊能打開管理窗口,即安裝成功。

之後的升級:只改包內代碼時,重複第一步和第三步即可。Service 改動必須重啓 DSH;純 UI(client.js)改動刷新瀏覽器頁面即可。

典型用法

摺疊一段真實歷史

在管理窗口的「真實對話」頁選擇一段消息範圍執行 foldRange,摺疊會在下一條消息時於 agent/pre-step 內執行生效。程序化調用走 Remote API,例如:

connection.rpc.call('/api', 'contextManager/foldRange', { args: { sessionId, start, end } });
connection.rpc.call('/api', 'contextManager/foldStatus', { args: { sessionId } });

第一行排隊一次摺疊請求,第二行查詢它的執行狀態。

Remote API

瀏覽器通過 connection.rpc.call('/api', 'contextManager/<method>', { args }) 調用 Remote API,方法包括:listcountrecordremovereorderupdatesetGlobalclearlistGlobalcompactconversationListfoldRangefoldStatussetInjectionTextgetInjectionTextgetSettingssetSettingsclearAll。其中 setSettings 的運行時覆蓋會持久化,重啓不丟。

適用場景與注意

適合誰:

1、長會話跑得久,早期信息被擠出窗口,想讓舊文本真正離開上下文,而不只是在旁邊加一份摘要。
2、跨會話要帶固定約定或筆記,用置頂記錄注入所有會話。
3、需要覈對模型實際輸入:先用 conversationList 看每條消息的角色、文本與 token 佔用,再決定摺疊和注入。

注意:

1、安裝是手動多步流程,install.ps1 不負責接線,cordis.patch.yml 要自己改。
2、摺疊按鈕依賴根平面的 compaction-passive 行;缺行隻影響摺疊,不影響記錄。
3、dsh-context-manager-agent-luxi 的記錄邏輯已退役(2026-08-17 起由服務端全局接管),只保留回退注入。
4、摺疊需在回合內執行,效果落在下一條消息之後,不是立即生效。
5、插件以當前 DSH 進程權限運行,安裝前建議通讀源碼,確認 MIT 許可證與代碼行爲符合你的使用要求。

小結

dsh-plugin-context-manager 把記錄、注入、摺疊、查看收進一個插件,注入與摺疊都作用於真實消息流,持久化和運行時可調讓日常使用少一次重啓。安裝步驟比一鍵安裝多幾步,但每一步的結果都可驗證,適合需要長期維護 DSH 會話上下文的開發者。

  • 目錄頁:https://www.skillhub.cn/plugins/luxiwusuobuneng/dsh-plugin-context-manager
  • GitHub:https://github.com/luxiwusuobuneng/dsh-plugin-context-manager

目錄頁來自獨立的社區插件目錄,與 DeepSeek、幻方無官方從屬關係;在 DSH「一切皆插件」的理念下,這類第三方插件是對生態的補充。

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

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

小夜