用 QQ 私聊驱动 DeepSeek Harness

前言

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 的开发者。

目录页 | GitHub

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

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

Xiaoye