dsh-ask-user-timeout:DeepSeek Harness 问答工具超时防护

前言

在 DeepSeek Harness (DSH) 中,当模型调用 ask_user_question 工具时,循环会一直挂起,直到人类在 Web UI 中回答。该问题仅在浏览器接管 (ui-user-questions) 时渲染。如果标签页关闭、进入后台或连接中断,问题将永远不渲染。此时,会话状态将保持“进行中”且无超时,唯一的退出方式是手动停止,这会显示误导性的 ASK_ABORTED 错误。dsh-ask-user-timeout 插件通过为该工具提供有界生命周期,解决了这个问题。

插件简介

dsh-ask-user-timeout 是一个 Guard 插件,由 yeruizhi 维护。它通过监听 tools/execute 扩展点,为 ask_user_question 工具设定截止时间。当问题未渲染时,工具会返回 ASK_TIMEOUT 错误,而不是无限挂起。该插件不改变工具的模式、输出形状或语义,仅负责终止挂起。

安装

使用官方安装命令添加插件:

dsh plugin --profile web add git+https://github.com/yeruizhi/dsh-ask-user-timeout.git

安装后,重启 dsh web,然后硬刷新浏览器以应用包装器。插件将对安装后创建的会话中的 ask_user_question 调用生效。

配置

插件通过 timeoutMs 配置项控制超时时间,默认值为 600000(10 分钟)。

在 ~/.dsh/profiles/web/cordis.patch.yml 中添加以下配置:

- insert:
    - id: ask-user-timeout
      name: 'dsh-ask-user-timeout'
      config:
        timeoutMs: 300000

工作原理

  1. 监听 tools/execute 扩展点(与官方 timeout-policy guard 相同)。
  2. 仅包装名为 ask_user_question 的工具,其他工具保持不变。
  3. 在分发期间,将 exec.signal 替换为融合截止时间(fused deadline),执行完毕后恢复上游信号。
  4. 当截止时间到达时,将结果替换为 error.code = ASK_TIMEOUT,允许循环继续。
  5. 不改变工具的 schema、输出形状或语义。

适用范围与注意

这是一个 Guard 插件,旨在解决“挂起”问题,而非 Web UI 渲染问题的修复。如果问题未渲染且用户重新打开标签页,插件不会重新通知该问题。更深层的问题在 deepseek-ai/deepseek-harness discussion #2929 中被追踪。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜