前言¶
在 DeepSeek Harness(DSH)裏同時開多個對話時,每個會話都會在發請求前組裝上下文、佔用內存。機器物理內存有限(例如 32G)時,兩三個對話一起跑就可能把提交內存頂滿,Windows 會直接殺進程。常見做法是手動少開窗口、自覺錯峯,但缺少硬性閘門,多開一兩個對話就會疊請求。
dsh-conversation-queue 在宿主側做對話級併發限制:超過上限的對話按 FIFO 排隊,停在發請求之前,前面的回合結束後再自動放行;同時在 Web 界面底部提供內存、提交內存、磁盤與排隊狀態,並可在運行期調整上限。下面介紹定位、安裝、配置與使用要點。
這是什麼¶
- 名稱:
dsh-conversation-queue - 維護者:zhengkaixing
- 分類:工作流(社區目錄歸類)
- 版本:0.3.0(見倉庫
package.json) - 許可證:MIT
- 倉庫:github.com/zhengkaixing/dsh-conversation-queue
- 目錄頁:skillhub.cn 條目
一句話:給 DSH 用的併發閘門——限制同時運行的根對話數量,其餘對話靜默排隊;附帶底部資源狀態條與設置頁調參。子代理 / 後臺任務不排隊,避免與父對話形成死鎖。
核心功能¶
對話級 FIFO 隊列¶
- 達到
maxConcurrent後,新回合在發請求之前等待,不調模型、不組裝上下文,幾乎不佔額外內存。 - 正在運行的對話結束或關閉後,槽位按先來後到放行下一位。
- 僅限制根對話;
queueSubagents默認false,子代理不參與排隊。
底部狀態條(shell.bottom)¶
每 3 秒輪詢同源接口 GET /dsh-resource/status,展示:
- 內存、提交內存使用率(≥80% 琥珀色,≥88% 紅色)
- 各固定盤剩餘空間
- 運行中 / 排隊數量與當前上限
−/+即時改併發上限(寫入 settings,約 1.5 秒內生效)
鼠標懸停盤符可看卷標、文件系統、容量及系統盤空間緊張的說明;懸停「對話」可看每個運行中 / 排隊會話的標題與已跑 / 已等時長。
設置頁¶
路徑:Sidebar → Plugins → 資源與併發。與狀態條同源數據,表格展示,同樣可用 − / + 調整上限。
運行期調參¶
修改 JSON 即可,無需改 YAML、無需重啓 DSH。可寫字段:maxConcurrent(1~8)、enabled;非法值會被忽略以免手滑。
宿主 HTTP 接口¶
| 方法 | 路徑 | 說明 |
|---|---|---|
| GET | /dsh-resource/status |
內存、磁盤、gate(運行 / 排隊列表等) |
| POST | /dsh-resource/limit |
body { "maxConcurrent": 3 },可選 { "enabled": false } |
接口走宿主 HTTP 服務,沿用同源鑑權。提交內存由常駐 PowerShell 採樣進程提供(memory.sampler 可能爲 ok / starting / error: …)。
安裝與啓用¶
插件以當前 DSH 進程權限運行;安裝前建議瀏覽倉庫源碼與 MIT 許可證。未發佈 npm 包,不要用 dsh plugin add dsh-conversation-queue(會去 registry 找同名包)。
從 GitHub 安裝(推薦)¶
將 <DSH 安裝目錄> 換成本機路徑,在 PowerShell 中執行:
& '<DSH 安裝目錄>\resources\runtime\cli\bin\dsh.cmd' plugin --profile web add github:zhengkaixing/dsh-conversation-queue
裝完後重啓一次 DSH(瀏覽器端 bundle 與 HTTP 路由在啓動時掛載)。
GitHub 拉不動的環境可用 Gitee 鏡像(同份代碼):
& '<DSH 安裝目錄>\resources\runtime\cli\bin\dsh.cmd' plugin --profile web add https://gitee.com/zhengkaixing/dsh-conversation-queue.git
從插件市場安裝¶
在 DSH 插件市場搜索 dsh-conversation-queue 安裝即可,效果與 github: 命令相同。市場列表由 awesome-dsh-plugin 維護;條目已於 2026-11-07 通過 PR #12526 合併上架。社區目錄(如 awesome-dsh-plugin.com)與 DeepSeek / 幻方無官方從屬關係,並非官方應用商店。
本地開發(link)¶
& '<DSH 安裝目錄>\resources\runtime\cli\bin\dsh.cmd' plugin --profile web add 'link:C:/path/to/dsh-conversation-queue'
改插件代碼後需重啓 DSH 才生效(HMR 只重載配置,不重載插件代碼)。
配置¶
默認片段在插件自帶的 cordis.patch.yml:
- insert:
- id: conversation-queue
name: 'dsh-conversation-queue'
config:
enabled: true # 總開關,false = 完全不限制
maxConcurrent: 2 # 同時允許運行的對話數;32G 內存建議 2,緊張就 1
queueSubagents: false
statusFile: '' # 留空 = $DSH_HOME/conversation-queue.json
settingsFile: '' # 留空 = $DSH_HOME/conversation-queue.settings.json
logAdmissions: true # 每次放行 / 排隊是否寫日誌
也可在 ~/.dsh/profiles/web/cordis.patch.yml 用同一 id 覆蓋,建議把需要的字段寫全,例如:
- id: conversation-queue
config:
maxConcurrent: 3
運行期覆蓋上限示例(Windows 用戶目錄):
// %USERPROFILE%\.dsh\conversation-queue.settings.json
{ "maxConcurrent": 3, "source": "dsh-ui" }
三個入口等價:底部狀態條 − / +、設置頁 − / +、直接編輯上述 JSON。
典型用法與排障¶
查看隊列狀態¶
Get-Content "$env:USERPROFILE\.dsh\conversation-queue.json"
返回中包含 running、waiting、maxConcurrent、active、queue 等字段;maxConcurrent / enabled 爲當前生效值,configured 爲 YAML 默認值。lastEvent 爲 unloaded 時表示插件已卸載或重載失敗。
日誌¶
$env:USERPROFILE\.dsh\conversation-queue.boot.log:是否成功apply-ok- 宿主日誌搜
conversation-queue::放行、釋放、排隊事件
已知界面行爲¶
排隊中的對話在會話 UI 上仍可能顯示「運行中」(回合已開始但卡在發請求前);狀態條與設置頁會顯示「排隊」。關閉排隊中的對話會立刻出隊;關閉運行中對話則槽位立即讓給下一位。卸載插件時排隊者會被拒絕或放行,不會永久掛起。
適用場景與注意¶
適合:本機內存偏緊、習慣多開 DSH 對話、希望用硬上限代替自覺錯峯的開發者。README 明確面向「兩個對話一起跑就可能被系統 kill」的機器。
注意:
- 引擎要求 Node
>=18、DSH>=0.2.0(package.json)。 - 上限有效範圍爲 1~8;更大值對個人機器意義不大。
- 排隊期間不調模型,但仍會佔用一個「已開始回合」的會話狀態;以狀態條和 JSON 爲準判斷是否在排隊。
結尾¶
dsh-conversation-queue 把「同時跑幾個根對話」變成可配置、可觀測的閘門,並把內存、提交內存、磁盤與隊列攤在底部和設置頁,適合在資源緊張的 Windows 本機上長期開着 DSH 時使用。