用 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

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

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

小夜