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 与受限制后端通信时的图片数量冲突问题。

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

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

小夜