用 dsh-llm-wechat 把微信網關的 Deepseek-v4-flash 接到 DeepSeek Harness

前言

DeepSeek Harness(dsh)是 DeepSeek 開源的智能體運行時,官方倉庫把它概括成一句話:一切皆插件。模型適配、工具、會話、沙箱和網頁界面,都可以在配置層增刪,不必改核心源碼。項目目前仍是開發者預覽,接口會繼續變。社區裏已經出現獨立的插件目錄站點,把 GitHub 上帶 dsh-plugin 話題的倉庫集中展示;需要說明的是,這類目錄與 DeepSeek / 幻方沒有官方從屬關係,不能當成官方應用商店。

很多人已經能在本機用 dsh web 跑智能體,模型這一側通常走官方 DeepSeek API。另一條路是微信小程序「Coding Plan」提供的 Deepseek-v4-flash,入口在 chatapi.weixin.qq.com,協議表面上是 OpenAI 兼容。直接拿官方 dsh-llm-deepseek 去打這個網關,會碰到三件事:思考內容不在 reasoning_content 裏,而是連同 <think> / </think> 整段塞進 content;工具調用後續 delta 會顯式發 id: null / name: null,把首個片段裏的正確值覆蓋掉;DSH 把工具結果放在 tool-result 塊裏,發給網關時還要展開成 role: tool 消息。原生解析器處理不了這些差異,思考進不了思考塊,正文裏會留下標籤,工具調用也不穩定。

dsh-llm-wechat 做的事情很具體:複用官方 DeepSeekAdapter,只在響應側加一層流式轉譯,讓 DSH 把這條微信網關當成官方 DeepSeek 來用。它不是把微信聊天窗口接到 Harness 的機器人通道——社區裏另有一批 iLink / 掃碼登錄的微信橋,不要和這個插件混在一起。

本文按社區目錄詳情頁、GitHub 倉庫 README / package.json / cordis.patch.yml / lib/index.js / lib/wechat-translate.js,以及官方 deepseek-ai/deepseek-harness 交叉覈對後整理。

這是什麼

dsh-llm-wechat 是一款 DeepSeek Harness 的 LLM 適配插件,由 sulfide2085 維護,GitHub 倉庫爲 sulfide2085/dsh-llm-wechat。社區目錄把它歸在「通知與集成」,主要語言是 JavaScript。截至 2026-08-18,目錄頁與 GitHub 都顯示 6 星。package.json 裏的版本是 0.1.0-rc.6,包名寫成 @deepseek-ai/dsh-llm-wechat,並聲明許可證爲 MIT;倉庫根目錄目前沒有單獨的 LICENSE 文件,GitHub 的 license 字段因此爲空。安裝前仍應自己打開源碼覈對。

README 寫明:這是從項目內拆出來獨立維護的公開倉庫,源碼就在 dsh-llm-wechat 裏。它註冊的 provider route 是 wechat,默認對接 https://chatapi.weixin.qq.com/openai/v1,模型目錄默認只有一條:Deepseek-v4-flash(界面顯示名 WeChat Deepseek-V4-Flash)。請求序列化、錯誤映射、模型解析、重試策略都繼承官方 dsh-llm-deepseekDeepSeekAdapter,不修改任何 DSH / pi-ai 源碼。

它解決的問題可以壓成一句話:讓 DSH 把微信 Coding Plan 這條網關的流,轉成上層能識別的標準格式——思考進思考塊、工具調用正常、正文無標籤。

核心功能

倉庫 README 和源碼對能力邊界寫得很清楚,下面只列已經覈對過的部分。

1、流式 think 標籤轉譯。 微信網關在 thinking 開啓時,會把「思考 + 最終答案」整體放進 delta.content,思考在前、答案在後,中間用 </think> 分隔,也可能帶顯式的 <think> 開標籤。插件在 parseSsetranslate 之間插入 ThinkTagSplitter 狀態機:把閉標籤之前的文本重排進 reasoning_content,之後留給 content。2026-08-16 的提交把切分改成增量輸出,只保留標籤長度級別的小尾巴用來識別跨 chunk 被切開的標籤,不再整段緩衝到 </think> 才往外吐。思考未閉合時,流結束會走 flush() 兜底。stripThinkingTags 默認開啓;thinking 關閉或不剝離時,攔截器不解析 JSON,原樣透傳。

2、工具調用字段不被 null 覆蓋。 微信後續 delta 會顯式發 id: null / name: nullWechatAdapter 只接受非空字符串去更新 id/name,避免把首個 delta 裏已經拿到的正確值沖掉。

3、工具結果按官方完整版展開。 DSH 把工具結果放在 tool-result 塊裏,序列化時展開爲獨立的 role: tool 消息;空結果兜底寫成 (no output),避免網關忽略空 content。

4、只在 wechat 通道追加強約束。 微信模型看到 system 裏的 SDK 工具聲明後,偶發會直接調用 glob / pwsh 等 collapsed 工具,觸發 unknown tool。插件在 system 末尾追加一段 TOOL USAGE RULE:除 run_code 外不要直接調工具,必須寫進 run_codeawait tools.name(...)。這段只作用於 wechat 通道,不影響其他 provider。README 也寫明,這隻能緩解,不能 100% 消除。

5、推理檔位開箱即用。 微信網關只認 off / high / max。插件的 resolveModel 無條件返回這三檔,默認 high。模型選擇器裏會出現 WeChat → Deepseek-V4-Flash,以及推理等級下拉。傳其他值會在發請求前報 UNSUPPORTED_REASONING_EFFORTthinking: disabled 會鎖死 off 檔。

6、對着網關超時做了請求級截止。 微信單次請求大約有 60 秒硬超時。插件默認 requestTimeoutMs55 秒,超時以 TIMEOUT 快速失敗並交給重試策略,避免半開連接一直佔着併發槽,空閒 watchdog 要等滿默認 5 分鐘才釋放。

安裝與啓用

社區目錄詳情頁給出的安裝命令如下,在 DeepSeek Harness 終端裏運行即可:

dsh plugin add github:sulfide2085/dsh-llm-wechat

插件以當前 dsh 進程的權限運行,安裝時可能執行代碼。安裝前請檢查源代碼倉庫和許可證。如需可復現安裝,目錄頁建議固定 commit 哈希:

dsh plugin add github:sulfide2085/dsh-llm-wechat#commit

#commit 換成實際哈希。本文覈對當日,倉庫 master 最新提交是 03e2107bfc3d48a517b516934c973fdc3aa4392b(2026-08-16)。

倉庫 README 還寫了本地目錄裝法,適合已經 clone 源碼、並指定 web profile 的情況:

dsh plugin --profile web add ./dsh-llm-wechat

dsh plugin add 會把包以 link: 方式裝進 profile,並把 dsh.bundle 聲明的 patch 層(cordis.patch.yml)追加到 dsh.profile.bundles,無需手動改文件。README 裏的 npm 安裝命令(dsh plugin --profile web add @deepseek-ai/dsh-llm-wechat)標註爲「待發布」,目前不要按已上架的包去裝。

裝完之後還要準備 Token。README 要求在 $DSH_HOME/.credentials.yaml 寫入微信 Coding Plan 的 API Token,也可以在啓動環境導出同名變量:

WECHAT_API_KEY: <微信 Coding Plan 的 API Token>

然後在 $DSH_HOME/settings.yaml 增加 llm-wechat: 段。README 寫這段是熱加載,改完不必爲配置本身重啓;首次啓用仍建議按倉庫的接入清單重啓一次 dsh web。示例配置如下(字段與官方 dsh-llm-deepseek 對齊,另外多了 stripThinkingTagsrequestTimeoutMs):

llm-wechat:
  apiKeyEnv: WECHAT_API_KEY
  baseURL: https://chatapi.weixin.qq.com/openai/v1
  thinking: enabled
  reasoningEffort: high
  maxTokens: 48000
  defaultContextWindow: 200000
  models:
    - id: Deepseek-v4-flash
      name: WeChat Deepseek-V4-Flash
      contextWindow: 200000
      maxTokens: 48000
  stripThinkingTags: true
  streamIdleTimeoutMs: 300000
  requestTimeoutMs: 55000

README 把 48000 / 200000 標成微信網關的 maxOutput / maxInput 上限。reasoningEffort 可選 off | high | max,默認 high

如果之前在 llm-pi-ai.providers.weixin 配過微信,必須刪掉該段。插件註冊的 route 是 wechat,舊配置留着會觸發 DUPLICATE_ADAPTER;選擇器裏也可能出現兩組重複條目,而且舊組沒有推理等級。

典型用法

倉庫給第三方用戶的接入順序是:

  1. 用上一節的 dsh plugin add 裝插件;
  2. $DSH_HOME/.credentials.yamlWECHAT_API_KEY
  3. (可選)在 $DSH_HOME/settings.yamlllm-wechat: 段,設置默認檔位(不寫則默認 high);
  4. 重啓 dsh web
  5. 模型選擇器裏選 WeChat → Deepseek-V4-Flash,再選推理等級 off / high / max,然後開聊。

檔位對應關係以 README 爲準:

  • offthinking: {type: "disabled"},不思考,適合簡單問題或省 token;
  • high:開啓思考 + reasoning_effort: high,日常推薦;
  • max:開啓思考 + reasoning_effort: max,思考最長,也更容易撞上微信約 60 秒網關超時。

錯誤碼與官方 adapter 對齊,包括 AUTH(401/403)、RATE_LIMIT(429)、TIMEOUT(408/超時)、QUOTACONTEXT_WINDOW_EXCEEDEDTRANSPORTSTREAM_CLOSED(流結束沒有 [DONE])、MALFORMED_RESPONSEEMPTY_RESPONSEMISSING_CREDENTIALUNSUPPORTED_REASONING_EFFORT。沒有 key 時,源碼會提示把 WECHAT_API_KEY 存進 credentials 服務(Web 的 Models 頁也會寫),或在啓動環境裏導出。

適用場景與注意事項

適合已經在用 DeepSeek Harness,並且手裏有微信 Coding Plan Token、希望把 Deepseek-v4-flash 接到 dsh web 模型選擇器的人。它補的是 LLM 提供方,不是微信收發消息。如果你要的是掃碼後在微信裏跟智能體對話,需要另找 iLink 通道類插件,不要裝錯。

使用前有幾條倉庫自己寫下的限制,需要按原文理解:

  • 約 60 秒請求超時。 max 檔思考可以很長(README 寫實測可達 19k+ 字符),容易被網關掐斷,表現爲 TIMEOUT / 408。日常用 highmax 需要更大的 maxTokens,並接受更高失敗率。
  • 限流。 README 寫每 5 小時大約 1200 請求配額,併發上限 6。Agent 多步工具循環會很快把配額打滿,觸發 RATE_LIMIT(429)。
  • 工具規則遵循不穩定。 system 強約束只能降低直接調用 collapsed 工具的概率。
  • 只支持文本。 微信網關本身不支持圖像輸入。
  • 與官方 adapter 的同步是手工的。 translate / parseSse / serializeRequest 是從 dsh-llm-deepseek 複製的(那些符號模塊私有,無法 import)。官方升級不會自動同步,DSH 大版本之後要重新對齊。peerDependencies 已放寬爲 *,npm 不會在安裝期攔住不兼容的核心包,升級 DSH 後仍需自己迴歸。

Harness 目前是開發者預覽,官方 README 寫明會有破壞性變更。社區目錄收錄日期寫的是 2026-08-06,倉庫實際創建於 2026-08-14;目錄頁上的「最近推送」停在 2026-08-14,GitHub 上還能看到 2026-08-16 的性能修復提交。以倉庫頁面爲準。

再重複一次目錄頁的安全提示:插件以當前 dsh 進程的權限運行,安裝時可能執行代碼。安裝前檢查源代碼和許可證;需要可復現安裝時固定 commit。

小結

dsh-llm-wechat 把微信 Coding Plan 網關上的 Deepseek-v4-flash,接到 DeepSeek Harness 的 LLM 縫上。它不改 Harness 源碼,只做三件髒活:把混在 content 裏的思考標籤流式拆進 reasoning_content,擋住工具調用 delta 裏的 null 覆蓋,並把 tool-result 展開成網關能喫的 role: tool 消息。裝上之後,模型選擇器裏會出現 WeChat 這一路,思考檔位 off / high / max 直接能選。

網關自己的 60 秒超時、配額和工具遵循問題,插件解決不了。Token、舊的 llm-pi-ai.providers.weixin 配置、以及 DSH 升級後的迴歸,都要自己處理。

目錄頁:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-llm-wechat/

GitHub:https://github.com/sulfide2085/dsh-llm-wechat

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

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

小夜