前言¶
DeepSeek Harness (DSH) 在处理模型工具调用时,有时会遇到模型输出的畸形参数(如嵌套的 {"arguments":{…}} 包装)。如果这些参数被原样持久化,下一轮历史回放时模型会模仿错误,导致调用链路越来越畸形。dsh-tool-args-unwrap 插件在 llm/stream 水位线上拦截并修正这些参数,从源头阻断坏示范的生成与传播。
插件简介¶
插件名称:dsh-tool-args-unwrap
维护者:shy19805
核心价值:在 DSH 的 llm/stream 流水线上修复模型产出的畸形工具参数,防止坏示范进入历史记录。
核心功能¶
- 修复畸形参数:处理嵌套 arguments 包装、键别名(如
args、parameters)、参数键名别名(如skill_name、name)等情况。 - 全链路修复:在参数持久化之前拦截,同时解决执行、持久化、历史回放三个环节中的畸形参数问题。
- 历史会话修正:v0.3.1 版本增加了对老会话输入侧的修正能力。在请求发往模型之前,对历史记录中的存量畸形参数进行就地修正,防止模型继续模仿错误。
- 宿主校验:基于宿主的
validateJsonSchemaValue校验器进行判定,确保修复后的参数符合 schema 要求。 - 静默处理:对于没有必填参数的工具,插件会静默吞掉多余的包装层,避免因包装导致的报错。
安装与启用¶
通过在 profile 的 package.json 中配置依赖和 bundles 来安装。
// <profile>/package.json
{
"dependencies": { "@dsh-external/dsh-tool-args-unwrap": "link:/abs/path/to/dsh-tool-args-unwrap" },
"dsh": { "profile": { "bundles": ["@dsh-external/dsh-tool-args-unwrap"] } }
}
配置完成后重启 DSH 即可生效。
验证与调试¶
- 确认生效:检查插件目录下的
state.json文件,确认listenerRegistered: true。 - 临时停用:在配置中设置
enabled: false即可完全停用流改写,无需卸载插件。
注意事项与限制¶
- 修复范围:插件只修复参数的“形状畸形”(如多了一层包装),不修复语义缺失(例如模型真的漏写了必填字段)。
- 跨 Provider:跨 provider 的实机复现工作尚未全部完成。
- 根本修复:插件是一个可插拔的实现参考,根本的修复方案应在宿主侧(持久化前对 tool-call 参数做 schema 校验 + 规范化)。