前言¶
DeepSeek Harness(DSH)支持通过插件扩展能力。这个插件把 QQ 私聊变成 DSH 的远程控制台:手机上发一句话,家里/公司的电脑就真的开始干活。会话直接在 DSH 进程内创建,所以在 Web 界面里能看着它跑,也能随时接管过来继续打字。
是什么¶
xhuyangx1/dsh-qq-bridge 是一个 DSH 插件,用 QQ 私聊远程驱动 DeepSeek Harness。维护者是 xhuyangx1,归类为「联网工具」。它通过 NapCat(电脑上已登录的 QQ)暴露 OneBot 11 WebSocket 接口,插件连接后把 QQ 消息转为 DSH 会话,再把执行结果与产物发回 QQ。
核心能力¶
- 进程内建会话:默认用
internal模式,直接在当前 DSH 进程里调用ctx.agents.create()。会话和 Web 里手动开的是同一种东西,出现在侧边栏,可围观也可接管。 - Web 可见可接管:QQ 开的会话在 DSH 左侧会话列表可见,可直接在 Web 里接着打字。
- 三种执行后端:
internal(推荐):无冷启动,Web 可见。acp:常驻子进程,首轮 5–10 秒冷启动。headless:每次 spawn,冷启动 13–17 秒。- 自动降级:
internal→acp→headless。 - 即时回执:收到消息 0.2 秒内回「收到,正在处理…」,之后按 3 秒节奏报进度。
- 设置页控制:在 DSH 设置里一键启停 NapCat、看状态和日志。
- 仅私聊模式:
privateOnly: true时群里完全静默,避免误触发。 - 图片/文件双向:发给机器人会被下载到
inbox/供模型读取;它的产物自动发回 QQ。 - 进度报告:长任务执行中,按工具切换报告进度,可配置最小间隔与最大条数。
安装与启用¶
安装命令(来自 README):
dsh plugin add https://github.com/xhuyangx1/dsh-qq-bridge
安装后,在你 profile 层的 cordis.patch.yml 追加覆盖:
- id: qq-bridge
disabled: false
config:
privateOnly: true
allowedUsers:
- 你的QQ号
napcat:
dir: 'C:\\path\\to\\NapCat'
重启 DSH 即可。
典型用法¶
命令(群聊需要前缀,私聊直接说话)¶
/dsh <任务>:在电脑上执行,结果发回。/dsh stop:打断本群正在跑的任务。/dsh ping:探活 + 队列状态。/dsh new [名]:开新会话(清空上下文)。/dsh list:列出历史会话。/dsh switch <n>:切到第 n 个会话。/dsh current:显示当前会话和工作目录。/dsh dir:查看工作目录。/dsh dir <路径>:切换工作目录。/dsh dir -:回到上一个目录。
私聊模式(默认开启)¶
privateOnly: true
开了之后群里发什么都不处理,只响应私聊。不要用「allowedGroups 留空」来实现只私聊,那的语义是「空 = 不限制任何群」,清空反而会放开所有群。
internal 模式的关键点¶
const selection = defaultModel.currentSelection()
const agentOptions = { provider: selection.provider, model: selection.model }
const resolved = await ctx.get('agentPresets').resolve()
setup = async (agentCtx) => { await ctx.get('agentPresets').mount(agentCtx, resolved.id) }
agents.create({ sessionId, meta: { cwd, agentPreset: resolved.id }, agentOptions, setup })
- 参数是
sessionId,不是id。 - 必须传
agentOptions,否则提示词里{{model}}为空,回合直接以 error 结束。 - 服务要延迟获取 ——
apply()时agents/sessions还没挂上来。 - 必须装 agent preset,否则会话是空壳、没有任何工具。
回复取法¶
const events = session.snapshotEvents()
const textParts = events
.filter(e => e.role === 'assistant' && e.content)
.flatMap(e => e.content.map(c => c.text || c.texts?.join('') || ''))
.join('')
await agent.whenIdle()
多模态:图片与文件¶
发图片或文件给机器人,插件会自动:
1. 下载到 <cwd>/inbox/<时间戳>-<短id>.<ext>
2. 把路径拼进任务,交给模型用 read_image / read 读取
3. 回一句「收到 N 个文件,正在处理…」
附件回传¶
回答里出现下面这几种独占一行的写法,插件会把文件真的发到 QQ:
**[学习机资源合集.xlsx](inbox/xxx.xlsx)** ← markdown 链接
附件: /path/to/chart.png ← 显式标记
- [reel.mp4](reels/out/reel.mp4) ← 列表项里的链接
相对路径会按 cwd 解析;文件必须真实存在。要关掉用 sendAttachments: false。
会话与上下文¶
- 同群共享一个会话,上下文连续;私聊按人隔离。
- 空闲自动重置:超过
resetOnIdleMins(默认 180 分钟)没说话,自动开新会话。 - 想立刻清空上下文用
/dsh new。
安全提示¶
- 必须填
allowedUsers,否则任何能私聊到机器人的人都能驱动你的机器。 - 默认
privateOnly: true,群聊需要显式打开。 - 机器人跑在 DSH 的权限范围内,请确认你清楚模型可能执行哪些操作。
- 不要把这个机器人拉进公开群。
适用场景¶
适合需要远程、低门槛控制 DSH 的场景:手机上快速发一条指令让电脑跑任务,或者把 DSH 当作「随身助手」。插件以当前 dsh 进程权限运行,安装前应检查源码与许可证。
总结¶
这个插件把 QQ 私聊变成 DSH 的远程控制台:手机上发一句话,电脑就真的开始干活。会话直接在 DSH 进程内创建,Web 里可见可接管,支持三种执行后端与即时回执,适合需要远程、低门槛控制 DSH 的开发者。