本文由 莫潇羽@无忆研习社(www.wuyi.wiki)撰写,转载请注明出处。
快速摘要
这次 DeepSeek 一声不响地把多模态那块拼图补上了。2026 年 8 月 21 日下午,DeepSeek-V4-Flash-Vision-Exp 悄悄上线 API 平台,纯文本能力和 V4-Flash 正式版持平,视觉 Agent 能力已经能贴着 Claude Opus-4.8 打,价格却和 V4-Flash 一样,甚至同步开放了免费的 Files API 用来复用图片。单张图最多消耗 384 个 token,2000×2000 和 5000×5000 缩放之后消耗其实一样多——这条几乎重写了很多人心里"大图=烧钱"的直觉。
这篇文章我不打算只搬跑分表。我会把这次更新拆成七件事讲清楚:模型定位、跑分怎么读才不被数字忽悠、图片如何被 token 化、三种调用格式与传图方式各自适合什么场景、和自家 DeepSeek Harness 的联动、能落地的应用场景,以及国内发布时绕不开的 AI 生成内容标识合规。想看完整拆解,往下翻。
一、DeepSeek 多模态终于登场:这块拼图为什么等了这么久
DeepSeek 这家公司做事的节奏很特别。它不像其它厂商喜欢在发布会上敲锣打鼓,而是喜欢在半夜或者傍晚把 API 文档悄悄改一行,等你早上起床刷 X、刷知乎才发现——梁子那边又更新了。这次的多模态视觉模型也是走的同一套路:没有预热、没有海报,8 月 21 日下午一条推文,DeepSeek-V4-Flash-Vision-Exp 就直接挂上了 API 平台。
我(莫潇羽@无忆研习社)之所以把这次更新单独写一篇长稿,是因为多模态这个词在 DeepSeek 的整条产品线里一直是个明显的洞。V3 时代到 V4 时代,代码、推理、Agent 能力一波一波往上爬,唯独视觉理解这一块,官方 API 一直没有公开产品。开发者只能拼命用 OCR 识别成文字,再把文字塞进 DeepSeek,再等模型吐结果——中间人肉搭桥搭得心累。
现在这道桥终于自己长起来了。
1.1 什么叫"多模态视觉理解模型"
先给不熟悉这个词的朋友补一下白话解释。
多模态(Multimodal)字面意思是"多种感官通道"。在大模型语境下,它指模型的输入不再限于文字,而是可以同时接收文字、图片、音频、视频等多种数据形式。视觉理解(Vision Understanding)则更聚焦一点,只覆盖图像这一种模态的输入。它比单纯的"图片分类"要重得多——模型不仅要认出"这是一只猫",还要能读图片里的字、分析图表、看懂 UI 布局、理解截图里的错误提示,甚至基于图片做多步推理。
举个例子。如果你把一张运行时报错的 IDE 截图丢给一个纯文本模型,它两眼一抹黑。你必须先把报错文字复制出来、再粘贴给模型。而多模态视觉理解模型可以直接看这张截图,告诉你哪一行是关键错误、可能是什么原因、建议怎么排查。这个"直接看图"的能力,是把 Agent 从"处理文字世界"推进到"处理屏幕世界"的关键一步。
1.2 为什么这次是"补上一块拼图"
DeepSeek 过去一年半的路径其实已经很清晰了。梁子(网友对创始人的昵称,本文一律使用这个称呼来指代 DeepSeek 团队的整体风格,避免暴露个人 IP)把资源基本都压在两件事上:一是把文本大模型的推理与代码能力做到极致,二是把 Agent 工程化的底子铺好。前者对应 V3、R1、V4 这些主线模型;后者对应今年 8 月 13 日随 V4 Pro 一起开源的 DeepSeek Harness——一个专门用来跑 Agent 任务的运行框架。
在这两条线上,视觉是一个明显的短板。因为如果你想让 Agent 帮你写前端、帮你操作电脑、帮你分析业务报表,"看屏幕"是一项躲不开的能力。之前的 V4-Flash 和 V4 Pro 都只会读文字,Agent 一遇到"帮我根据这张设计稿生成 React 页面"这样的任务,只能干瞪眼。
DeepSeek-V4-Flash-Vision-Exp 的上线,从这个视角看,其实不是一次孤立的模型发布,而是把 Agent 体系里最后一块基础能力补齐。这也是为什么梁子选了 Flash 版本来打头阵:Flash 是承担高频调用的性价比款,先让它长眼睛,等原型稳了再往 Pro 上迁,节奏最合理。
1.3 "实验性"三个字要认真读
官方给这次发布挂了一个显眼的后缀:Exp,全称 experimental。API 更新日志里也白纸黑字写着"这是一个实验性质的模型"。
在国产模型里,把 Exp 后缀挂出来的其实不多。它意味着几件事:
- 可能会有 breaking change:接口、参数、行为都可能在下一次迭代时被改动,不建议直接上生产。
- 没有单独技术报告:官方目前没有放开源权重,也没有像 V3、R1 那样发独立论文,能推理的架构细节非常有限。
- 官方也在收集反馈:这个阶段更像一次"公开测试",梁子在等社区把不同场景的 Case 打出来,再决定往正式版怎么合流。
我的建议是:可以用它做原型、做内部工具、做非核心场景的验证,但如果你是 To B 的严肃业务,暂时先别把它写进合同 SLA。 这话我自己也一直提醒团队。
1.4 我自己拿到消息之后的第一反应
老实说,看到那条推文我脑子里冒出的第一句话不是"跑分怎么样",而是"价格怎么样"。
因为多模态模型历来是烧钱大户。图片按 token 计费的模式,一张高分辨率图动辄几千 token,多轮对话很快就把成本顶起来。之前很多国外的多模态 API,一张图单价折合人民币能到几分钱,一个多模态 Agent 跑一小时几百上千不是稀奇事。
结果我翻到定价页——图片计费价格和 V4-Flash 保持一致,单张图最多 384 tokens。384 是什么概念?相当于 200 多个汉字的成本。就算按高峰时段的输入价来算,单张图上限不到一分二厘钱。
梁子这次又把价格战往深水区带了一步。
二、V4-Flash-Vision-Exp 到底是个什么模型:产品维度拆解
聊完背景,我们进产品本身。要判断这个模型能不能用、值不值得接,得先搞清楚它的能力边界、输入输出规格、以及和现有 V4 家族的关系。
2.1 一句话定位
DeepSeek-V4-Flash-Vision-Exp 是在 V4-Flash 正式版基础上,为其增加了原生图像理解能力的实验版本。两者共用同一套模型结构与参数规模,纯文本任务表现基本对齐。区别只有一个——这个新版本能"看见"图片,而 V4-Flash 只能"读到"文字。
也就是说,如果你把老应用里的模型名 deepseek-v4-flash 换成 deepseek-v4-flash-vision-exp,文字任务的表现不会掉,同时你多得了一个"图片输入"的能力槽。这是我自己实测下来最直观的感受。
2.2 支持的输入形式
先看图片格式,官方目前放开了 4 种主流格式:
|
格式 |
后缀 |
常见来源 |
|
JPEG |
.jpg / .jpeg |
手机拍照、网页图、大多数壁纸 |
|
PNG |
.png |
截图、UI 稿、透明背景素材 |
|
GIF |
.gif |
动图、表情包(会按第一帧或整体处理) |
|
WebP |
.webp |
现代网页图、Chrome 保存的图 |
之前有人问我"BMP、TIFF 能不能传"。答案是暂时不行,先在本地转成上面这四种再说。图片可以以 Base64 编码内嵌、外部 URL 引用、或者通过 Files API 上传后拿 file_id 引用 三种方式送进去。这三种传图方式我会在第五章详细拆开讲。
当前版本只支持图片,不支持视频与音频。 有些人把 GIF 当"迷你视频"来传,本质上模型还是按图像处理的,理解不到时间维度。如果业务真的需要视频理解,还得等下一版。
2.3 上下文窗口与输出上限
这是我最在意的两个数字。
- 上下文窗口:官方标注最高 1,000,000 tokens(1M)。
- 最大输出:384,000 tokens(384K)。
1M 上下文这个数字放在国内属于第一梯队水平。它意味着你可以塞一整个仓库的代码、几百页的 PDF 摘要、或者一大批图片文本混合的资料进去,让模型一次性理解。图片本身最多 384 token,所以理论上一次请求可以塞非常多张图——只不过官方另外给了一个"每次请求最多 600 张图片"的上限,以及总请求体大小的限制,具体规则我在第四章会一起讲。
输出 384K 更是夸张,写一部中长篇小说都够了。当然实际使用中你不会真的让它一次吐这么多,但这个天花板抬高意味着长篇报告、长代码文件、大批量数据填充都不用再拆分请求。
2.4 Agent 相关的关键能力
除了看图和长上下文,这个模型继承了 V4 家族所有的 Agent 相关能力:
- Tool Calls:可以调用外部工具,配合插件生态完成多步骤任务。
- JSON Output:输出格式可以强制约束成 JSON,方便下游代码解析。
- 思考模式:可以显式打开推理链条,用更多的 token 换更高的准确率。
- 上下文缓存:命中缓存的输入 token 打大折,长会话成本可控。
- 原生 OpenAI Responses API、Anthropic Messages API 兼容:老代码基本不用改。
这些能力叠在一起,你就知道它不是拿来做"给图片写个描述"的传统 VLM,而是设计给 Agent 场景用的。梁子的思路很明确——先让模型能被 Agent 生态用起来,再谈别的。
2.5 和 V4-Flash 正式版的关系
一张表让你一眼看清:
|
维度 |
DeepSeek-V4-Flash(正式版) |
DeepSeek-V4-Flash-Vision-Exp |
|
上线时间 |
更早,已长期稳定运行 |
2026 年 8 月 21 日 |
|
版本状态 |
正式版(GA) |
实验版(Experimental) |
|
输入形式 |
仅文本 |
文本 + 图片 |
|
上下文窗口 |
1M |
1M |
|
最大输出 |
384K |
384K |
|
纯文本任务表现 |
基线 |
与基线持平 |
|
视觉理解 |
无 |
具备 |
|
定价 |
现有 V4-Flash 定价 |
与 V4-Flash 完全一致 |
|
是否开源权重 |
部分开源 |
暂未开源 |
从这张表能看出,Vision-Exp 走的是"平替升级"路线——你没有理由再单独接文本版了,直接上 Vision 版就是免费送你一个能看图的模型。唯一例外的场景是你对稳定性要求极高、非常怕实验版下线。这种情况老实继续用 V4-Flash 正式版就好,等 Vision 转正再迁移。
2.6 一个不太起眼但很重要的信号
我个人还留意到一个细节:这次官方在同一版更新里,一并把 Files API 免费开放了。Files API 允许你把一张图片上传一次、拿到一个 file_id,然后在多次请求里通过这个 id 反复引用,不用每次都重新传图片二进制。
单看这个 API 好像只是省点带宽,但如果你写过多模态 Agent 就会知道——一个长会话里,同一张背景图、同一张需求截图、同一张风格参考图,被反复引用是很常见的。以前每轮请求都要把 base64 传一次,带宽和请求体大小都会爆。Files API 一开,这个体验一下子就顺了。
梁子这次是模型 + 基础设施一起动,不是单纯挂个新模型完事。这也是我觉得它比看起来更重要的原因之一。
三、跑分怎么读:接近 Opus-4.8 的真相与水分
聊多模态模型不看跑分等于耍流氓,但只看跑分数字又非常容易被忽悠。这一章我把这次官方公布的所有基准分数摆一起,帮你看清楚哪些数字是硬实力、哪些数字带条件、哪些是"数字上好看,实际未必好用"。
3.1 官方公开的完整跑分表
先把数字摊在桌上。这是我根据官方 API 更新日志和 DataLearner 汇总的结果:
|
Benchmark |
考察方向 |
V4-Flash-Vision-Exp |
V4-Flash(纯文本) |
Opus-4.8 |
|
Terminal Bench 2.1 |
终端环境多步任务 |
83.9 |
82.7 |
85.0 |
|
DeepSWE |
真实软件工程长任务 |
59.3 |
54.4 |
58.0 |
|
NL2Repo |
自然语言到仓库级代码 |
57.7 |
— |
69.7 |
|
DSBench-Hard |
数据科学困难任务 |
63.6 |
— |
71.7 |
|
Toolathlon-Verified |
工具调用综合 |
75.9 |
— |
76.2 |
|
AutomationBench (Public) |
自动化任务 |
25.7 |
25.1 |
27.2 |
|
ApexBench (Pass@1) |
多模态综合 Agent |
36.5 |
26.2 |
39.4 |
|
Agents' Last Exam |
多模态 Agent 高难题 |
27.3 |
25.2 |
25.7 |
|
Chartography (p0.95) |
专业图表理解 |
64.3 |
— |
65.0 |
|
ZeroBench (Pass@5) |
硬核视觉理解 |
35.0 |
— |
34.0 |
注:Code Agent 类文本任务使用 DeepSeek Harness 极简模式测试,参数为 max effort、top-p=0.95、temperature=1.0;在 ApexBench 与 Agents' Last Exam 的对比中,纯文本的 V4-Flash 会直接忽略题目里的多模态元素,数字仅供理解模型迭代幅度用。
这张表信息量很大。我一条一条给你捋。
3.2 与 Opus-4.8 相比,赢了三项、平了三项、输了四项
按官方口径,Vision-Exp 一共在 10 个基准里和 Opus-4.8 掰手腕。它在 DeepSWE、Agents' Last Exam、ZeroBench 三项上分数更高,虽然幅度只有 1 到 2 分,但对于一个和 Opus-4.8 完全不同代际的实验版模型来说,能拿下三城已经很硬。
Toolathlon-Verified(75.9 vs 76.2)、Chartography(64.3 vs 65.0)、Terminal Bench 2.1(83.9 vs 85.0)三项,差距都在 1 分以内,可以视为"打平"。
真正被拉开的是 NL2Repo(57.7 vs 69.7,差 12 分)和 DSBench-Hard(63.6 vs 71.7,差 8 分)这两项,前者考察"从需求描述生成一个完整代码仓库"的能力,后者是数据科学里的硬题。这两项差距一定程度反映了 Flash 尺寸模型在需要长期规划、多步复杂推理的任务上,仍然被顶尖旗舰甩开一小段身位——这一点开发者接入时要有心理准备,别指望用 Flash 尺寸的模型去干 Pro 尺寸的活。
3.3 视觉能力的跃升到底有多大
这是这次发布最想秀肌肉的地方。看这张收窄表:
ApexBench (Pass@1)
V4-Flash(纯文本) 26.2 分
V4-Flash-Vision-Exp 36.5 分 ← 相比纯文本版跃升 10.3 分
Opus-4.8 39.4 分 ← 仍领先,但差距被压缩到 2.9 分
Agents' Last Exam
V4-Flash(纯文本) 25.2 分
V4-Flash-Vision-Exp 27.3 分 ← 反超 Opus-4.8 的 25.7 分
ZeroBench (Pass@5)
V4-Flash(纯文本) 未公布
V4-Flash-Vision-Exp 35.0 分 ← 高出 Opus-4.8 的 34.0 分 1 分
看到这里你可能会疑惑:如果 V4-Flash 是纯文本模型,它是怎么在多模态题目上拿到 26 分的?
官方在脚注里说得很直白——"在 ApexBench 和 Agents' Last Exam 的评估中,纯文本模型 V4-Flash 会忽略题目中的多模态元素"。换句话说,那 26 分是 V4-Flash 硬着头皮闭着眼答文字线索得到的分,Vision-Exp 睁开眼加了图之后,直接把分数抬到了 36。这个 10 分的跃升,真正反映的就是"看见"这件事本身的价值。
所以官方那句"接近 Opus-4.8",主要指的其实是多模态相关的四个基准(ApexBench、Chartography、Agents' Last Exam、ZeroBench)。剩下六个偏文本能力的基准里,Vision-Exp 和 Opus-4.8 还是有明显差距。看跑分的时候一定要分场景看,别一句"接近 Opus"就把它捧成 Opus 平替——这个陷阱新手最容易踩。
3.4 极简模式 + max 档位是什么意思
官方脚注里还有一段小字:Code Agent 类文本任务用的是 DeepSeek Harness 极简模式 作为 Agent 框架,思考档位设成 max,采样参数固定为 temperature=1.0、top_p=0.95。
这几个词第一次接触会有点懵,我用白话拆一遍。
DeepSeek Harness 是 DeepSeek 自研的 Agent 运行框架,8 月 13 日随 V4 Pro 一起开源。它相当于给模型套了一层"外骨骼",让模型能按标准协议调用工具、维护对话状态、跑长任务。Harness 内置了标准、极简、代码、创造四种预设模式。
极简模式(Minimal)只给模型两个工具、写死提示词,规则最简单、变量最少。梁子选它跑基准是有讲究的——工具变量压到最小,跑出来的分数更能反映模型自身能力,而不是"工具设计得好不好"。但这也意味着你在自己项目里用 LangChain、AutoGen、CrewAI 这些框架时,跑出来的实际效果可能和官方分数不完全对齐。官方原话就是"其他框架下结果可能略有不同",属实是难得的透明。
max 档位是把思考强度拉到最大,允许模型消耗更多推理 token 去尝试。理论上分数会更好,但成本会更高、响应会更慢。生产环境里你不一定用得起 max,要根据业务对成本和延迟的容忍度自己权衡。
temperature=1.0 和 top_p=0.95 是常见的采样参数,表示"给模型更多随机性、允许它探索多种可能答案"。跑分场景多次采样求最好,效果不错;线上场景如果你希望稳定输出,通常会把 temperature 调低到 0.2 到 0.7 之间。
3.5 各个 benchmark 一句话简介
新手看基准名字容易头晕,我把这次涉及的几个陌生名字也一并解释一下:
- Terminal Bench 2.1:让模型在终端环境里完成多步实操任务,考察它读懂命令行输出、编写 shell 命令、修 bug 的综合能力。
- DeepSWE:真实开源仓库里的软件工程任务,模型需要读代码、定位问题、写 patch、跑测试。
- NL2Repo:给一段自然语言需求描述,让模型从零生成一个完整的可运行仓库。
- DSBench-Hard:数据科学场景的困难题,包括数据清洗、特征工程、建模、可视化等步骤。
- Toolathlon-Verified:综合工具调用能力,模型需要在多个工具之间来回切换完成任务。
- AutomationBench (Public):桌面/浏览器自动化任务的公开子集。
- ApexBench:多模态 Agent 综合基准,题目中含图像、需要模型看图作答。
- Agents' Last Exam:多模态高难度综合题,被戏称为"Agent 的高考"。
- Chartography:专门测图表理解,如折线图、柱状图、饼图的数据抽取和分析。
- ZeroBench:面向多模态大模型的高难度视觉基准,故意做成"当前模型全跪"的难度,用来给顶级模型留 headroom。
3.6 我怎么看这份跑分
我(莫潇羽@无忆研习社)个人的判断可以浓缩成三句话:
一是这份数据的信号价值大于绝对值——它告诉我们,DeepSeek 用一个 Flash 尺寸的实验版模型,在多模态维度上已经能和顶级旗舰打平甚至反超,说明底层视觉能力的训练是踏实的,接下来 Pro 版本可期。
二是别把"接近 Opus"当成生产宣传语。它接近的是特定几个多模态基准分数,其余方面尤其是复杂代码和长程规划,短板依然存在。
三是看基准别忘了看 harness 和采样参数。同一个模型,跑在不同 Agent 框架里、用不同参数,分数能差出 20 分以上。官方给出的是"上限",你实际能拿到多少,取决于你的调用姿势。
四、图片是怎么被算成 token 的:一张图到底多少钱
多模态模型的账不好算,很多人接完 API 半个月,账单出来才傻眼。这一章我把 V4-Flash-Vision-Exp 的图片计费逻辑掰得细一点,让你在动手前心里就有一本谱。
4.1 核心规则:图片先被 token 化,再按普通输入 token 计费
先立一个大前提:这个模型没有"按张图收费"的说法。所有图片进入模型前,会被一个"tokenizer"(分词器/视觉编码器的联合流程)转换成一定数量的 token,之后就和文字 token 混在一起,按你所在时段的输入价格计费。
单张图片消耗的 token 数量,由图片经过缩放后的最终像素决定,上限是 384 tokens。也就是说,不管你原图是 4K 还是 8K,最多也只会算 384 个 token 给你。这是一个"很平"的收费机制——不像国外某些模型按照 tile(图块)叠加算,越大越贵没上限。
4.2 图片会被自动缩放
模型不是拿到原图就直接算 token 的。它会先做一次"标准化缩放":
- 原图偏小:可能会按等比例上采样,让像素总量落到一个合理区间。
- 原图偏大:会按等比例下采样,让总像素落到大约 800×800 这个量级。
800×800 是一个近似的目标像素密度,不是精确等尺寸——具体到长宽比不同的图,DeepSeek 内部会按算法调整。这一步是为了把不同源头、不同分辨率的图归一化,方便后续 tokenizer 处理。
这就带来一个非常反直觉的现象:一张 2000×2000 的图和一张 5000×5000 的图,缩放之后消耗的 token 数量基本一致。大图不会烧钱、原图不会更贵。你不用为了省 token 提前手动压缩图片。
4.3 一张图到底多少钱:算一笔细账
先把 V4-Flash 现行的价格摆出来(注意:AI 大模型的定价变动非常快,下面是写稿时的近似行情,请以 DeepSeek 官方定价页面的实时数据为准):
|
计费维度 |
非高峰时段 |
高峰时段 |
|
输入(缓存未命中) |
约 1.5 元 / 百万 tokens |
约 3.0 元 / 百万 tokens |
|
输入(缓存命中) |
约 0.15 元 / 百万 tokens 量级 |
略高 |
|
输出 |
约 4.5 元 / 百万 tokens |
约 9.0 元 / 百万 tokens |
以一张 1920×1080 的图为例,缩放后大概会占用 369 tokens。按高峰时段的输入价(约 3 元/百万 tokens):
成本 = 369 × 3 / 1_000_000 元
≈ 0.001107 元
≈ 约 0.11 分钱
即便按单图 384 token 的封顶值算,一张图的输入成本也只有 0.001152 元,都不到一分二厘钱。
再放大一点看。假设你做一个日均 10 万次调用、每次带 1 张图的多模态 Agent 服务,一天光图片的输入成本是:
100000 × 384 × 3 / 1_000_000 ≈ 115.2 元
一个月大概 3500 元上下。加上文字部分和输出部分才是全部账单,但至少"图片带来的额外成本"不再是压死项目的稻草。这个价格结构真的比很多国内外多模态 API 都要友好。
4.4 官方还提供了一个 token 计算器
如果你想在动手前对不同尺寸的图心里有个数,DeepSeek 官方在 API 文档里给了一个图片 token 用量估算器。你把图片尺寸输入进去,它会告诉你这张图会被算成多少 token。也可以在自己本地按官方给的近似公式做一遍估算,方便你写成本预警脚本。
4.5 其它容易被忽略的限额
除了单图 token 上限,官方还给出了一堆"防炸参数",我整理成一张速查表:
|
限额项 |
具体数字 |
说明 |
|
外部图片 URL 最大长度 |
8,192 字符 |
太长的签名 URL 需要考虑短链 |
|
单个 HTTP 请求体最大 |
48 MiB |
Base64 请求最容易超这个上限 |
|
单张 Base64 或 URL 图片 |
32 MiB |
超出请先压缩或走 Files API |
|
Files API 单文件最大 |
64 MiB |
上传管道更宽松 |
|
单次请求图片数量 |
最多 600 张 |
批量处理场景可利用 |
|
单次请求图片总大小(不用 file_id) |
64 MiB |
直接内联传图时的天花板 |
|
单次请求图片总大小(含 file_id) |
200 MiB |
走 Files API 可以放大三倍多 |
|
图片单边尺寸 |
通常 ≤ 8,192 像素 |
超过会拒收 |
|
图片单边尺寸(图片 ≥ 15 张时) |
≤ 4,096 像素 |
批量场景更严格 |
这些限额是很多新手栽跟头的地方。尤其是 Base64 内联传图,加上编码本身有 33% 左右的膨胀,一张原本 20MB 的高清图 Base64 之后就快 27MB 了,几张一起传立刻打爆 48MB 请求体上限。我的建议是:超过 5MB 的图,一律走 Files API。这也是下一章要展开讲的。
4.6 detail 参数:你可以自己选精度
官方还给了一个 detail 参数,用来控制图像细节的解析粒度:
low:把图片 resize 到 512×512 处理,token 消耗最省,适合不需要精细视觉细节的场景(比如只是识别整体布局、大致内容)。high或original:保留更高分辨率的图,模型能看到更多细节,token 消耗更接近上限 384。
注意"保留原图"其实并不是完全不做处理——模型真正读图前,还是会按前述的 800×800 目标做一次缩放。所以 high 和 original 只是让你不主动降精度,不代表原图会按原始像素完整输入模型。
这个参数是个很实用的省钱开关。我的做法是:非视觉密集型任务(比如让模型看一张 dashboard 截图判断"上面有几个卡片")用 low;视觉密集型任务(比如让它读一张图表的具体数据点)用 high。批量场景配合 low 再走 Files API 复用,成本能压得非常低。
五、三种 API 调用格式与三种传图方式:接入姿势全览
模型再强也要能接进去才算数。这一章我把 V4-Flash-Vision-Exp 的三种调用格式、三种传图方式全部拆开,用伪代码演示每一种的写法和适用场景。注意下面所有伪代码都做了通用化处理,去掉了 API key 硬编码和平台特有的封装,请以官方 SDK 和文档为准。
5.1 三种调用格式,你可以按老代码"平替"
官方直接给足了兼容性:
|
格式 |
兼容对象 |
迁移成本 |
|
Chat Completions |
OpenAI 老风格 |
最低,改 base_url 和模型名即可 |
|
Anthropic Messages |
Claude 风格 |
低,原本用 Claude 的项目可平迁 |
|
Responses API |
OpenAI 新风格 |
低,跟着 OpenAI 官方演进方向走 |
这三种格式在 OpenAI、Anthropic 生态里已经很常见,梁子等于把 DeepSeek 做成了一个"多协议兼容底座"。这意味着你原本用 GPT 家族或 Claude 家族的代码,理论上只要改两行就能直接跑起来跑 DeepSeek,几乎没有迁移成本。
5.2 三种传图方式,各有各的适用场景
再来是传图方式,同样是三选一:
- Base64 内联:把图片二进制编成 Base64 字符串,直接塞进请求体。适合图片小、一次性使用、对延迟不敏感的场景。
- 外部 URL 引用:给模型一个可公开访问的图片链接(比如 CDN URL、公开的 OSS 链接),模型自己去拉。适合图片已经在你的对象存储里、有公网可达链接的场景。
- Files API 上传后引用:先把图片上传到 DeepSeek 平台拿到
file_id,之后在请求里用 id 引用。适合同一张图会被反复引用、图片较大、多轮对话的场景。
Files API 本身是免费的,只有实际推理请求按 token 计费。这个设计对多轮多模态 Agent 特别友好——一张背景图上传一次,之后几十轮对话都不用再传字节流。
5.3 Chat Completions + Base64 内联的伪代码
这是最经典的写法,适合入门:
# 伪代码:Chat Completions 格式 + Base64 内联传图
# 请自行安装并替换为对应 SDK
import base64
from openai import OpenAI
client = OpenAI(
api_key="<你的-DEEPSEEK-API-KEY>",
base_url="https://api.deepseek.com/v1",
)
# 1. 读本地图片并做 Base64
with open("screenshot.png", "rb") as f:
image_b64 = base64.b64encode(f.read()).decode("utf-8")
# 2. 发起对话请求
resp = client.chat.completions.create(
model="deepseek-v4-flash-vision-exp",
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "请描述截图里的关键 UI 元素与可能存在的问题"},
{
"type": "image_url",
"image_url": {
"url": f"data:image/png;base64,{image_b64}",
"detail": "high", # low / high / original
},
},
],
}
],
temperature=0.3,
)
print(resp.choices[0].message.content)
几个新手容易犯的错:
- Base64 前面一定要带
data:image/png;base64,前缀(或者对应格式的前缀),不然模型识别不出来是图。 detail字段决定 token 消耗,非视觉密集任务写 low 能省不少。- 记得 Base64 传图受 32MiB 单图上限、48MiB 请求体上限约束,超了就换 Files API。
5.4 外部 URL 引用的伪代码
如果图片已经在你自己的 CDN 或者对象存储上:
# 伪代码:Chat Completions 格式 + 外部 URL 传图
resp = client.chat.completions.create(
model="deepseek-v4-flash-vision-exp",
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "分析这张日报截图,提炼三个核心趋势"},
{
"type": "image_url",
"image_url": {
"url": "https://your-cdn.example.com/reports/2026-08-21/daily.png",
"detail": "high",
},
},
],
}
],
)
注意事项:
- URL 必须公开可访问,不能是需要登录才看得到的私有链接。
- URL 长度别超 8,192 字符,签名 URL 太长的话考虑用短链服务。
- 强烈建议自己的 CDN 上给图片打上一个较长的缓存 TTL,避免模型每次都重新拉带宽。
5.5 Files API 上传 + file_id 引用的伪代码
Files API 是这次一起放出的一个大件,尤其适合多轮场景。使用流程分两步:
# 步骤 1:上传图片,拿到 file_id
uploaded = client.files.create(
file=open("logo.png", "rb"),
purpose="vision", # 用途标记
)
file_id = uploaded.id
print("file_id:", file_id)
# 步骤 2:在后续请求里用 file_id 引用同一张图
resp = client.chat.completions.create(
model="deepseek-v4-flash-vision-exp",
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "基于这个 logo 生成三种海报文案思路"},
{
"type": "image_url",
"image_url": {"file_id": file_id},
},
],
}
],
)
一旦拿到 file_id,在这个会话乃至以后的多个请求里都可以复用它。Files API 上传本身不收费,只有实际调用模型推理的部分按 token 计费——所以对"同一张图在多轮对话里反复被引用"的场景,走 Files API 是省带宽、省重复上传时间的最佳姿势。
5.6 Anthropic Messages 格式的最小示例
老 Claude 用户可以几乎零改动迁移过来:
# 伪代码:Anthropic Messages 格式
import base64, requests
DEEPSEEK_MSG_ENDPOINT = "https://api.deepseek.com/anthropic/v1/messages"
API_KEY = "<你的-DEEPSEEK-API-KEY>"
with open("chart.png", "rb") as f:
image_b64 = base64.b64encode(f.read()).decode("utf-8")
body = {
"model": "deepseek-v4-flash-vision-exp",
"max_tokens": 2048,
"messages": [
{
"role": "user",
"content": [
{"type": "text", "text": "请读出这张图表里 Q2 到 Q4 的数据"},
{
"type": "image",
"source": {
"type": "base64",
"media_type": "image/png",
"data": image_b64,
},
},
],
}
],
}
r = requests.post(
DEEPSEEK_MSG_ENDPOINT,
headers={
"x-api-key": API_KEY,
"anthropic-version": "2023-06-01",
"content-type": "application/json",
},
json=body,
)
print(r.json())
这里的关键是 content 里的每个块用 type: "image" 而不是 type: "image_url",格式跟着 Anthropic 走。如果你的项目原本已经在跑 Claude,模型名换成 deepseek-v4-flash-vision-exp、endpoint 换成 DeepSeek 的 Anthropic 兼容地址,其余不用动。
5.7 主流 Agent 框架里怎么接
因为 V4-Flash-Vision-Exp 兼容 OpenAI 的 Chat Completions 格式,主流 Agent 框架接入几乎无痛:
- LangChain:把
ChatOpenAI的model_name换成deepseek-v4-flash-vision-exp,openai_api_base指向 DeepSeek endpoint。 - AutoGen:同上,在
config_list里换模型名和 base_url。 - CrewAI:在 LLM 配置里替换 provider 和 model 即可。
- LlamaIndex:
OpenAILLM 类替换 model 和 base_url。
多模态部分要注意一点:一些老版本 Agent 框架的消息结构还没适配"图文混合 content"这种数组形式,需要升级到最新版才能顺利传图。这个坑我踩过——升级前一直报 "invalid content format",升级后立刻通了。
5.8 一个"错峰"的小技巧
DeepSeek 的定价对高峰时段和非高峰时段是分档的。非高峰时段(一般是 UTC 深夜到早晨的时段,对应北京时间的白天和傍晚部分)价格是高峰时段的一半左右。
如果你做的是可以异步、批量处理的任务,比如离线分析、每日报表生成、大批量图片打标签,排到非高峰时段跑,成本能直接砍一半。