前言¶
在 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 时使用。