现在位置: 首页 > DeepSeek Harness > 正文

DeepSeek Harness 多模态

DeepSeek 上线了实验性质的多模态视觉理解模型 DeepSeek-V4-Flash-Vision-Exp,并同步开放多模态 API 服务与免费的 Files API。

使用前安装最新版本:

npm install -g @deepseek-ai/dsh@latest

更新到最新版后,可以看到模型已经有了 DeepSeek-V4-Flash-Vision-Exp:

切换到视觉模型,然后我们可以直接推动图片或者 ppt 文件到文档中,让它看看图片中的内容( 测试图片下载):

什么是多模态

要理解多模态,先要理解"模态"(modality)这个词,模态指的是信息的不同表现形式:文字是一种模态,图片、音频、视频各自也是不同的模态。

模态常见形式对应的 AI 能力
文本文章、代码、对话大语言模型(LLM)
图像照片、截图、设计稿、图表视觉理解模型
音频语音、音乐语音识别与生成模型
视频短片、录屏、监控画面视频理解模型

过去的大语言模型只处理文本一种模态,你发给它的所有内容都必须先变成文字。

多模态模型则可以同时接收图片和文字,把它们统一转换成 token 序列后一起处理。

多模态模型处理图片与文本的流程图

关键在于:图片并不是被模型"直接看到"的,而是先由视觉编码器切成小块(patch)并转成向量,再与文本 token 拼成同一个序列。

图片也会消耗 token,一张图片最多占 384 tokens,这正是后文多模态计费规则的来源。

对 Agent 来说,多模态带来的是质变,而不是锦上添花。

对比项纯文本模型多模态模型
输入形式只有文字文字与图片混合
排查代码报错需要用户把报错手动抄成文字直接发送报错截图
还原设计稿无法参考视觉稿对照设计稿直接写页面
分析数据图表读不到图片里的图看图直接给结论

V4-Flash-Vision-Exp:多模态视觉模型上线

DeepSeek-V4-Flash-Vision-Exp 是一个实验性质的多模态视觉理解模型,现已上线 DeepSeek API 平台。

用户通过设置 model='deepseek-v4-flash-vision-exp' 即可访问该模型。

它的能力定位可以用一句话概括:文本能力不缩水,视觉能力大跃升。

在纯文本能力(Agent、推理、世界知识等)方面,它与 DeepSeek-V4-Flash 正式版持平。

在需要视觉理解的 Agent Benchmark 上,它相比 DeepSeek-V4-Flash 实现了大幅跃升,多模态 Agent 能力已接近 Opus-4.8。

能力维度DeepSeek-V4-FlashDeepSeek-V4-Flash-Vision-Exp
纯文本 Agent 任务正式版基准与正式版持平
推理与世界知识正式版基准与正式版持平
视觉理解 Agent 任务不支持,测评中忽略多模态元素大幅跃升,接近 Opus-4.8
模型定位正式版实验版

测评口径说明:对于公开基准测试集中的 Code Agent 文本任务,DeepSeek 系列模型使用 DeepSeek Harness 极简模式作为框架进行测试,使用 max 档位,temperature=1.0,topp=0.95。

在 ApexBench 与 Agents' Last Exam 测评中,文本模型 DeepSeek-V4-Flash 会忽略其中的多模态元素。


多模态 API 快速开始

多模态 API 支持 Chat Completions、Messages、Responses 三种格式调用,可以方便地接入各类 Agent 工具。

三种格式的能力一致,按你熟悉的接口风格选择即可。

调用格式接口风格适合谁用
Chat CompletionsOpenAI 经典对话接口已有 OpenAI SDK 代码的开发者
MessagesAnthropic Messages 接口,base_url 为 https://api.deepseek.com/anthropic已有 Anthropic 风格代码或工具链的开发者
ResponsesOpenAI 新版 Responses 接口使用新版 SDK、偏好简洁输入结构的开发者

三种格式都支持图文混合输入,图片有 base64 内联、外部 URL、Files API 三种传入方式。

base64 内联、外部 URL 与 Files API 三种图片传入方式对比图

传入方式请求体大小是否需要图床适用场景
base64 内联不需要本地图片、一次性小图
外部 URL需要图片已部署在可公开访问的服务器
Files API不需要同一张图片多次使用、高频批量任务

方式一:base64 内联

本地图片编码成 base64 字符串后,以 data URL 的形式直接写进请求体。

实例

# 文件路径:vision_base64_demo.py
# 依赖:pip install openai
import base64
from openai import OpenAI

# DeepSeek 端点兼容 OpenAI SDK,改 base_url 即可切换
client = OpenAI(
    api_key="sk-你的密钥",                  # 必填:替换为你自己的 DeepSeek API 密钥
    base_url="https://api.deepseek.com"    # 必填:DeepSeek 官方端点
)

# 读入本地图片,编码成 base64 字符串
with open("runoob-logo.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",
                    # base64 内联:data:图片格式;base64,编码内容
                    "image_url": {"url": f"data:image/png;base64,{b64}"}
                }
            ]
        }
    ],
    stream=False                           # 可选:是否流式输出,默认 False
)

print(response.choices[0].message.content)

运行输出:

图片中的文字是 "RUNOOB"。

方式二:外部 URL

图片部署在可公开访问的服务器上,请求里只传一个 URL 字符串,请求体很小。

实例

# 外部 URL 方式:${DEEPSEEK_API_KEY} 为提前导出的环境变量
curl https://api.deepseek.com/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ${DEEPSEEK_API_KEY}" \
  -d '{
  "model": "deepseek-v4-flash-vision-exp",
  "messages": [
    {
      "role": "user",
      "content": [
        {"type": "text", "text": "用一段话总结这张图表的趋势"},
        {"type": "image_url", "image_url": {"url": "https://static.runoob.com/images/chart-demo.png"}}
      ]
    }
  ]
}'

URL 必须是平台可访问的公网地址,内网地址与本地回环地址都无法被拉取。

base64 与 URL 两种方式都可以在 image_url 里加一个可选的 detail 字段,控制图片的解析精度。

detail 取值行为适用场景
low缩放到 512×512 再解析,token 消耗少只需要看个大概:判断图片类型、找主体
high等价于 original需要看清细节
original保留原图精度解析读文字、看小图标、分析图表
auto当前等价于 original默认值,不传 detail 时的行为

批量跑截图类任务时把 detail 设为 low,是控制多模态成本最直接的手段。

Messages 与 Responses 格式

已有 Anthropic 或新版 OpenAI 风格代码的,几乎可以无缝切换到 DeepSeek 多模态。

Messages 格式使用 image 内容块,图片通过 source 字段传入。

实例

# Messages 格式:与 Anthropic Messages API 风格一致
# 端点走 DeepSeek 的 Anthropic 兼容路径 /anthropic,头字段也与 Anthropic 一致
curl https://api.deepseek.com/anthropic/v1/messages \
  -H "Content-Type: application/json" \
  -H "x-api-key: ${DEEPSEEK_API_KEY}" \
  -d '{
  "model": "deepseek-v4-flash-vision-exp",
  "max_tokens": 1024,
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "type": "image",
          "source": {
            "type": "url",
            "url": "https://static.runoob.com/images/code-screenshot.png"
          }
        },
        {"type": "text", "text": "这段代码运行会报错,问题出在第几行?"}
      ]
    }
  ]
}'

Responses 格式使用 input 数组,文本用 input_text,图片用 input_image。

实例

# 文件路径:vision_responses_demo.py
# client 的创建方式与上文 base64 示例相同
response = client.responses.create(
    model="deepseek-v4-flash-vision-exp",  # 必填:多模态视觉理解模型
    input=[
        {
            "role": "user",
            "content": [
                # 文本用 input_text,图片用 input_image
                {"type": "input_text", "text": "把截图里的表格整理成 Markdown"},
                {
                    "type": "input_image",
                    "image_url": "https://static.runoob.com/images/table.png"
                }
            ]
        }
    ]
)

# Responses 格式直接取 output_text 即可
print(response.output_text)

Files API:先上传,后引用

Files API 现已开放,该 API 不收费。

用户可以先把图片上传到平台,之后在请求中通过 file_id 引用。

这样做有两个直接好处:请求里不再携带大段 base64,节省请求带宽;同一张图片在多个请求中无需重复上传。

第一步,上传图片并拿到 file_id。

实例

# 上传图片:purpose 目前仅支持 user_data
# 上传本身免费,不产生任何费用
curl https://api.deepseek.com/files \
  -H "Authorization: Bearer ${DEEPSEEK_API_KEY}" \
  -F "purpose=user_data" \
  -F "file=@runoob-chart.png"

上传成功后,平台返回文件的元信息。

实例

{
  "id": "file-api-qw3x8v2m6n",
  "object": "file",
  "filename": "runoob-chart.png",
  "purpose": "user_data",
  "bytes": 154320,
  "created_at": 1787300000,
  "expires_at": 1789900000
}
字段说明
id文件标识,file-api- 开头,后续请求通过它引用图片
filename上传时的原始文件名
purpose文件用途,当前仅支持 user_data
bytes文件大小,单位字节
created_at上传时间,Unix 时间戳
expires_at过期时间,可选,仅在上传时设置了有效期才返回

上传时还可以用 expires_after 参数指定有效期,取值 1 小时到 30 天,不传则永久有效。

第二步,在多模态请求中用 file_id 引用这张图片。

{
  "model": "deepseek-v4-flash-vision-exp",
  "messages": [
    {
      "role": "user",
      "content": [
        {"type": "text", "text": "这个图表的整体趋势是什么?"},
        {"type": "file", "file_id": "file-api-qw3x8v2m6n"}
      ]
    }
  ]
}

什么时候用 Files API?

同一张图片要在多个请求里反复使用时(比如批量跑同一批截图的 Agent 任务),先上传一次、处处引用,比每次都传 base64 更省带宽也更快。

file 块还支持 file_data 直接内联 base64(与 file_id 互斥,可搭配 filename 字段),适合偶尔绕过上传步骤的场景。

经 Anthropic 兼容的 Messages 端点引用 file_id 时,需要额外带上请求头 anthropic-beta: files-api-2025-04-14。


计费说明与注意事项

多模态请求按 token 计费,图片会被转换成 token 后参与计费。

计费项规则
图片计费图片转换成 token 后按 token 计费
单张图片上限最多占 384 tokens
价格与 DeepSeek-V4-Flash 模型一致
Files API免费

图片 token 会占用上下文窗口,多图任务要留意总消耗:10 张图片最多可能占用 3840 tokens。

图片在进入模型前会被自动缩放:小于约 384×384 的图片会被放大,更大的图片会被缩小到约相当于 800×800 的总像素。

因此 token 消耗只与缩放后的尺寸相关,2000×2000 与 5000×5000 的图片消耗相同;多图请求中每张图片独立按同一规则计算。

base64 会让请求体明显变大,大图或高频调用建议改用外部 URL 或 Files API。

多模态请求还有一些硬性限制,超出会直接返回 400 错误。

限制项规则
图片格式JPEG、PNG、GIF、WebP,按文件实际内容判断,不看扩展名
外部 URL 长度不超过 8192 字符,且图片须能在 60 秒内下载完成
请求体大小不超过 48 MiB
单张图片大小base64 与 URL 方式最大 32 MiB,Files API 最大 64 MiB
单请求图片数量最多 600 张
图片最大边长8192 像素;请求含 15 张及以上图片时降为 4096 像素
图片位置只能放在 user 消息里,system 与 assistant 消息带图会报错

V4-Flash-Vision-Exp 是实验性质的模型,能力与服务规格可能随版本迭代调整,关键生产链路建议同时评估正式版模型。

更完整的使用说明可参考官方 API 文档:API 指南 - 图像理解API 指南 - Files API


总结

V4-Flash-Vision-Exp 用"文本不缩水、视觉大跃升"的定位,把多模态能力带进了 DeepSeek 的 Agent 生态。

对开发者来说,上手成本很低:换一个 model 名称,就能让 DeepSeek Harness 里的 Agent 看懂截图、设计稿与图表。

建议先用官方三个实例找感觉,再把自己的业务图片接进来,跑通第一个"看图干活"的 Agent 任务。