dsh-buddy-guard:修复 CodeBuddy 通道在 DSH 下的 HTTP 400

前言

在 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 步骤)

  1. 将本仓库复制到 <DSH_HOME>/profiles/<profile>/node_modules/dsh-buddy-guard/
  2. 在该 profile 的 package.json 中,把 "dsh-buddy-guard" 追加到 dsh.profile.bundles
  3. 在同一文件的 dependencies 中加入 "dsh-buddy-guard": "0.1.0"
  4. 用 --dump-config 检查是否出现 buddy-guard 相关行
  5. 重启 DSH

配置

插件在 Cordis 补丁中的配置示例:

- id: buddy-guard
  name: 'dsh-buddy-guard'
  config:
    enabled: true
    providers:
      - buddy
  • enabled:总开关。
  • providers:需要加前缀的 provider 列表,默认 ['buddy']。

典型用法与验证

经过上面的安装与重启,在 DSH 中切换到任意 buddy 模型并发送一条消息。若能正常收到回复,说明插件已生效。

若仍为 400,README 建议依次确认:

  1. 再次执行 --dump-config,确认存在 buddy-guard 行。
  2. 确认 lib/index.js 存在且非空。
  3. 确认 dsh.profile.bundles 中已列出该包(README 称这是最常漏掉的步骤)。
  4. 确认已真正重启 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。

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

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

小夜