前言¶
在 DeepSeek Harness(DSH)里接第三方网关时,工具调用后的续写请求有时会直接被网关以 HTTP 400 拒掉,报错里常见「thinking mode 必须把 reasoning_text 回传给 API」一类信息。Harness 原生发出的请求未必满足这类中继的校验规则,而等问题进 upstream 再改 profile 或手改请求体,成本高、也不利于逐项开关和回退。
下面介绍社区插件 llm-for-dsh(维护者 theRMM714,分类:模型推理):它在出口拦截发往模型的 JSON 请求,用可插拔的「修复项」按需改写报文,并在 Host 设置里提供「LLM 兼容性修复」面板逐项勾选。官方若日后内置同类能力,可按 README 说明整包卸载;在此之前,它面向的是「网关要求思考内容回传、且希望改动可逆、可诊断」的 DSH 使用者。
这是什么¶
llm-for-dsh 是 DeepSeek Harness 插件,版本适配 0.2.0-rc.2(见仓库 README)。定位一句话:可插拔地修复发往模型的请求;首个(也是当前唯一的)修复项针对第三方网关 Responses 路由上、工具调用之后出现的 reasoning_text 必须回传类 400 错误。根因与实现契约见仓库内 DESIGN.md。
插件通过自带的补丁层(dsh.bundle.patch / cordis.patch.yml)挂载,装包即生效补丁行,无需手改 profile 配置。
核心功能¶
修复项:responses-reasoning-echo¶
| id | 作用 | 默认 |
|---|---|---|
responses-reasoning-echo |
命中 /responses 请求时,把该轮思考项补回 function_call 之前;优先用上一轮响应里捕获到的原始 reasoning item,其次是 harness 历史里仍保留的思考文本 |
关闭 |
默认关闭是有意的:会改写报文,应由使用者在看清行为后再启用。实测(中继 Responses 路由)网关校验的是整个窗口,不是最新一轮;窗口里任一轮带工具调用却没有思考项,整包请求会被拒。插件用「缺项即补」保证覆盖面,并用「最近 N 轮写真实思考文本」等选项控制注入成本。
设置页中与同一修复相关的选项(可独立、可同时开启)包括:生效主机范围、诊断日志、最近 N 轮写真实思考文本、思考项只写一个文本槽、没有思考时补占位项、思考形状统一成最保守形式等;具体含义见 README 表格。配置写入 llm-compat 条目,字段含 enabled(修复 id 列表)、hosts、diagnostics 及上述选项。
重试(非报文形状修补)¶
部分失败属于网关间歇行为:改写后已无缺口,同一形状多次成功后再被拒。插件在模型调用层提供重试(不重跑工具):规则目录 src/retries/,当前规则 reasoning-text-not-passed-back(HTTP 400 且正文同时含 reasoning_text 与 must be passed back)。默认关闭,最多重试次数默认 2、上限 5,退避 300ms、600ms… 并带抖动。与 DSH 自带 dsh-llm-retry 可共存;诊断日志会记录 retrying … after reasoning-text-not-passed-back。
诊断与回退¶
开启诊断后,改写与响应状态写入 Host 目录的 llm-compat.log;网关拒绝时还会把当时发出的完整请求体摘要写入 llm-compat-rejected.jsonl。设置页可清空日志(依赖 Host 提供 /llm-compat/log 路由)。
回退路径(README 列举,由低到高):取消勾选恢复原生请求;环境变量 DSH_LLM_COMPAT_DISABLED=1 禁用整包补丁;卸载插件。插件除日志外不写 harness 文件。
已知限制(摘要)¶
- 只处理
POST且 body 为 JSON 字符串 的请求;不读流式上传体。 - 响应捕获在进程内,Host 重启后历史仅能走「历史思考文本合成」路径。
- 合成 reasoning item 不带
id(避免伪造 id 被网关拒绝)。
安装与启用¶
安装命令来自仓库 README:
# 本地路径(开发:link 改完即生效)
dsh plugin --profile <profile> add /path/to/llm-for-dsh
# 从 GitHub(lib/ 已入库,无需构建与 allowBuilds)
dsh plugin --profile <profile> add github:theRMM714/llm-for-dsh
更新:
dsh plugin --profile <profile> update llm-for-dsh
从 GitHub 安装或更新时 shell 需能访问 github.com;若需代理,可先设置 HTTPS_PROXY。
重启 Profile 后,设置面板会出现「LLM 工具」页(页内标题为「LLM 兼容性修复」)。开关即时生效并持久化到 Profile 配置层。
典型用法¶
- 按上文命令为指定 profile 安装插件并重启 Profile。
- 打开 设置 → LLM 兼容性修复,先阅读各控件说明;在中继-only 场景下,「生效主机范围」建议填入中继域名(每行一个),留空则对所有主机改写。
- 若遇工具调用后续写时的
reasoning_text/must be passed back类 400,勾选启用responses-reasoning-echo,并按需要调整「最近 N 轮」「占位项」「单槽写入」「保守形状」等选项以平衡通过率与请求体大小。 - 若报文已完整仍偶发被拒,可在重试卡片启用
reasoning-text-not-passed-back并设置最多重试次数。 - 排查时开启「诊断日志」,结合
llm-compat.log与llm-compat-rejected.jsonl核对网关反对的字段;确认问题后可用「清理日志」重新开始观察。
扩展修复项需改 src/fixes/ 并 npm run build(面向维护者);普通使用者只需 GitHub 安装路径中的预构建 lib/。
适用场景与注意¶
适合谁:在 DSH 0.2.0-rc.2 附近版本上,经第三方网关走 OpenAI 兼容 Responses 路由、且工具链触发「必须回传思考项」校验的智能体或自动化场景。
使用前请知悉:
- 插件以当前 DSH 进程权限运行,会改写出站 LLM 请求并在 Host 目录写诊断日志;安装前应阅读 GitHub 仓库 源码与 MIT 许可证(见
package.json),确认改写行为可接受。 - 社区目录 SkillHub 插件页 与 GitHub 为独立信息源,与 DeepSeek / 幻方无官方从属关系;星标与简介以各页面当时展示为准。
- 修复默认关闭;混用官方直连与中继时,务必配置主机范围,避免对不需要改写的路由生效。
结尾¶
llm-for-dsh 把「LLM 网关兼容」拆成可勾选修复项、可选重试与可落盘诊断,并保留一键回退路径,适合在 DSH 插件生态里按需解决 Responses 路由上的思考回传问题。
- 目录页:https://www.skillhub.cn/plugins/theRMM714/llm-for-dsh
- 源码与完整说明:https://github.com/theRMM714/llm-for-dsh