dsh-gzip: DeepSeek Harness `/api` 響應 Gzip 壓縮插件

前言

DeepSeek Harness (DSH) Web GUI 在加載會話歷史時,會將最近 50 條消息的全部原始事件(含流式 chunk)下發。響應體積通常在 4 到 13.4MB 之間,且服務端默認不做壓縮。由於瀏覽器的 RPC 請求存在 30 秒硬超時,在帶寬較低或鏈路不佳的遠程訪問場景(異地組網、移動網絡等)下,傳輸容易超時,導致界面顯示「歷史加載失敗」。

dsh-gzip 是爲此場景設計的過渡性插件,通過壓縮 /api 響應,降低帶寬佔用,從而解決超時導致的歷史加載失敗問題。

插件說明

dsh-gzip 是 DeepSeek Harness 的 /api 響應 gzip 壓縮插件。
* 維護方:社區維護(github.com/040822/dsh-gzip)
* 許可證:MIT
* 定位:過渡性 gzip 補丁,用於 DSH 較早版本

核心功能

  • 壓縮 /api 響應:攔截並壓縮 /api 路由的返回數據。
  • 降低帶寬佔用:實測可減少約 91.4% 的體積(例如 13.4MB 壓縮至 1.16MB)。
  • 解決加載失敗:在低速鏈路上降低傳輸時間,避免觸發瀏覽器 30 秒超時中止請求。
  • 實現機制:通過 monkey-patch 替換 /api 路由的 handler,按請求包裝 res 對象。
  • 壓縮規則:處理 Accept-Encoding: gzip 請求,支持 application/json、*+json、text/* 等響應類型。
  • 不處理流:明確不處理 text/event-stream。

安裝與啓用

安裝前請確保已安裝 DeepSeek Harness,且 Node.js 版本爲 ^22.19 或 >=24。

使用官方插件安裝命令:

dsh plugin --profile web add dsh-gzip

安裝完成後,必須重啓 DeepSeek Harness Web 服務才能生效。

驗證方法

重啓服務後,可以通過以下方式確認壓縮是否生效:

  1. 使用 curl 命令:
    curl -s -D - -o /dev/null -X POST http://127.0.0.1:3080/api/session.list \
      -H "Content-Type: application/json" -H "Accept-Encoding: gzip" \
      -d '{"type":"client-request","rpcId":"test","method":"session.list","payload":{}}' \
      | grep -i content-encoding
正常輸出應包含 `content-encoding: gzip`。
  1. 使用瀏覽器 DevTools:
    打開 Network 面板,檢查任意 session.* 請求的 Response Headers,確認包含 content-encoding: gzip。

兼容性與限制

本插件是針對舊版 DSH 的過渡方案,不適用於 DSH 0.1.2-rc.1 及更高版本。

  • 適用 DSH 版本:>=0.1.0-rc.6 <0.1.1-0 || >=0.1.1-rc.0 <0.1.2-rc.1
  • 不適用版本:0.1.2-rc.1 及更高版本(官方已提供 gzip 中間件並遷移了流式 RPC)
  • 依賴環境:Node.js ^22.19 或 >=24

由於 DSH 0.1.2-rc.1+ 已內置 HTTP gzip 中間件並將流式 RPC 遷移至 WebSocket,本插件在這些版本上不兼容且不建議安裝。

結尾

dsh-gzip 通過簡單的 monkey-patch 方案,解決了舊版 DSH 在低帶寬環境下的歷史加載痛點。隨着官方版本的更新,該插件已逐漸退出歷史舞臺,僅作爲特定版本下的臨時補丁方案存在。

倉庫地址:github.com/040822/dsh-gzip

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

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

小夜