前言¶
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-deepseek 的 DeepSeekAdapter,不修改任何 DSH / pi-ai 源码。
它解决的问题可以压成一句话:让 DSH 把微信 Coding Plan 这条网关的流,转成上层能识别的标准格式——思考进思考块、工具调用正常、正文无标签。
核心功能¶
仓库 README 和源码对能力边界写得很清楚,下面只列已经核对过的部分。
1、流式 think 标签转译。 微信网关在 thinking 开启时,会把「思考 + 最终答案」整体放进 delta.content,思考在前、答案在后,中间用 </think> 分隔,也可能带显式的 <think> 开标签。插件在 parseSse 与 translate 之间插入 ThinkTagSplitter 状态机:把闭标签之前的文本重排进 reasoning_content,之后留给 content。2026-08-16 的提交把切分改成增量输出,只保留标签长度级别的小尾巴用来识别跨 chunk 被切开的标签,不再整段缓冲到 </think> 才往外吐。思考未闭合时,流结束会走 flush() 兜底。stripThinkingTags 默认开启;thinking 关闭或不剥离时,拦截器不解析 JSON,原样透传。
2、工具调用字段不被 null 覆盖。 微信后续 delta 会显式发 id: null / name: null。WechatAdapter 只接受非空字符串去更新 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_code 再 await tools.name(...)。这段只作用于 wechat 通道,不影响其他 provider。README 也写明,这只能缓解,不能 100% 消除。
5、推理档位开箱即用。 微信网关只认 off / high / max。插件的 resolveModel 无条件返回这三档,默认 high。模型选择器里会出现 WeChat → Deepseek-V4-Flash,以及推理等级下拉。传其他值会在发请求前报 UNSUPPORTED_REASONING_EFFORT。thinking: disabled 会锁死 off 档。
6、对着网关超时做了请求级截止。 微信单次请求大约有 60 秒硬超时。插件默认 requestTimeoutMs 为 55 秒,超时以 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 对齐,另外多了 stripThinkingTags 和 requestTimeoutMs):
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;选择器里也可能出现两组重复条目,而且旧组没有推理等级。
典型用法¶
仓库给第三方用户的接入顺序是:
- 用上一节的
dsh plugin add装插件; - 在
$DSH_HOME/.credentials.yaml存WECHAT_API_KEY; - (可选)在
$DSH_HOME/settings.yaml加llm-wechat:段,设置默认档位(不写则默认 high); - 重启
dsh web; - 模型选择器里选 WeChat → Deepseek-V4-Flash,再选推理等级
off/high/max,然后开聊。
档位对应关系以 README 为准:
off:thinking: {type: "disabled"},不思考,适合简单问题或省 token;high:开启思考 +reasoning_effort: high,日常推荐;max:开启思考 +reasoning_effort: max,思考最长,也更容易撞上微信约 60 秒网关超时。
错误码与官方 adapter 对齐,包括 AUTH(401/403)、RATE_LIMIT(429)、TIMEOUT(408/超时)、QUOTA、CONTEXT_WINDOW_EXCEEDED、TRANSPORT、STREAM_CLOSED(流结束没有 [DONE])、MALFORMED_RESPONSE、EMPTY_RESPONSE、MISSING_CREDENTIAL、UNSUPPORTED_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。日常用high;max需要更大的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