DeepSeek 最近的视觉模型 deepseek-v4-flash-vision-exp,刚好手头想让它根据图片做个网页出来,谁知道在 OpenCode Desktop 中无论怎么样问,这个模型都返回不支持图片识别,看起来似乎与官方宣称的不一致呀~
换用了官方的 API KEY 之后,在 OpenCode 中分分钟认出来了。那么问题只剩下自定义网关和 OpenCode 两者的问题了。
用自定义路由抄了一下 DeepSeek 官方的请求样例:
import base64
from openai import OpenAI
client = OpenAI(api_key="<自定义网关的KEY>", base_url="<自定义网关的地址>")
with open(".\\src\\test\\favicon.png", "rb") as f:
b64 = base64.b64encode(f.read()).decode("utf-8")
response = client.chat.completions.create(
model="deepseek-v4-flash-vision-exp",
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "这张图片里有什么?"},
{
"type": "image_url",
"image_url": {"url": f"data:image/jpeg;base64,{b64}"},
},
],
}
],
)
print(response.choices[0].message.content)
似乎它能看到图片:

那么最后只剩下 OpenCode 的问题了,查了一下发现是需要显式声明其多模态能力,防止 OpenCode 在发送请求前强行剔除图片附件,修改下 OpenCode 的配置(顺便把推理深度也弄好了,供以后的我参考):
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"omniroute": {
"npm": "@ai-sdk/openai-compatible",
"name": "OmniRoute",
"options": {
"baseURL": "<自定义网关地址>"
},
"models": {
"ds/deepseek-v4-flash": {
"name": "deepseek-v4-flash",
"limit": {
"context": 1000000,
"output": 384000
},
"reasoning": true, // 声明为推理模型
"variants": { "none": { "reasoningEffort": "none" } }, // 添加一个 none 禁用思考模式
"interleaved": "reasoning_content" // 自定义网关推理内容字段名
},
"ds/deepseek-v4-flash-vision-exp": {
"name": "deepseek-v4-flash-vision-exp",
"limit": {
"context": 1000000,
"output": 384000
},
"reasoning": true,
"variants": { "none": { "reasoningEffort": "none" } },
"interleaved": "reasoning_content",
"supportsAttachments": true, // 允许向它发送图片附件(图像处理开关)
"modalities": {
"input": ["text", "image"],
"output": ["text"]
}
},
"ds/deepseek-v4-pro": {
"name": "deepseek-v4-pro",
"limit": {
"context": 1000000,
"output": 384000
},
"reasoning": true,
"variants": { "none": { "reasoningEffort": "none" } },
"interleaved": "reasoning_content"
}
}
}
}
}
上下文长度可以参考自定义API中 /v1/models 查询
最后重启下 OpenCode Desktop 刷新配置再试就正常了!

Comments NOTHING