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 中被追蹤。

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

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

小夜