大家好,我是小木头。如果你一直在用 DeepSeek 做 Agent,应该遇到过这个问题:代码能写、工具能调,但放进去一张报错截图,它就看不见了。业内苦 DeepSeek 没有视觉能力确实已经很久了,所以开源玩家只能自己搭桥。在 Harness 的使用中,比如用到 dsh-multimodal 和 dsh-deepseek-vision,先安装插件,再配置 Qwen-VL、GLM 或者通过 Ollama 运行的本地视觉模型。上传截图后,视觉模型先生成一段描述,再由纯文本的 DeepSeek 来继续处理。这确实能让 Harness 支持图片,但需要额外安装和配置;原图与问题之间也多了一次模型调用和一层信息损失。
8月21号情况终于发生了改变,DeepSeek 发布了 DeepSeek-V4-Flash-Vision-Exp。同一天 Harness 0.1.1 也跟进了,它不是只在内置模型目录里新增一个条目,而是同时加入图片能力声明:聊天上传、read_image 工具、持久化附件,以及 Files API 和 base64 的回退。也就是说从模型选择、工具结果一直到真正发给 DeepSeek API 请求,整条图片链路现在都补齐了。那这个 Vision Exp 会不会为了看图牺牲原来 V4 Flash 的文字能力呢?按照 DeepSeek 官方的说法并没有,它在 Agent 推理和世界知识这些文字能力上与 V4 Flash 相当;但需要视觉理解的多模态 Agent Benchmark,它比纯文本的 Flash 有明显提升,整体接近了 Opus 4.8。
这里有两个限定:第一个是这是 DeepSeek 官方公布的 Benchmark;第二呢模型名称里仍然带着 Exp,也就是 experimental。它适合用来测试截图分析、图表理解、文档阅读和视觉 Agent,但不能把接近 Opus 4.8 理解成所有任务都与 Opus 4.8 等价。当然了,价格也很关键、也很敏感。Vision Exp 没有单独设置一档更贵的视觉价格,而是沿用 V4 Flash 的价格:每张图片最多计入 384 个输入 token。按目前人民币价格,V4 Flash 每百万输入 token 缓存命中是 2 分钱,未命中是 1 元;输出是 2 元。可以换算一下,即使按照未命中的价格计算,一张图片本身的输入成本最多也就只有 0.000384 元左右。
真正更影响账单的,还是较长的对话历史和模型的输出。Files API 本身免费,同一张图片上传一次后,可以重复使用 file ID,这样呢也能减少重复的传输。接下来我们看看 Harness 新版本是怎么支持图片的:先看第一层模型能力的声明,DeepSeek 官方适配器内置了一份建议模型目录,默认有三个模型:V4 Flash、V4 Pro 以及 V4 Flash Vision Exp。这份目录不是使用 API key 从 DeepSeek 的 /models 接口自动拉取,只有最后一个模型明确声明 input modalities 是 text 和 image。这不是装饰字段,上传图片调用 read_image、真正发起请求时 Harness 会检查当前模型是否声明了图片输入。普通的 Flash 和 Pro 仍然按照纯文本模型在处理。
第二层是持久附件,图片不会以一长串 base64 永久保存在会话记录里。Harness 会先校正 EXIF 方向、删除元数据,统一转换成 8-bit sRGB 或 sRGBA,默认把边长限制在 2048 像素以内,同时保留透明通道。会话里保存的是稳定的附件引用,而不是某一家模型专用的请求格式。第三层才是发给模型的请求版本:Vision Exp 默认给每张图片 64 万总像素、1 MiB 的编码预算,缩放比例根据像素的预算做开平方计算。所以一张 2048 乘 1024 的宽图,会缩放到大约 1130 乘 565,而不是直接裁成一个正方形。相同附件使用相同的预算,会得到相同的 variant ID;后面的缓存和文件复用都建立在这么一个确定的结果之上。
发给 DeepSeek 时,Harness 会优先使用 Files API:它先上传刚才生成的请求版本,再在消息里发送对应的 file ID。如果文件解析失败或超时,整个请求会切换成 base64 的 data URL;不会出现一部分使用 file ID、另一部分使用 base64 data URL 这类内联图片的混合状态。远端文件默认保存 7 天,文件过期或失效 Harness 只会重新上传并重试一次。如果图片历史过大,它还会按照固定步长省略最旧的图片,减少请求的前缀反复变化对 KV cache 也更友好。
工具接口也能带图,最直观的场景就是让 Agent 根据一张 UI 截图修改代码。比如把 dashboard-before.png 放进工作区,然后告诉他找出按钮为什么错位并修改代码。Agent 调用 read_image 工具后,工具结果不只返回文件路径,还会把真正的图片块、实际尺寸、坐标缩放比例一起交给模型。模型分析截图后,再回到 CSS 里面去定位。整个过程并不需要我们先用文字来描述图片。
最后我们用官方 CLI 运行一下 Harness,并不需要克隆代码仓库或编译代码,直接执行 npx @deepseek-ai/dsh web。在模型设置里保存好 API key,然后选择 DeepSeek-V4-Flash-Vision-Exp。我先上传一张 UI 截图让它分析视觉层级和交互问题,接着再让 Agent 使用 read_image 读取工作区的图片。最后切回普通的 V4 Flash,Harness 会明确提示这个模型没有声明图片输入:它不会假装看见,也不会直接忽略掉这张图片。
DeepSeek Harness 这次补上的不只是内置目录里的一个模型条目,而是一整套完整的图片处理和请求机制。当然这也得益于 DeepSeek 新发布的 Vision 模型。如果你想继续看 DeepSeek Harness 的源码拆解和实际应用,别忘了一键三连也欢迎大家的关注哦。好了这就是今天咱们分享的内容,我们下期再见吧。