在 DeepSeek Harness (DSH) 开发智能体时,可能会遇到一种情况:流式内容正常输出,但对话回合结尾必定报错。这通常是因为 DSH 使用的 pi-ai SDK 强制要求流式响应以 finish_reason 收尾,而部分聚合端点未发送该信号。
dsh-model-fix 是一个 DSH 插件,由 Retr67 维护。它专门修复 opencode 聚合端点上 muse-spark-1.2 和 gpt-5.6-luna 的流式收尾缺陷。
核心功能¶
该插件作用于 DSH 的 llm/stream waterfall 阶段。当流式响应中已输出内容,但结尾因端点缺陷(未发送 finish_reason 或 [DONE])导致错误代码为 TRANSPORT / STREAM_CLOSED 时,它会将结束状态改写为正常的 stop。
它仅修复这一特定场景:
1. 内容已输出(存在 text-delta / reasoning-delta 等)。
2. 错误信息明确为“缺少终止事件”(如 Stream ended without finish_reason)。
对于真实的传输故障(如 Socket 关闭)或空响应,插件不会介入,保持原有逻辑。
安装与启用¶
使用 DSH 官方命令行工具安装插件。安装后必须重启目标 profile 才能生效。
npx -y @deepseek-ai/dsh plugin --profile web add github:Retr67/dsh-model-fix
安装完成后,重启运行该 profile 的服务(例如 dsh web)。
配置¶
插件通过 cordis.patch.yml 文件进行配置。主要涉及两个配置项:modelPattern 和 providers。
| 字段 | 默认值 | 说明 |
|---|---|---|
modelPattern |
^(muse-spark\|gpt-5\.6-luna) |
对模型 ID 进行匹配的正则表达式,仅修复匹配到的模型。 |
providers |
[] |
Provider 路由键的白名单。留空则匹配所有 provider 中符合条件的模型。 |
配置示例¶
在 cordis.patch.yml 中添加以下配置:
- id: model-fix
name: dsh-model-fix
config:
modelPattern: '^(muse-spark|gpt-5\.6-luna)'
providers: []
自定义范围:
- 若只想修复 gpt-5.6-luna,可将 modelPattern 改为 '^gpt-5\.6-luna'。
- 若只想限定特定路由,可添加 providers: ['opencode-go']。
适用场景与注意¶
技术要求¶
- Node.js 版本:插件依赖 Node.js,要求版本为
^22.19.0或>=24。
隐私与设置说明¶
使用该插件修复流式收尾缺陷,无需在 opencode 平台开启“Allow models that train on request data”开关。
- 该开关涉及数据训练授权,属于隐私敏感项,不应为了使用模型而开启。
- 本插件修复的是流式传输协议的缺失,与该隐私开关无关。
总结¶
dsh-model-fix 解决了因 opencode 聚合端点未发送标准 finish_reason 导致 DSH 智能体对话失败并触发重试的问题。修复后,模型直连即可正常使用,避免了不必要的 token 消耗。
项目地址:https://github.com/Retr67/dsh-model-fix