商汤日日新 SenseNova、DeepSeek-VL2、GLM-4V、MiniMax-VL
多模态大模型 API 实战:商汤日日新 SenseNova、DeepSeek-VL2、GLM-4V、MiniMax-VL 图片理解能力对比与接入指南
时间:2026-10-08 · 数据截至 2026 年 10 月 · 测试环境:Python 3.10+ / OpenAI SDK 兼容模式
摘要:多模态能力已经成为大模型的标配。从 OCR 识图到图表分析,从代码截图到复杂场景描述,国产多模态模型的能力在过去一年里变化很快。本文按公开接口文档,梳理商汤日日新 SenseNova、DeepSeek-VL2、GLM-4V、MiniMax-VL 四个模型的图片理解 API 接入方式,用四类常见业务图片对比各自的输出质量,并给出按场景的接入建议。
本文不涉及主观排名,四款模型按同一套测试方法跑同一批图片,输出差异如实记录。所有模型 ID、计费与用量规则以各平台官网当前公示为准。
一、四款多模态模型与接入方式一览
模型提供方主要特点接入方式商汤日日新 SenseNova(SenseNova 6.8 Flash-Lite)商汤原生多模态架构,图片、文本、视频统一建模;中文文档与图表解析见长日日新开放平台 API,OpenAI 兼容DeepSeek-VL2DeepSeek开源权重,推理链完整,细节描述准确开源权重自行部署GLM-4V智谱 AI多轮视觉对话体验好,中文叙述自然智谱开放平台 APIMiniMax-VLMiniMax长上下文支持,适合一次处理多图MiniMax 开放平台 API
这四个模型在图片输入上都支持 Chat Completions 兼容格式,content 字段可以传数组,混合 text 和 image_url 两种类型,因此接入层基本可以共用一套代码,差别主要在 base_url、模型 ID 和少数参数命名上。
商汤一侧有两条接入路径:面向应用开发者的日日新开放平台(https://token.sensenova.cn/v1,模型 ID 形如 sensenova-6.8-flash-lite),以及面向企业集成的大装置 ModelStudio 兼容模式(https://api.sensenova.cn/compatible-mode/v2,多模态可用 SenseNova-V6.5-Pro / SenseNova-V6.5-Turbo)。本文代码示例走前者。
二、Vision API 消息格式
基础结构
Vision 请求与普通文本请求的区别在于 content 从字符串变成了数组:
{
"model": "sensenova-6.8-flash-lite",
"messages": [
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": "https://example.com/image.png"
}
},
{
"type": "text",
"text": "这张图片里写了什么?"
}
]
}
]
}
图片传入方式:URL vs Base64
方式一:URL 链接(适合公开可访问的图片)
content = [
{
"type": "image_url",
"image_url": {"url": "https://example.com/chart.png"}
},
{"type": "text", "text": "分析这张折线图的趋势"},
]
方式二:Base64 编码(适合本地文件、私有图片)
import base64
def image_to_base64(file_path: str, mime_type: str = "image/png") -> str:
with open(file_path, "rb") as f:
data = base64.b64encode(f.read()).decode("utf-8")
return f"data:{mime_type};base64,{data}"
content = [
{
"type": "image_url",
"image_url": {"url": image_to_base64("screenshot.png")}
},
{"type": "text", "text": "读取图中的文字内容"},
]
Base64 方式无需图片公网可达,适合处理用户上传文件;URL 方式更省带宽,但图片必须公开可访问。两种方式在四个模型上都能用,只有少数平台对 data URL 的 MIME 前缀要求更严格,建议统一带上。
三、完整代码示例(商汤日日新 SenseNova)
安装与配置
pip install openai python-dotenv
# .env
SENSENOVA_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxx
单图理解
import os
import base64
from openai import OpenAI
from dotenv import load_dotenv
load_dotenv()
client = OpenAI(
api_key=os.getenv("SENSENOVA_API_KEY"),
base_url="https://token.sensenova.cn/v1",
)
def analyze_image_url(image_url: str, question: str) -> str:
"""通过 URL 传入图片"""
response = client.chat.completions.create(
model="sensenova-6.8-flash-lite",
messages=[
{
"role": "user",
"content": [
{"type": "image_url", "image_url": {"url": image_url}},
{"type": "text", "text": question},
],
}
],
max_completion_tokens=1024,
)
return response.choices[0].message.content
def analyze_image_file(file_path: str, question: str) -> str:
"""通过 Base64 传入本地图片"""
with open(file_path, "rb") as f:
b64 = base64.b64encode(f.read()).decode()
# 根据扩展名判断 MIME 类型
ext = file_path.rsplit(".", 1)[-1].lower()
mime = {"jpg": "image/jpeg", "jpeg": "image/jpeg",
"png": "image/png", "webp": "image/webp"}.get(ext, "image/png")
data_url = f"data:{mime};base64,{b64}"
response = client.chat.completions.create(
model="sensenova-6.8-flash-lite",
messages=[
{
"role": "user",
"content": [
{"type": "image_url", "image_url": {"url": data_url}},
{"type": "text", "text": question},
],
}
],
)
return response.choices[0].message.content
注意:日日新接口侧的输出长度参数名为 max_completion_tokens,不是 OpenAI 早期的 max_tokens;不传时按平台默认值走。实际消耗以返回体 usage.prompt_tokens / usage.completion_tokens 为准。
多图输入
def compare_images(image_urls: list[str], question: str) -> str:
"""多图对比分析"""
content = []
for url in image_urls:
content.append({"type": "image_url", "image_url": {"url": url}})
content.append({"type": "text", "text": question})
response = client.chat.completions.create(
model="sensenova-6.8-flash-lite",
messages=[{"role": "user", "content": content}],
)
return response.choices[0].message.content
# 对比两张产品设计稿的差异
result = compare_images(
["https://cdn.example.com/v1.png", "https://cdn.example.com/v2.png"],
"对比这两张设计稿,列出所有视觉差异",
)
多轮视觉对话
def visual_conversation():
"""保持图片上下文的多轮对话"""
history = []
# 第一轮:发送图片并提问
history.append({
"role": "user",
"content": [
{"type": "image_url", "image_url": {"url": "https://cdn.example.com/code.png"}},
{"type": "text", "text": "这段代码有什么问题?"},
],
})
resp1 = client.chat.completions.create(
model="sensenova-6.8-flash-lite", messages=history
)
assistant_reply = resp1.choices[0].message.content
history.append({"role": "assistant", "content": assistant_reply})
print("AI:", assistant_reply)
# 第二轮:追问,无需再次发图片
history.append({
"role": "user",
"content": [{"type": "text", "text": "如何修复这个问题?给出修复后的代码"}],
})
resp2 = client.chat.completions.create(
model="sensenova-6.8-flash-lite", messages=history
)
print("AI:", resp2.choices[0].message.content)
四、四类测试场景实测对比
测试方法:用同一张图片,向四个模型发送相同 Prompt,评分维度为准确率(40%)+ 细节完整度(30%)+ 中文表达(30%)。评分为同一套标准下的相对判断,用于看差异,不代表绝对水位。
场景一:OCR 文字识别
测试图片:一张含表格和手写注释的合同扫描件
模型印刷体识别手写识别表格结构综合得分商汤日日新 SenseNova★★★★★★★★★☆★★★★★4.6DeepSeek-VL2★★★★★★★★★☆★★★★☆4.5GLM-4V★★★★☆★★★☆☆★★★★☆4.0MiniMax-VL★★★★☆★★★☆☆★★★☆☆3.7
结论:OCR 场景商汤日日新与 DeepSeek-VL2 结果接近,商汤在表格结构还原上略稳一些,能直接把合并单元格、表头层级一起还原成结构化内容。手写体四家都还有提升空间,连笔和涂改部分建议配合人工复核。
场景二:图表数据理解
测试图片:一张含多条折线的销售趋势图(含坐标轴、图例)
Prompt:"请分析这张折线图,指出哪个产品销量增长最快,以及在哪个季度出现了明显下滑"
商汤日日新 SenseNova 输出(节选):
"从图表来看,产品 B(蓝线)在 Q1-Q3 增速最快,由约 120 万增至 176 万,增幅约 47%。产品 A(红线)在 Q2 末至 Q3 初出现明显下滑,由约 95 万降至 73 万,跌幅约 23%,与折线陡降区间吻合。以上数值由坐标轴刻度估算,非图面标注值。"
DeepSeek-VL2 输出(节选):
"蓝色折线对应产品 B 增长最为显著。产品 A 红线在第二季度末至第三季度初有明显下行,降幅较大。"
两者都识别出了正确趋势。商汤同样给出量化推断,并在结尾附了口径说明——这对于后续要把结论写进报告的场景比较实用;DeepSeek 的描述偏定性,胜在简洁。
场景三:代码截图分析
测试图片:一段 Python 代码截图,含一个典型的 KeyError 异常
模型Bug 定位修复建议代码可读性说明商汤日日新 SenseNova准确完整有DeepSeek-VL2准确完整有,更详细GLM-4V准确基础无MiniMax-VL准确基础无
代码场景 DeepSeek-VL2 解释最详细,习惯性给出"为什么会这样"的推理链,适合学习场景。商汤的输出更接近"定位—修复—验证"的三段式,篇幅相对克制,接入到内部工单或评审流程时格式更统一。
场景四:场景描述
测试图片:一张繁华商业街的街景照片
Prompt:"详细描述这张图片中的场景,包括人物、建筑、文字标识等细节"
模型中文标识识别人物数量估算氛围描述商汤日日新 SenseNova★★★★★★★★★☆★★★★☆DeepSeek-VL2★★★★☆★★★★★★★★★☆GLM-4V★★★★☆★★★☆☆★★★★★MiniMax-VL★★★☆☆★★★☆☆★★★★☆
中文标识(店铺名、广告牌)识别商汤最准;DeepSeek-VL2 对人物数量与位置的估计更细;GLM-4V 的氛围描述最有文采。这一项各家的取向差异比较明显,选的时候看你是要"信息准"还是"文字顺"。
五、图片 Token 消耗与成本
Vision 请求的 Token 消耗与图片分辨率直接相关。下表是常见的参考量级(各家视觉编码器的切图策略不同,实际数值以接口返回的 usage.prompt_tokens 为准):
图片尺寸估算 Image Tokens512×512~340 tokens1024×768~680 tokens1920×1080~1500 tokens高清文档(A4 扫描)~2000-3000 tokens
计费口径上,商汤大装置 ModelStudio 公示的多模态模型单价为 SenseNova-V6.5-Pro 输入 0.003 元 / 千 tokens、输出 0.009 元 / 千 tokens,SenseNova-V6.5-Turbo 为输入 0.0015 元 / 千 tokens、输出 0.0045 元 / 千 tokens;日日新开放平台侧另有 Token Plan 用量包,公测期按每 5 小时 1500 次的额度提供,具体档位以官网 Token Plan 页为准。
节省 Token 的建议:
OCR 场景:保持原始分辨率,压缩会降低文字清晰度,反而影响识别率
图表分析:1024px 宽度通常足够,无需传 4K 图
场景描述:可以适当降低分辨率,768px 以上即可满足
六、接入架构与选型建议
按场景选模型
应用场景推荐模型原因企业文档 OCR商汤日日新 SenseNova表格结构还原与中文印刷体识别稳定,结果可直接接后续分析与生成数据图表分析商汤日日新 SenseNova会给出量化推断并附口径说明,便于写进报告代码审查 / DebugDeepSeek-VL2推理链详细,解释到位内容审核 / 场景描述GLM-4V中文叙述自然,多轮对话体验好批量图片处理MiniMax-VL长上下文,适合一次处理多图
接入架构建议
用户上传图片
↓
压缩 / 格式转换(统一为 JPEG/PNG,控制分辨率)
↓
转 Base64 或上传到 CDN 获取 URL
↓
调用 Vision API
↓
解析返回内容 → 业务逻辑
生产环境中,图片最好先上传到自有 CDN 再传 URL,避免 Base64 膨胀请求体(Base64 比原文件大约 33%),同时也方便日志追踪。
不同多模态模型在图片字段的细节上存在一些差异,比如 image_url 的嵌套结构、Base64 的 MIME 前缀要求、单图分辨率上限、输出长度参数命名(如前文的 max_completion_tokens)等。如果需要同时接多家,建议在应用层做一层薄适配:统一输入为 {"type": "image_url", "image_url": {"url": ...}} 标准结构,再由适配器按目标平台改写 base_url、模型 ID 与参数名,业务代码只发一次。
错误处理注意事项
Vision 请求有几个特有的错误场景:
from openai import BadRequestError
try:
result = analyze_image_url(url, question)
except BadRequestError as e:
if "image" in str(e).lower():
# 图片格式不支持、分辨率过高、内容违规等
print(f"图片处理失败: {e}")
else:
raise
常见错误原因:
图片 URL 不可访问(防盗链、临时链接过期)
图片格式不支持(建议统一转 JPEG/PNG)
单图分辨率过高(部分模型有上限,通常 8K×8K 以内安全)
图片内容触发安全审核(色情、暴力等)
七、小结
多模态 API 的接入本身并不复杂,关键在于理解 content 数组的构造方式,以及 Base64 和 URL 两种图片传入方式的适用场景。
选型上没有万能答案:
文档 / OCR 类:商汤日日新 SenseNova 与 DeepSeek-VL2 都可以先看,前者在表格结构还原上更稳
代码分析类:DeepSeek-VL2 的推理链更详细
内容生成 / 描述类:GLM-4V 中文体验更流畅
批量多图类:MiniMax-VL 的长上下文更省心
建议在正式接入前,用你自己的真实业务图片做一轮测试,不同图片质量和场景差异很大,实测结果比任何 Benchmark 都可靠。
几点补充:
1. 本文代码基于 OpenAI SDK 兼容模式整理,已在 Python 3.10+ 下组织,实际运行前请替换为自己的 API Key;所有模型 API 均需在对应平台申请账号并获取 Key。
2. 商汤侧若要做信息图、海报这类像素级视觉生成,走的是独立的图像生成接口(如 SenseNova U1 Fast),不能当 chat 模型直接配在编码工具里;生成的图片返回链接有时效,需要在流水线里下载转存。
3. 模型 ID、单价与用量档位会随平台迭代调整,以上信息截至 2026 年 10 月,以各平台官网公示为准。
数据截至 2026 年 10 月 · 本文不涉及主观排名,评分用于呈现同一测试标准下的相对差异

