前言¶
DeepSeek Harness(DSH)走 WorkBuddy 國內反代時,有些環境會在每輪對話第一步就失敗,報錯類似「請求被攔截,請重新發送」,標籤爲 INVALID_REQUEST,底層網關返回 code 11128。同一賬號換 WorkBuddy 國際版(www.workbuddy.ai)往往正常,說明問題出在國內網關對請求體的校驗,而不是模型額度或網絡。
內核默認組裝的 system prompt 裏會帶上多段與 DSH 生態相關的固定文案;國內網關 copilot.tencent.com 在服務端對 system(以及部分 assistant)消息做通道校驗,命中規則即拒絕。在 llm/stream 或 system-prompt/assemble 上改已經試過,要麼改不動深凍結的選項,要麼誤傷所有 provider。社區插件 dsh-wb400-guard(維護者 curo22,分類:聯網工具)選擇在宿主進程包裝 globalThis.fetch,只對發往國內網關的請求做語義等價的指紋中性化,從而繞過 11128,又不改動 user / tool 消息及其他 API。
下面介紹它解決什麼問題、如何工作,以及如何安裝與配置。
這是什麼¶
dsh-wb400-guard 是一條命令即可啓用的 DSH 插件:在 fetch 層改寫發往 copilot.tencent.com 的 chat 請求體裏 system / developer / assistant 消息中的已知觸發片段,使網關不再返回 11128,同時保持對模型而言的指令含義不變。運行時零 npm 依賴,需 Node ^22.19.0 || >=24.0.0,許可證 MIT,當前資料中版本爲 0.1.7。
典型失敗表象(資料中的原文包裝)如下:
本輪運行失敗 400: {"message":"workbuddy upstream client (http 400): 請求被攔截,請重新發送","type":"client","code":"client"}
網關側原始錯誤形態爲:
{"code":11128,"msg":"Illegal API invocation from an unapproved channel"}
是否需要安裝:對照現象¶
資料給出一張快速對照表,前三條同時命中時,基本可認定是本文檔針對的問題:
| 現象 | 是否命中 |
|---|---|
報錯含「請求被攔截,請重新發送」,標籤 INVALID_REQUEST |
是 |
| 換國際版模型正常,換回國內版失敗 | 是 |
| 第一步就掛,沒有完整回覆 | 是 |
| 換賬號、模型、機器症狀相同 | 是 |
| WorkBuddy 官方客戶端手動聊天正常 | 是 |
429 或「usage exceeds frequency limit」 |
否(額度) |
11101 或「Non-stream chat request」 |
否(非流式) |
fetch failed / 502 |
否(網絡) |
觸發來源(插件爲何要改四處)¶
國內網關的攔截與 DSH 默認帶入的 system 內容有關。資料歸納四個互不相同的觸發源;只修其中一部分,在仍攜帶其餘段的 profile 上仍會 400。
- 文件引用說明(
@deepseek-ai/dsh-file-reference):注入段中含@與特定前段詞組組合,不是「單個 @」就會攔;將@換成等義(at)可過網關。 - 內核身份句(
@deepseek-ai/dsh-system-prompt,默認includeHarnessIdentity = true):system 開頭的You are an AI agent powered by DeepSeek Harness.(DeepSeek與Harness之間含零寬空格 U+200B)會觸發;改標點或句式可過。 - personaPrefix(
@deepseek-ai/dsh-web-app的cordis.patch.yml):You are a coding agent powered by ...句式會觸發,與模型名無關。 - Web GUI 段(
@deepseek-ai/dsh-harness-dev-context):位於 system 尾部的兩段 DeepSeek Harness Web GUI 相關文案也會觸發;僅改「開頭錨定」的修法夠不到這裏。
國際網關不做同類校驗,同一份 body 發 www.workbuddy.ai 爲 200。
核心功能:fetch 層做了什麼¶
插件只對目標 host 的請求生效(默認 copilot.tencent.com),在發出前掃描 system / developer / assistant 消息,按資料中的規則表改寫:
| # | 改什麼 | 改成什麼 |
|---|---|---|
| 1 | 文件引用段裏的 @ |
(at) |
| 2 | 開頭的身份句(含零寬空格變體) | You are an AI agent powered by DeepSeek-Harness. |
| 3 | You are a coding agent powered by ... |
You are a coding agent running on ...(模型名保留) |
| 4 | DeepSeek Harness Web GUI 相關句 | this Web GUI / Current Web GUI URL 等中性表述 |
最後兜底:將殘留的 DeepSeek + 不可見分隔 + Harness 品牌指紋統一爲 DeepSeek-Harness(含歷史會話凍結段落)。
assistant 消息也要掃:資料實測表明,文件引用段在 assistant 中任意位置都會觸發 11128;身份句仍主要在開頭觸發。user 與 tool 消息 deliberately 不改;DeepSeek、OpenAI、Anthropic、WorkBuddy 國際版等其它 host 原樣透傳。
選用 fetch 層的原因:11128 重試階梯會多次重發請求,在 body 組裝層改容易漏級;而 stream 事件的 GenerateOptions 深凍結無法改,assemble 事件則會波及所有 provider。
安裝與啓用¶
推薦:DSH 插件命令¶
把 web 換成你實際使用的 profile 名(桌面版一般爲 desktop):
dsh plugin --profile web add github:curo22/dsh-wb400-guard
裝完後的確認¶
完全退出並重啓 DSH Desktop(不是僅關窗口)。宿主日誌中應出現類似:
[I] [dsh-wb400-guard] [dsh-wb400-guard] fetch guard installed for copilot.tencent.com
資料還提供 node install.mjs 等方式安裝到 profile 的 vendor 目錄並寫入 package.json 的 dependencies 與 dsh.profile.bundles;若手動改 profile 的 package.json,避免用 PowerShell 的 ConvertTo-Json | Set-Content,以免 UTF-8/BOM 與中文路徑被破壞導致 profile 加載失敗。
配置¶
在插件的 cordis.patch.yml 中可調(資料原文):
| 鍵 | 默認 | 說明 |
|---|---|---|
enabled |
true |
爲 false 時不包裝 fetch |
gatewayHosts |
["copilot.tencent.com"] |
要防護的 host;以 . 開頭可做後綴匹配;國際網關默認不在列表 |
mode |
"anchor" |
anchor 只改兩處指紋相關句式;all 在 system 上做更寬兜底替換(資料說明:all 只在 system 上兜底全換,不影響 assistant 裏的普通 @) |
適用場景與注意¶
適合誰:在 DSH 中配置 WorkBuddy 國內版反代、穩定復現 11128 /「請求被攔截」且國際版正常的開發者。
注意:
- 插件以當前 DSH 進程權限運行,會在運行時替換全局
fetch行爲(僅對配置的 gateway host)。安裝前應閱讀 GitHub 倉庫 源碼與 MIT 許可證,確認改寫策略可接受。 - 改寫目標是語義等價、僅避開網關字面匹配;若騰訊側規則變化,可能需要插件更新。
- 社區目錄 SkillHub 插件頁 與 GitHub 爲獨立生態信息源,與 DeepSeek / 幻方無官方從屬關係。
結尾¶
dsh-wb400-guard 把 WorkBuddy 國內網關 400(code 11128)的修復收斂到一條 DSH 安裝命令:在 fetch 層對已知 system / assistant 指紋做定向中性化,不碰 user 消息,也不影響國際網關與其它 API。若你符合前文現象對照表,可先安裝、重啓 Desktop,用日誌行確認 guard 已掛載,再發起一輪國內版對話驗證。
- 目錄頁:https://www.skillhub.cn/plugins/curo22/dsh-wb400-guard
- 源碼與完整說明:https://github.com/curo22/dsh-wb400-guard