拦截参数非法的工具调用,避免会话被服务端拒绝
27.5/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add alchemistwu/dsh-tool-call-guard该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:待复验
是什么
dsh 原生插件 · security
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 62 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🟢 扫描:未发现敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。
扫描于 2026/10/31(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 拦截非法参数工具调用
- 传输层参数校验
- 避免会话被服务端拒绝
DSH 插件:在传输层拦截 JSON 参数非法的工具调用,让一次模型生成出错不至于把会话卡死在严格的 OpenAI 兼容服务商(vLLM)上
README
由 DeepSeek 最新模型翻译生成dsh-tool-call-guard
在 tool call 的 arguments 到达 wire 之前,把其中 JSON 不合法的调用中性化——避免一次模型的畸形输出毁掉整个 session。
dsh plugin add dsh-tool-call-guard
为什么需要它
部分模型偶尔会生成 arguments 不是合法 JSON 的 tool call——最常见的是内部引号未转义:
{"queries": [""The Idiots" 预告片 youtube 官方"]}
严格的 OpenAI 兼容服务端(vLLM 等)对此是双重标准:
- 流式生成路径——宽松。畸形调用流出来、被 harness 持久化进追加式 session 日志,当轮看起来一切正常。
- 历史回放路径——严格。下一个请求回放这条毒化 tool call,服务端校验后拒绝整个请求:
400 {"message": "Assistant tool call function.arguments must be valid JSON.",
"type": "BadRequestError"}
从此该 session 每次请求都会失败,除非手工修复日志。同类问题在各生态都存在(openai-agents-python #2061、vLLM #41122)。
展开完整文档(README 剩余 1 节)
dsh-tool-call-guard
在 tool call 的 arguments 到达 wire 之前,把其中 JSON 不合法的调用中性化——避免一次模型的畸形输出毁掉整个 session。
dsh plugin add dsh-tool-call-guard
为什么需要它
部分模型偶尔会生成 arguments 不是合法 JSON 的 tool call——最常见的是内部引号未转义:
{"queries": [""The Idiots" 预告片 youtube 官方"]}
严格的 OpenAI 兼容服务端(vLLM 等)对此是双重标准:
- 流式生成路径——宽松。畸形调用流出来、被 harness 持久化进追加式 session 日志,当轮看起来一切正常。
- 历史回放路径——严格。下一个请求回放这条毒化 tool call,服务端校验后拒绝整个请求:
400 {"message": "Assistant tool call function.arguments must be valid JSON.",
"type": "BadRequestError"}
从此该 session 每次请求都会失败,除非手工修复日志。同类问题在各生态都存在(openai-agents-python #2061、vLLM #41122)。
它做什么
消毒跑在 adapter 的消息序列化层(各 adapter 把 harness 消息转成 wire 格式的地方),对每个请求应用两条规则:
⚠️ 为什么不在 llm/stream waterfall 上做? 我们最初就挂在那里,实测行不通:harness 在派发前对整个请求(含 messages)deepFreeze,且 cordis waterfall 的 next() 丢弃传给它的参数——dispatch 闭包永远拿到原始 argv;严格模式 ES module 对冻结对象赋值会 throw。这个 waterfall 实际是只读的,文档没有写明(我们用运行时探针验证的)。因此插件在 waterfall 上只做探测器(发现非法 arguments 时打 warn),真正中性化在 adapter 序列化层完成。对每个 arguments 过不了 JSON.parse 的 assistant tool-call 块:
1. 调用变成一条诚实的文本记录(仅 wire 层)——模型能看到自己当时发出的原文,可以重新发起正确的调用: [A tool call to 'web_search' was removed from history because its arguments were malformed JSON. Original arguments as emitted: {"queries": [""The Idiots" …]}]
2. 配对的工具结果改写为普通用户消息——结果内容保留,且会话保持协议平衡(不留悬挂 tool_calls,也不留孤儿 role:"tool"——这两者在严格服务端各自都是 400): [Tool Result: web_search] 10 results about The Idiots
孤儿结果转用户消息的写法沿用上游 serializer 讨论(deepseek-harness #4668)。
特性
- 干净历史零开销——每个 tool-call 块一次 JSON.parse;无问题时不碰任何对象。
- 尊重追加式日志——从不改写持久化 session 日志,中性化只在每次请求的 wire 层动态生效。
- Provider 无关——挂在 llm/stream,覆盖所有适配器。
- 失败放行——guard 自身出错时原样透传请求。
- 零配置——装上重启即生效。
安装
dsh plugin --profile web add dsh-tool-call-guard
或 desktop:
dsh plugin --profile desktop add dsh-tool-call-guard
或从 GitHub 安装:dsh plugin add github:alchemistwu/dsh-tool-call-guard。
包内声明了 dsh.bundle patch,安装即自动注册。重启 dsh web / DSH Desktop 后开新 session 生效。
生产实测
首发场景:vLLM 0.27(--enable-auto-tool-choice)部署的 zai-org/GLM-5.3-Flash,一次 web_search 调用里电影名引号未转义——流式正常、被持久化、之后该 session 每轮 400。装上本插件后 session 复活:毒条目在每次请求中被改写为诚实记录,模型在上下文里能看到自己当时的错误。
测试
npm test
九个用例覆盖真实生产毒数据、好坏调用混合、协议平衡不变量(wire 上不出现非法 tool_calls、不出现孤儿 role:"tool")、退化输入、每请求状态重置。
许可
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
alchemistwu/dsh-tool-call-guard
拦截参数非法的工具调用,避免会话被服务端拒绝
相关插件 · 安全 / 权限
智能体逆向工程morluto/rea
用智能体逆向工程任何东西,从应用行为到原生二进制。
★ 415,267已汉化DSH
73.3
智能体集群框架ruvnet/ruflo
面向 Claude Code 与 Codex 的智能体元基座meta-harness。
★ 80,414已汉化MCP
71.9
WorkBuddy 模型接入corrinehu/dsh-workbuddy-connect
2026 年 10 月 20 日起,WorkBuddy…
★ 1,604已汉化DSH
71.7
破甲一键通z91772524-ai/pojia-next
十五个 AI…
★ 967已汉化DSH
71.6
AI 代理虚拟终端strukto-ai/mirage
Mirage 是给 AI 智能体用的虚拟终端:一层 shell,统管数据、命令行和运行时。Unix…
★ 3,756已汉化DSH
70.8
Agent 操作层agentic-os-org/ANOLISA
ANOLISA(Agentic Nexus Operating Layer & Interface System Architecture)|智能体操作系统,带运行时、安全、可观测性,以及 Tokenless 响应压缩,降低 token 用量与成本。
★ 649已汉化DSH
70.7