dsh-vision-3090-fix:限制單次請求圖片數量的本地代理插件

前言

DeepSeek Harness (DSH) 插件生態允許開發者通過插件擴展功能。在配置本地 vLLM 模型(例如 Qwen 3.8 27B)作爲視覺模型後端時,常會遇到一個問題:vLLM 默認參數 --limit-mm-per-prompt image=1 限制單次請求只能包含 1 張圖片。然而,DSH 內置的 LLM 適配器僅按字節大小限制圖片,不按數量限制。這導致當對話中包含多輪圖片,或者工具調用返回多張圖片時,後端會直接返回 400 錯誤。

dsh-vision-3090-fix 插件正是爲了解決這個問題而設計。它作爲本地 HTTP 反向代理運行,在請求轉發給後端之前,將多餘的圖片替換爲文本佔位符,從而繞過後端的數量限制。

插件介紹

這是一個 DeepSeek Harness 插件,用於將自託管 vLLM 後端的單次請求圖片數量上限設爲 1。它不修改後端邏輯,而是通過代理層攔截請求並重寫內容。

核心功能

  • 限制圖片數量:強制將每條請求中的圖片數量限制在指定上限(默認爲 1)。
  • 本地反向代理:以普通 Cordis 插件效果啓動,在 DSH 進程內部運行。
  • 替換佔位符:將超出上限的舊圖片替換爲穩定的文本佔位符。
  • 支持流式響應:保持後端響應的流式傳輸特性,字節級轉發。
  • 跨消息處理:支持處理 messages 數組以及工具調用(tool calls)中的 image_url 內容部分。

安裝與啓用

使用以下命令將插件安裝到指定的 DSH 配置文件(profile)中:

dsh plugin --profile web add /path/to/dsh-vision-3090-fix

安裝後,需要在 cordis.patch.yml 中配置代理的基本參數,並修改 provider 的 baseURL 以指向該代理。

  1. 在 cordis.patch.yml 中配置 upstreamOrigin、listenHost、listenPort、maxImagesPerRequest 和 models:
    - id: vision-3090-fix
      name: dsh-vision-3090-fix
      config:
        upstreamOrigin: http://10.204.100.243:1234   # 真實後端地址,不含路徑
        listenHost: 127.0.0.1
        listenPort: 8931
        maxImagesPerRequest: 1                        # 匹配你的服務器 --limit-mm-per-prompt 參數
        models: [qwen3.8-27b]                         # 可選,不填則對所有模型生效
  1. 修改 settings.yaml,將 provider 的 baseURL 指向代理地址:
    llm-pi-ai:
      providers:
        pure:
          displayName: pure
          apiKeyEnv: PURE_API_KEY
          api: openai-completions
          baseURL: http://127.0.0.1:8931/v1   # 指向本地代理
          models:
            - id: qwen3.8-27b

適用場景與注意

  • 適用場景:部署了 vLLM 且設置了 --limit-mm-per-prompt image=1 的自託管視覺模型環境。
  • 注意事項:
    • 插件在轉發前會完全緩衝請求體(爲了解析和重寫 JSON),因此不適合處理大文件上傳。
    • 沒有重試邏輯或請求排隊機制,它是一個輕量級的透傳代理。
    • 假設後端使用 OpenAI 的 image_url 線路格式,如果後端格式不同,插件將無法識別。
    • 插件不會因爲超時崩潰代理,超時會記錄日誌並結束當前請求。
    • 安裝前請檢查源碼與許可證(MIT)。

總結

dsh-vision-3090-fix 提供了一種低成本的方式,在不修改 vLLM 服務端配置的情況下,解決 DSH 與受限制後端通信時的圖片數量衝突問題。

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

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

小夜