前言¶
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 以指向该代理。
- 在
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] # 可选,不填则对所有模型生效
- 修改
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 与受限制后端通信时的图片数量冲突问题。