前言¶
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 的開發者。