前言¶
在 DeepSeek Harness (DSH) 的调试与测试流程中,模型生成的工具调用参数有时会包含无效的 JSON(例如未转义的内部引号)。这类问题在流式传输路径下可能被宽容处理,但在使用 vLLM 等严格服务器进行历史记录回放时,会触发 400 错误,导致整个会话被“破坏”。本文介绍 dsh-tool-call-guard 插件,用于在传输前中和这些无效的工具调用,防止会话损坏。
插件简介¶
dsh-tool-call-guard 是 DSH 的一个管理安全类插件,由 alchemistwu 维护。它拦截 DSH 的 llm/stream 水瀑布,对参数无法通过 JSON.parse 验证的工具调用进行中和处理,确保会话的连续性。
- 插件名: dsh-tool-call-guard
- 维护者: alchemistwu
- 分类: admin-security
- 许可证: MIT
核心功能¶
- 拦截与中和: 拦截 DSH 的
llm/stream水瀑布,对无效 JSON 参数的工具调用进行中和。 - 纯文本记录: 将被中和的工具调用记录为纯文本,保留原始内容,以便模型在上下文中重新发出修正后的调用。
- 协议平衡: 将匹配的工具结果重写为纯用户消息,避免出现孤立的
tool_calls或role:"tool"条目,防止因协议不平衡导致的后续请求失败。 - 零开销: 对于干净的历史记录,仅增加一次
JSON.parse操作,消息数组对象保持不变。 - 追加-仅日志: 尊重 DSH 的追加-仅日志机制,不重写持久化的会话日志,仅在传输层进行中和。
- 提供商无关: 基于
llm/stream接口,覆盖所有适配器(DeepSeek、社区适配器等)。 - Fail-open: 如果 Guard 本身出错,原始请求会通过,不影响正常流程。
- 零配置: 安装即用。
安装与启用¶
使用官方安装命令添加插件:
dsh plugin add dsh-tool-call-guard
安装完成后,必须重启 DSH 主机(dsh web 或 DSH Desktop)才能使插件生效。
典型场景¶
当模型发出类似以下格式的无效 JSON 参数时:
{"queries": [""The Idiots" trailer youtube official"]}
插件会执行以下操作:
1. 拦截该工具调用块。
2. 将其转换为文本记录,提示模型其参数无效。
3. 将对应的工具结果转换为用户消息,保持对话协议平衡。
这使得会话能够继续运行,避免了因参数无效导致的 400 错误阻断后续请求。
注意事项¶
- 重启依赖: 插件安装后必须重启 DSH 主机才能生效。
- Fail-open 行为: 插件设计为 Fail-open,如果 Guard 内部逻辑出错,原始请求会原样通过,不会阻断请求。
- 许可证: 代码遵循 MIT 许可证。
总结¶
dsh-tool-call-guard 为 DSH 提供了在传输层修复无效工具调用参数的能力,特别适用于需要与严格 OpenAI 兼容服务器(如 vLLM)交互的场景。它以零配置和 Fail-open 的特性,在不改变现有日志结构的前提下,增加了会话的鲁棒性。