前言¶
在 DeepSeek Harness(DSH)里把模型切到腾讯 CodeBuddy 的 buddy 通道时,常见现象是每一轮请求都直接失败,返回 HTTP 400,错误信息类似「请求被拦截,请重新发送」以及 Illegal API invocation from an unapproved channel。同一账号、同一端点,若请求里不再携带 DSH 默认的系统提示词,却可以正常对话。这说明问题往往出在 DSH 组装后的 system 内容与上游校验规则之间的冲突,而不是单纯的账号或模型配置错误。
下面介绍社区插件 dsh-buddy-guard(维护者 AsterLuo,分类:客户端)。它在系统提示词组装阶段对首段内容做最小改动,使 buddy 通道在 DSH 中恢复可用。安装命令与配置项均来自项目 README,使用前请自行查看源码与 MIT 许可证;插件随当前 DSH 进程权限运行。
这是什么¶
dsh-buddy-guard 是 DSH 的 Cordis 插件,针对 CodeBuddy / buddy(腾讯) 通道在 Harness 中因系统提示词触发上游拒绝而导致的 INVALID_REQUEST(HTTP 400)。
项目仓库:https://github.com/AsterLuo/dsh-buddy-guard
社区目录页:https://www.skillhub.cn/plugins/AsterLuo/dsh-buddy-guard
当前 package 版本为 0.1.0,要求 Node >= 20。
问题与根因(README 实测,2026-10-21)¶
在 buddy 通道上选用任意模型(如 hy4-preview、deepseek-v4.1-flash、hy3 等),只要请求携带 DSH 的系统提示词,每轮都会 400。README 记录的上游行为是:对 system 文本做前缀匹配。若 system 以下面这句开头:
You are an AI agent powered by DeepSeek Harness.
会被直接拒绝。README 中的边界测试表明:在该句前加 一个前导空格 即可得到 200;改 X-Domain、X-Product-Code、端点、User-Agent、模型名等均未改变 400 结果。规则匹配的是 system 内容的开头;仅在前面加一个字符即可打断匹配,仅在句末加空格或换行无效。
核心功能¶
插件监听 system-prompt/assemble,在返回的组装结果里,给第一个非空 section 增加一个前导空格。renderPrompt 用 \n\n 拼接各段后,整段渲染出的 system 文本即以该空格开头,从而避开上述前缀匹配。
- 默认仅作用于
buddy提供商,其它 provider 原样透传。 - 可通过配置关闭或调整
providers列表。
README 说明:早期版本曾挂在 llm/stream 里用 next(modifiedOptions) 改请求,在 Cordis 瀑布实现下无效(next 不接受参数,修改会被丢弃);只有通过监听器的返回值替换参数才生效。当前实现因此选在 system-prompt/assemble 上处理。
安装与启用¶
使用官方命令将包安装到指定 profile 的 node_modules,并注册到 dsh.profile.bundles(不会改动你已有的 cordis.patch.yml):
dsh plugin add github:AsterLuo/dsh-buddy-guard --profile <your-profile>
建议固定版本:
dsh plugin add github:AsterLuo/dsh-buddy-guard#v0.1.0 --profile <your-profile>
安装后必须重启 DSH——配置在启动时读取一次。
手动安装(README 步骤)¶
- 将本仓库复制到
<DSH_HOME>/profiles/<profile>/node_modules/dsh-buddy-guard/ - 在该 profile 的
package.json中,把"dsh-buddy-guard"追加到dsh.profile.bundles - 在同一文件的
dependencies中加入"dsh-buddy-guard": "0.1.0" - 用
--dump-config检查是否出现buddy-guard相关行 - 重启 DSH
配置¶
插件在 Cordis 补丁中的配置示例:
- id: buddy-guard
name: 'dsh-buddy-guard'
config:
enabled: true
providers:
- buddy
enabled:总开关。providers:需要加前缀的 provider 列表,默认['buddy']。
典型用法与验证¶
经过上面的安装与重启,在 DSH 中切换到任意 buddy 模型并发送一条消息。若能正常收到回复,说明插件已生效。
若仍为 400,README 建议依次确认:
- 再次执行
--dump-config,确认存在buddy-guard行。 - 确认
lib/index.js存在且非空。 - 确认
dsh.profile.bundles中已列出该包(README 称这是最常漏掉的步骤)。 - 确认已真正重启 DSH。
项目内测试:
npm test
适用场景与注意¶
适合谁: 已在 DSH 中配置腾讯 CodeBuddy 中国区 buddy 通道(如 www.codebuddy.cn 相关账号),且因 DSH 默认 system 提示词导致全线 400 的开发者。
需要知道的限制:
- README 明确写道:该做法绕过了上游的内容校验,规则可能随时变更;若错误复现,需重新做边界测试再找新的触发条件,再考虑是否调整插件内的
GUARD_PREFIX。 - 「unapproved channel」在 README 中的解释包括:账号为中国区 CodeBuddy,而客户端仍走国际产品形态的不一致;本插件只是让当前组合暂时可用,并不消除这种底层不一致。使用国际版 workbuddy 可完全避开该检查。
- 插件以 DSH 进程权限运行,安装前请阅读仓库源码与许可证,勿在未审阅的情况下盲目加入生产 profile。
DSH 生态强调「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系,本文介绍的插件亦来自社区维护者 AsterLuo。
结尾¶
dsh-buddy-guard 用一行系统提示词前的空格,解决 DSH 与 CodeBuddy buddy 通道之间因默认 agent 文案触发的 HTTP 400,实现成本低、行为可配置。若你正被 Illegal API invocation from an unapproved channel 挡住,可按 README 安装、重启并核对 --dump-config。