DeepSeek 于 8 月 21 日将 V4 接入 API 后,外界仅能观察到其多模态能力的提升,而随着权重与参考推理代码的公开,V4 的视觉处理链路首次得以完整剖析。图片不再只是被简单编码,而是直接融入 V4 原有的 Token 序列,参与长上下文 Attention、MoE 路由及后续的 Agent 推理,甚至注意力窗口与专家路由都为视觉 Token 专门调整了规则。

视觉前端采用 32 层 ViT,隐藏维度 1024,16 个 Attention Head,patch size 为 14。图片先被切分为 14×14 的 patch,每个 patch 映射为 1024 维向量,并使用二维 RoPE 编码空间位置,这对网页、GUI 等依赖空间关系的场景尤为关键。然而,V4 主干的隐藏维度为 4096,视觉侧仅 1024,且 patch 数量偏大,因此 DeepSeek 在两者之间插入了一个 Aligner,将相邻 3×3 的视觉特征合并,经 9216→4096→4096 的两层映射压缩后进入主干。这一设计相当于在视觉编码完成后进行序列压缩,前端保留高密度观察,主干前削减视觉 Token 数,配置中的 vision_max_n_token = 384 即指进入 V4 序列后的单图预算。

视觉 Token 并非按普通逐行顺序进入 V4,而是通过 build_image_block() 加入特殊标记并重新交织相邻行,同时通过 COMPRESS_PAD_TO = 4 与主干中 compress_ratio = 4 的压缩层对齐。进入主干后,merge_image_embeddings() 将视觉 embedding 写入图片占位区域,文字与图片进入同一 4096 维隐藏空间,但视觉 Token 的身份被保留——图像特殊 Token 位于词表范围之外,主干可通过检查 input_ids 判断来源。

在 Attention 层面,V4 的普通局部滑窗仅 128 Token,而一张图片可占近 384 Token,若按文字规则处理,同一张截图可能被切碎。为此,代码加入 get_image_visible() 扩展图片内部的可见范围,并要求整段图片在 prefill 阶段一次写入。MoE 方面,V4 拥有 256 个路由专家,每个 Token 激活 6 个,视觉 Token 使用独立的 bias_vl 调整专家选择,而 Hash-MoE 层则跳过 Token ID 映射,根据隐藏状态重新选择专家。这种设计使视觉与文字共享主干与专家池,但保留不同的可见关系与专家分配路径。

视觉 Agent 的工作负载与普通聊天不同:每产生一次环境观察,就需要重新执行图片缩放、patch 化、ViT 与 Aligner,再送进 V4 做 prefill。任务运行时间越长,视觉编码与反复 prefill 的占比越高。V4 支持超 100 万 Token 上下文,但容量大不等于计算可忽略,连续几十轮观察后,历史中会积累大量视觉状态,且相邻截图可能仅局部变化,却仍被重新编码,造成重复计算。这成为后续优化的重点方向,包括缓存 ViT 中间结果、视觉差分、混合环境表示等。

DeepSeek 此举已超出为语言模型增加图片输入,而是将环境状态纳入上下文定义。视觉信息被压进 V4 隐藏空间后,DFlash 需理解图片边界,MoE 需识别视觉 Token,长上下文需容纳连续环境变化。当这套链路接上 Agent,模型形成“读取环境—产生行动—工具改变环境—再推理”的完整循环。开放权重后,外部可从视觉压缩、Attention 可见范围、专家路由与多轮推理效率等层面直接研究。行业对多模态模型的评价标准,正从“能否识别图片内容”转向“视觉是否原生参与推理闭环”。