找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

4203

积分

0

好友

550

主题
发表于 1 小时前 | 查看: 1| 回复: 0

多模态大模型在代码生成和调试方面取得了令人瞩目的进步,但在基础的视觉理解任务上,它们的表现却不够稳定。

来自 UniPat AI 的研究者提出了一个极简的视觉智能体框架—— SWE-Vision 。其核心思路是,让视觉语言模型(VLM)通过编写并执行 Python 代码,来精确验证和改进自己的视觉判断。在五个主流的视觉基准测试中,这套简单的框架都帮助模型取得了当前最佳的性能表现。

模型“看”得见,但处理不精确

回顾过去一年,多模态模型在编程任务上的能力突飞猛进,从独立搭建项目到排查复杂 Bug,其表现已接近资深工程师。

然而,在面对“理解视觉世界”的任务时,它们的可靠性远不如代码能力。例如,在 UniPat AI 此前发布的多模态基准测试 BabyVision 中,一个普遍现象是:模型能给出长篇大论、看似合理的推理,却在最基础的计量、计数和空间关系判断上犯错误。

当我们仔细审视这些错误案例时,会发现一个关键模式:问题往往不是模型“没看见”,而是“看见了却无法精确处理”:

  • 阅读柱状图时,模型能感知到“大约75%”,但无法精确计算比值。
  • 在复杂场景中计数时,模型可能识别了每一个物体,但在逐一清点时出错。
  • 描述空间位置时,模型能给出定性判断(如“左边”),但难以稳定地进行距离计算和几何推理。

面对这种情况,人类会怎么做?我们会借助工具:画辅助线、做标记、用尺子测量、用笔来计算。既然模型已经极其擅长编程,能否让它用代码——这个它最熟悉的工具——来弥补视觉处理中的精度短板呢?

SWE-Vision 正是对这一猜想的系统性验证。

五大视觉基准性能对比图

结果表明,在涵盖基础感知、图表推理、数学问题、空间理解和复杂多步推理的五个不同视觉基准上,SWE-Vision 框架均能持续提升前沿大模型(如 GPT-5.2-xhigh 和 Seed-2.0-Pro)的表现,取得了领先的结果:

  • 在 BabyVision 上达到 64.4
  • 在 MathVision 上达到 94.0
  • 在 ZeroBench-Sub 上达到 50.1
  • 在 OmniSpatial 上达到 69.0
  • 在 ChartV-RQ 上达到 82.5

SWE-Vision:一个极简视觉智能体框架

SWE-Vision 的设计哲学是极简化,它没有堆砌大量专用工具,而是将核心能力压缩到最简。

工具层:仅保留两个工具
config.py 中,定义的工具只有两个:execute_codefinish

  • execute_code:允许模型在一个可持续保留状态的 Jupyter 环境里执行 Python 代码。
  • finish:当模型确信答案正确时,用于输出最终答案。

关键在于,工具接口非常小且通用。SWE-Vision 没有给模型塞一堆专用的视觉 API,而是只暴露一个模型本就熟悉的动作:写 Python。

控制层:一个标准智能体循环
agent.py 中的 VLMToolCallAgent 实现了一个完整的智能体循环:

  1. 将用户问题与图片组织成消息。
  2. 调用支持工具使用(tool use)的模型聊天接口。
  3. 如果模型发起 execute_code 调用,则将代码送入 Notebook 内核执行。
  4. 将代码执行结果作为工具消息返回给模型。
  5. 模型据此决定是继续调用工具,还是使用 finish 结束。

仓库默认使用 tool_choice=“auto”,并支持推理模式;开启该模式时,会将推理强度设为高档,并允许最多 100 轮迭代。

执行层:Docker 内的持久化 Jupyter 内核
kernel.py 并非简单地用 exec() 执行一段代码,而是会启动一个 Docker 容器,并在容器内启动一个 ipykernel。宿主机通过 jupyter_client.BlockingKernelClient 连接这个内核,并从 IOPub/shell 通道收集执行结果。

核心设计在于,内核是持久化的。这意味着变量、导入的库、图像对象和中间结果都能在多次 execute_code 调用之间保留。同时,代码运行在隔离的 Docker 环境中,宿主机与容器通过挂载目录交换文件。此外,kernel.py 还会在启动后执行健康检查,并将 matplotlib 的后端配置为 inline,以便抓取代码生成的图像输出。

简单来说,SWE-Vision 不强迫模型为每道题都写代码,但它为模型提供了一个随时可用且无比熟悉的“视觉工具箱”。

工作流程:从看图推理到带图验证

SWE-Vision 就像一个会看图的数据科学家,其完整工作流如下:

  1. 输入:用户提供问题及相关图片。
  2. 思考:模型先判断问题能否直接回答,是否需要计算或验证。
  3. 执行:如果需要,则调用 execute_code,在 Notebook 中使用 PIL、NumPy、matplotlib 等库进行分析。
  4. 反馈:代码执行的输出(数值、错误信息或可视化图表)被回流给模型。
  5. 迭代:模型继续分析反馈结果,决定下一步行动,直到最终调用 finish 给出答案。

SWE-Vision工作流程图

这套设计有几个关键点:

  • 有状态的执行环境:变量、导入、图片加载状态可跨多次调用保留。
  • Docker沙箱:确保可控的安全环境和结果可复现性。
  • 图像输入与输出:模型不仅能读取输入图像,还能将自己生成的图像结果(如绘制的辅助线)回传给自己进行验证,这是实现自我纠错的关键。
  • 标准接口:遵循 OpenAI Function Calling 标准接口,保证了与主流模型的开箱即用兼容性。

这套设计的核心价值在于,它允许模型像一个真正的科学家那样,先做实验,再下结论

核心优势:有状态的内核比代码执行器更重要

初次看到 SWE-Vision,有人可能觉得它只是在 VLM 外面套了个 Python 工具壳。但真正的差异在于 “有状态”

在 SWE-Vision 中,内核状态在多次调用间持续存在。这使得模型可以像人类分析师一样分步工作:

  • 第一轮:读取图像,检查尺寸。
  • 第二轮:裁剪局部区域,观察边缘。
  • 第三轮:统计颜色或测量距离。
  • 第四轮:绘制辅助线以确认判断。
  • 最后:综合所有信息,生成最终答案。

如果代码执行是无状态的,这种多步骤分析会变得异常笨重:每一步都需要重新导入库、重新加载图片、重建变量,模型也难以维护中间的假设。SWE-Vision 通过持久化的内核,把“多轮工具调用”变成了“同一个 Notebook 会话中的连续实验”。

从工程实现上看,这也解释了为何它能处理图表测量、空间关系和复杂的多步视觉任务,而不仅仅是做一次性的 OCR 或物体检测。

关键能力:模型能验证自己的视觉判断

在一个“观察科学图表并总结规律”的案例中,SWE-Vision 展现了一种截然不同的行为模式。

如下图所示,这是一个典型的科研图表分析任务:要求判断在 Quarter=15 时,哪个子图中红色虚线与黑色实线的差距最大。SWE-Vision 智能体给出了一套极其严谨且可解释的解法。

图表分析案例:SWE-Vision处理输入与输出对比

它首先排除了不存在红色虚线的子图(d)。随后,对其余每个候选子图,在 Quarter=15 处精确绘制辅助线,定位红线与黑线的交点。接着,通过可执行代码精确计算两条曲线在该位置的数值差距。最终,基于计算结果给出正确答案。

这种“先结构化分析,再程序化测量,最后数值验证”的思维与行动闭环,与传统 VLM 依赖直觉式“瞪眼观察”直接给出答案的方式形成了鲜明对比。它不仅显著提升了结果的可靠性与可解释性,也展示了更高的能力上限。

为什么极简设计反而效果更好?

SWE-Vision 的一个重要结论是:对于视觉任务,为模型提供通用的代码执行能力,是提升其表现的一个有效的测试时扩展(test-time scaling)方向。

它之所以有效,恰恰归功于其极简性:

  • 工具数量少,模型决策边界清晰。
  • 工具语义与模型已有的编程能力高度一致,降低了学习成本。
  • 支持多轮迭代和状态积累,允许进行复杂的分析。
  • 中间结果(如图像)可被模型再次观察,而非一次性返回文本。
  • 不绑定特定评测集的专用手工策略,泛化性强。

这与许多“为某类视觉任务单独发明一套工具接口”的方法不同。那些方法可能在特定任务上有效,但泛化性不足。而 SWE-Vision 的目标,是提供一个尽可能通用的视觉增强框架,让模型自己决定何时调用代码、如何组织分析步骤。

五大基准测试全面提升:一个通用视觉增强器

SWE-Vision 在五个覆盖广泛的视觉基准上进行了评测,核心发现高度一致:引入代码执行能力,能系统性地提升前沿模型的视觉表现上限。

在对比实验中,SWE-Vision 对两个前沿的视觉语言模型(GPT-5.2 和 Seed-2.0-Pro)都带来了显著提升。

GPT-5.2在SWE-Vision增强下的性能提升
Seed-2.0-Pro在SWE-Vision增强下的性能提升

一个“反直觉”的现象是:提升幅度最大的,往往不是最复杂的高阶推理任务,而是最基础的感知和精确处理能力——例如 BabyVision 中的计数、颜色识别和空间关系判断。

这类任务人类依靠直觉加简单工具就能稳定完成,而模型仅凭“语言化视觉”则极易忽略细节、数错个数、缺乏验证手段。SWE-Vision 的结果也揭示了另一种可能:对于视觉任务,测试时扩展(TTS)不一定只能靠“多想几段文字”,也可以靠“多写几行代码”来看得更精细。

展望:代码增强视觉或成未来智能体原生能力

与训练传统多模态 LLM 所需的数据(通常是问题、图片、答案三元组)不同,训练视觉智能体模型需要多模态交错的智能体轨迹。

它还需要一个交互式环境来支持强化学习、工具使用和评估,使模型不仅能学习回答问题,还能学习感知、行动和反思。要彻底释放“工具增强视觉”的潜力,模型需要更多深度融合视觉与编程的 SFT/RL 数据与环境。

具体而言,未来的关键方向包括:

  • 时机判断:学会识别何时视觉推理需要代码辅助,何时可以直接回答。
  • 中间验证:在多步推理过程中主动检验中间结果的正确性。
  • 失败恢复:在代码方案无效时及时跳出,切换到替代策略。
  • 原生融合:让“观察”与“计算”深度融合,成为智能体一体两面的能力。

目前,SWE-Vision 的 开源代码 已在 GitHub 发布。这个仅 500 行左右代码的极简框架,为探索编程辅助的精确视觉理解这一方向,提供了一个绝佳的起点。如果你对如何结合代码能力来突破多模态模型的视觉瓶颈感兴趣,欢迎在 云栈社区 参与相关的技术讨论。

参考链接




上一篇:Token中文名之争:词元、模元、智元,谁才是大模型时代的度量衡?
下一篇:基于 Dynamatic 实践的深度分析:在 MLIR 之上构建 HLS 工具是否明智?
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-3-26 06:07 , Processed in 0.803363 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表