DHS使用opencode-go的deepseek-v4-flash-vision-exp时提示:当前模型不支持图片,请切换支持图片的模型

DeepSeek Harness 报「模型不支持图片」?

使用背景

我用 DeepSeek Harness (npx @deepseek-ai/dsh)搭了一套本地开发环境,模型服务并没有走 DSH 官方自带的 DeepSeek API ,而是接入了 opencode 的 OpenAI 兼容网关 (https://opencode.ai/zen/go/v1/)。

DSH 官方默认的 provider 是 deepseek-official(插件 dsh-llm-deepseek,端点 https://api.deepseek.com)。而我这边是在通用 pi-ai 适配器(插件 dsh-llm-pi-ai)下自定义配置了 provider :把 deepseek-v4-flash-vision-exp 挂在自定义 provider(如 godsvision,API key 走 GODSVISION_API_KEY / opencode 网关鉴权)下。

换句话说:官方默认是 deepseek-official;我这套是「自定义 provider + pi-ai 通用适配器」的接入方式。 这是后文踩坑能被复现的前提------官方那条路线上模型能力是内置好的,根本不会遇到下面这个问题。

现象

在 DSH 的 Web 界面(http://127.0.0.1:3080)发送带图片的消息,返回:

当前模型不支持图片,请切换支持图片的模型

换成文本消息则一切正常。模型名里明明带着 vision,却不让传图。

排查过程

前端那句提示是本地化文案 ,背后对应后台错误码 MODEL_DOES_NOT_SUPPORT_IMAGES:

js 复制代码
// dsh-client-ui-conversation
"image.modelUnsupported": "当前模型不支持图片,请切换支持图片的模型"

顺着错误码往下追,网关 dsh-host-apiproxy 在真正调用模型之前就做了一次能力校验:

js 复制代码
const hasImage = content.some((part) => part.type === "image");
...
if (modelInfo.inputModalities !== void 0 && !modelInfo.inputModalities.includes("image"))
    return err(request, { ... reason: "MODEL_DOES_NOT_SUPPORT_IMAGES" });

也就是说:只要当前所选模型的 inputModalities 里没有 "image",任何带图的消息都会在网关层被直接拒绝。 而这个 inputModalities 来自所选 provider 底下的那条模型配置。

根因

我走的是通用 pi-ai 适配器(dsh-llm-pi-ai,openai-completions 协议)。这个适配器有一个关键默认行为:

未声明 input 的模型,一律当作「仅文本」处理 (DEFAULT_INPUT = ["text"])。

而我在 DSH 配置文件 C:\Users\Administrator\.dsh\settings.yaml 里,给 deepseek-v4-flash-vision-exp 只填了 id 和 name,没写 input:

yaml 复制代码
llm-pi-ai:
  providers:
    godsvision:
      api: openai-completions
      baseURL: https://opencode.ai/zen/go/v1/
      models:
        - id: deepseek-v4-flash-vision-exp
          name: deepseek-v4-flash-vision-exp

于是适配器把它的能力判定为 inputModalities = ["text"] → 网关判定「不支持图片」→ 报错。

顺带确认:即便绕过网关,适配器里 streamWithSnapshot 还有第二道检查:

js 复制代码
if (containsImage && !model.input.includes("image"))
    throw new LlmError(... "does not support image input", "UNSUPPORTED_CONTENT");

所以这种配置下图片请求必然被拒,两道闸都过不去。

补充对比:官方 deepseek-official 的模型目录已经 把 deepseek-v4-flash-vision-exp 声明成 inputModalities: ["text", "image"]。所以你只要切回官方 provider,就不会报这个错。问题只存在于「自定义 provider + pi-ai 通用适配器」这一条接入路径上。

解决方案

给该模型条目补上图片输入声明即可:

yaml 复制代码
llm-pi-ai:
  providers:
    godsvision:
      api: openai-completions
      baseURL: https://opencode.ai/zen/go/v1/
      models:
        - id: deepseek-v4-flash-vision-exp
          name: deepseek-v4-flash-vision-exp
          input:
            - text
            - image

改完后,重启 Web 进程 / 重新加载设置让配置生效。

两点提醒

  1. 这只是「放行」,不是「保证能看」 。input: [text, image] 只是让图片得以进入请求 ;真正能否处理图片,取决于你这条上游链路(opencode.ai/zen/go/v1 的这个 vision-exp 模型)是否真的支持多模态。配置声明 ≠ 上游能力。
  2. 模型本身确有视觉能力 。我实测通过 DSH 的 read_image 工具能正常读取并看懂图片,进一步证明这完全是配置缺声明导致的拦截,和模型能力无关。

小结

遇到「模型不支持图片」时,先别急着怀疑模型。大多数情况是 DSH 配置里没有向网关声明该模型支持图片输入 ------只要在 settings.yaml 的模型条目里加上 input: [text, image] 并重启即可解决。

尤其当你用「通用 pi-ai 适配器 + 自定义 OpenAI 兼容 provider」接入第三方网关时,模型能力必须自己显式声明 ;DSH 官方 provider 则把能力内置好了。模型名里的 vision 只是名字,harness 只认配置里的声明。

相关推荐
章鱼哥19715 小时前
我给 DeepSeek 的编程智能体写了三个插件:余额胶囊、任务面板、番茄钟
ai编程·deepseek
AC赳赳老秦20 小时前
采集行为合规自检:OpenClaw 自动校验 robots 协议与采集频率,规避违规采集风险
java·开发语言·c++·python·php·deepseek·openclaw
Am-Chestnuts1 天前
DeepSeek 回答怎么落成可编辑文档?DS随心转 三种导出路径对比怎么选
word导出·文档转换·办公效率·deepseek
AC赳赳老秦1 天前
OpenClaw 数据引用规范自动生成:为公开数据构建可信来源标注与标准引用体系
大数据·开发语言·汇编·数据库·人工智能·deepseek·openclaw
云卷云舒___________1 天前
Qwen 4首测泄露!DeepSeek V4 mini展示名为flash?蚂蚁Ling-3.1-flash同步炸场 | 10月1日 AI日报
人工智能·开源模型·deepseek·ai日报·qwen4·ling31flash·蚂蚁百灵
潘锦1 天前
从 Pi 到 DSH:Agent Harness 如何从「可扩展」走向「自生长」
deepseek
潘锦1 天前
DeepSeek Harness 的 Cordis 插件架构
ai编程·deepseek
Am-Chestnuts1 天前
DeepSeek 复制到 WPS 文字乱码怎么办?DS随心转 导出兼容文档去乱码
乱码·wps·deepseek·wps文字·ds随心转·文档导出
skywalk81632 天前
给DeepSeek harness发布R107任务撰写工作:还有一些其它遗留问题,你也一并放到这一轮任务里!你写并行任务文档,我来分发!
人工智能·调试·deepseek
JaydenAI2 天前
[DeepSeek Harness深度拆解-20]DSH提供的基于文件的配置系统
ai·agent·plugin·deepseek·harness·cordis