前言¶
在 DeepSeek Harness(DSH)裏接 QQ 頻道時,常用 @tencent-connect/dsh-qqbot。默認行爲是把模型整段回覆一次性推到 QQ,讀起來像公告,缺少對話感。若希望回覆按句號、問號拆開,中間隔一兩秒再發下一條,更接近人在打字,需要在發送鏈路上做一層處理。下面介紹社區插件 dsh-split-reply(維護者 betty598,分類:聯網工具):不改官方 QQ 包,只在 QQBot.prototype.sendMarkdown 外包一層,實現按標點拆句與間隔發送。
這是什麼¶
dsh-split-reply 是 DeepSeek Harness 插件,倉庫 betty598/dsh-split-reply,目錄頁見 SkillHub。當前 package 版本爲 0.1.1,許可證 MIT。
它解決的是:dsh-qqbot 里正常回復、報錯、文件投遞、提問卡片等文字最終都經過 QQBot.prototype.sendMarkdown;本插件在該方法外包一層,拿到整段文本後按規則切開,逐條發出,兩條之間隨機等待約 0.7–1.6 秒(可在配置裏改)。
README 中的效果示意:
你:今天好累啊
她:怎麼啦。
是工作那邊的事嗎?
那你早點睡,別硬撐。
← 這條 1.4 秒後到
← 這條 1.2 秒後到
核心功能¶
拆句與發送流程¶
經過上面的掛載,插件大致做這些事:
- 拿到整段文本。
- 按
。!?!?…~和換行切開(換行是否分段由splitOnNewline控制)。 - 太短的碎片並回上一句,段數超過上限則合併。
- 相鄰兩條之間在
minIntervalMs–maxIntervalMs之間隨機等待。 - 逐條調用原有發送邏輯。
不改官方包,只包原型方法;dsh-qqbot 升級時一般不受影響。
宿主重載後的自愈(0.1.1)¶
宿主重載會把 QQBot 重新加載成新類,舊包層會丟;0.1.0 若不再執行 apply 會靜默停止拆句。0.1.1 起每 5 秒檢查原型上是否還有包層,缺失則補上;真正發消息時也會再補一次。純本地判斷,不消耗模型 token。
什麼時候不拆¶
下列情況整段原樣發出,不做拆分:
- 帶按鈕/鍵盤的消息(提問卡片、審批按鈕)。
- 含代碼塊、表格、Markdown 標題的回覆。
- 整段字數少於
minTotalChars。 - 配置裏
enabled: false。
安裝與啓用¶
插件以當前 DSH 進程權限運行,安裝前建議通讀倉庫源碼並確認 MIT 許可證與行爲是否符合預期。社區目錄 SkillHub 爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。
手動安裝(README 推薦)¶
在 desktop profile 下執行:
cd ~/.dsh/profiles/desktop
# 1. 把倉庫放到 _plugins 下
git clone https://github.com/betty598/dsh-split-reply.git _plugins/dsh-split-reply
# 2. 跑安裝腳本:寫 package.json、建軟鏈、加配置
node _plugins/dsh-split-reply/scripts/install.mjs "$PWD/_plugins/dsh-split-reply"
必須關閉 QQ 流式輸出¶
流式通道不經過 sendMarkdown,插件不會生效。在 ~/.dsh/profiles/desktop/cordis.patch.yml 中爲 im-qqbot 關閉流式:
# ~/.dsh/profiles/desktop/cordis.patch.yml
- id: im-qqbot
config:
appId: '你的AppID'
appSecret: 你的Secret
streaming: false # ← 加這一行
修改後重啓 DSH。
配置項¶
同一文件可調整 split-reply 段(安裝腳本通常會寫入片段,可按需改):
- id: split-reply
name: dsh-split-reply
config:
enabled: true
maxSegments: 4
minSegmentChars: 4
minTotalChars: 10
minIntervalMs: 700
maxIntervalMs: 1600
splitOnNewline: true
| 鍵 | 默認 | 說明 |
|---|---|---|
enabled |
true |
總開關 |
maxSegments |
4 |
最多拆幾條,超了自動合併 |
minSegmentChars |
4 |
太短的碎片並回上一句 |
minTotalChars |
10 |
整段短於這個字數就不拆 |
minIntervalMs |
700 |
兩條之間最短間隔 |
maxIntervalMs |
1600 |
兩條之間最長間隔 |
splitOnNewline |
true |
換行也算分段點 |
典型用法¶
先做安裝與 streaming: false,重啓後在 QQ 頻道與 Harness 對話即可;無需額外命令。適合希望 QQ 側呈現「多句、有間隔」的對話體,且回覆以中文標點爲主的場景。
若模型整段不用標點,插件無法切分,只能一次性發完——這是拆句策略本身的限制。
適用場景與注意¶
- 僅 QQ 頻道有效;其他 IM 若走各自發送口,需單獨對接。
- QQ 被動回覆同一條消息有次數上限(5 次),故
maxSegments默認 4。調大可能被限流;發送失敗時插件會吞掉失敗條目不崩進程,但後續條也可能發不出。 - 流式輸出開啓時本插件不生效。
- 卸載時:從
cordis.patch.yml刪除split-reply段;從package.json的dependencies和dsh.profile.bundles去掉dsh-split-reply;刪除node_modules/dsh-split-reply與_plugins/dsh-split-reply;再重啓。
結尾¶
dsh-split-reply 在不動官方 dsh-qqbot 的前提下,把整段 Markdown 回覆拆成多條並按間隔發出,並帶重載自愈。需要查閱說明或提 issue 時,可用目錄頁 betty598/dsh-split-reply @ SkillHub 與源碼 GitHub。