NVIDIA SpatialClaw:让智能体把代码当动作接口,免训练干翻空间推理
事情是这样的。
前两天睡前刷到 NVIDIA Research 一个新东西,叫 SpatialClaw。第一眼我以为又是哪个大厂端着新模型出来秀肌肉,准备划走了,结果看到一行字愣了一下,这玩意儿一个参数都没重训,就把视觉语言模型在空间推理上的成绩拉到了 SOTA。
我得跟你唠唠这个,因为它戳中的那个点,我在工作里被反复教育过。
先说人话。视觉语言模型(VLM,就是那种你丢张图它能跟你聊的多模态大模型)这几年看图说话越来越溜,但有一类问题它一直做不好,空间判断。物体到底在哪、谁离谁更近、东西在画面里怎么动。你给它一段视频问「加热器离门最近的地方有多远」,它经常张口就来一个看着像那么回事、实际离谱的数。
这事儿一直被归因到模型本身不行,得喂更多 3D 数据、得重训、得上更大的几何先验。SpatialClaw 这帮人不这么看。他们说,卡点压根不在模型,在它怎么调用工具的那个接口。
听着挺玄对吧。我第一遍也是这反应。我用大白话把它讲清楚。
你可以把一个会用工具的智能体想象成一个人在解题,桌上摆着一堆仪器,深度估计器、分割器、几何计算器。问题不在于这些仪器准不准,而在于这个人能用什么姿势去操作它们。SpatialClaw 的研究团队就拿同一道题,试了三种操作姿势。
第一种叫单遍写代码。智能体一上来啪一段完整程序写完,跑一次出结果。问题是它在看到任何一张中间的深度图、任何一块分割掩码之前,就把整套策略定死了。相当于你蒙着眼把解题步骤全写好再睁眼,错了也没机会改。
第二种叫结构化工具调用,就是现在主流 agent 框架最常见的那套,一次调一个有固定签名的工具,调用 A 拿个结果,再调用 B。听着挺规整,但毛病在于上一步那块掩码、那张深度图的几何结果,很难顺手接到下一步去做计算。每个工具都是个黑盒进黑盒出,中间那些丰富的几何信息全卡在接口上传不过去。
第三种,也就是 SpatialClaw 干的事,叫代码即动作接口。智能体每一步就写一小段 Python,写进一个常驻的内核里,边看中间结果边改策略。
然后最让我没绷住的数据来了。模型不动、工具不动,只把动作接口从结构化工具调用换成写代码,Gemma4-31B 这个骨干模型的准确率从 56.7 涨到了 59.9。
好家伙,就改了个接口。
我盯着这组数字看了好一会儿。因为这种事我太熟了。
我平时的活儿,说得糙一点,就是给大模型搭脚手架,让模型真正能在生产环境里干活的那层工程,工具链、调度、上下文怎么喂、超时了怎么办,全是这些。干这行久了你会有个特别强烈的体感,很多时候模型能力根本没到天花板,是你给它的接口太憋屈,把它的手脚捆住了。你换个喂法、换个工具的暴露方式,同一个模型立马判若两人。SpatialClaw 等于把这个我嘴上常念叨、但很难量化的东西,拿 20 个基准测试给你拍在桌上了,接口就是杠杆。
好,那它具体长什么样。
核心是一个常驻的 Python 内核,你可以理解成一个一直开着、变量不会丢的 Jupyter 环境。内核里预装好了输入的视频帧和一组原语。关键设计在这儿,所有感知工具就是普普通通的 Python 可调用对象,它们吐出来的东西,掩码、深度图、相机几何、运动轨迹,也都是普普通通的 Python 变量。
这一点看着平平无奇,但它就是整件事 work 的命门。因为一旦感知结果变成了内存里的普通变量,智能体下一步想拿它干嘛都行,求个最近点、算个夹角、跨帧追踪一下,scipy、numpy 顺手就用上了。它不再受任何固定工具签名的限制。上一段我说的「几何信息卡在接口上传不过去」,到这儿就通了。
这个内核对外暴露六个入口,我挑几个有意思的说。InputImages 装采样到的帧;tools 是感知和几何原语的集合;show() 能把一张图塞进智能体下一轮的上下文里,这个设计有点子牛逼,等于让智能体「先看一眼再算」,跟人解题先瞄一眼草图一个道理;vlm 把查询甩给一个独立的 VLM 会话;最后 ReturnAnswer() 交卷。
真正干脏活的是两个感知工具。tools.Reconstruct 包的是 Depth Anything 3,丢一组帧进去,给你逐帧深度、相机内参外参、还有稠密点云。tools.SAM3 包的是 SAM 3,你用文字、点、框任意一种提示,它给你抠出图像或者视频里的掩码。剩下还有几个轻量工具,几何、掩码、时间、图、绘制,凑齐一套趁手家伙。
我把官方那段示例代码贴出来,你一看就懂这套设计的妙处,还是那道加热器和门的题。
# 先重建整个场景,再在同一遍视频里把两个物体都分割出来
recon = tools.Reconstruct.Reconstruct(InputImages)
seg = tools.SAM3.segment_video_by_text(["radiator heater", "door"])
show(seg.visualize(1)) # 先看一眼掩码抠对没有
# 用 KD-tree 求最近点距离,而不是偷懒算质心
pts_h = seg.get_masked_points(recon, frame=1, object=0) # object 0 = 加热器
pts_d = seg.get_masked_points(recon, frame=2, object=1) # object 1 = 门
dists, _ = scipy.spatial.KDTree(pts_d).query(pts_h, k=1)
ReturnAnswer(float(dists.min()))
你注意到那行注释没有,「用 KD-tree 求最近点,而不是偷懒算质心」。这就是代码接口最骚的地方。问题问的是两个物体表面的最近距离,质心距离是错的,得在两堆点云之间做最近邻搜索。在结构化工具调用那套里,你很难临时塞进一个 KD-tree;但在代码接口里,智能体自己从问题里就把 scipy.spatial.KDTree 给掏出来了。距离题用 KD-tree 和向量范数,方向题用点积,全程没有人给它写死「遇到距离题就走这条路由」。它是真的在根据题目临场组合工具。
这种「临场组合」就是 SpatialClaw 涨分的大头。研究团队拿了个 LLM 当裁判去归因,结论是代码组合贡献了 52.2% 的胜出,控制流占 19.5%,剩下的跟接口没啥关系。赢就赢在它能像写程序一样把感知能力拼起来、改起来。
整个流程跑在一个五阶段循环里,先规划、再生成代码、执行代码、组装反馈、提交答案。有个细节我觉得做得挺稳,规划器起草策略的时候是看不到图的,逼它先想清楚思路而不是被画面带跑;然后主智能体每步写一个 Python cell,执行前还有一个静态 AST 检查器拦一道,不安全的代码直接拒掉。循环要么等到 ReturnAnswer(),要么跑满 30 步收手。工程上是 LangGraph 编排加常驻 Jupyter 内核,骨干模型用 vLLM 服务,感知挂在一个 FastAPI 的 GPU 服务后面。这套搭法,搞过 agent 工程的人看一眼会有种亲切的踏实感,没有花活,全是经得起线上拷打的组件。
说回成绩。20 个空间基准平均 59.9%,比近期那个叫 SpaceTools 的空间智能体高 11.2 分,比啥工具都不用的基线高 6.5 分,比结构化工具调用高 3.2 分。而且增益最猛的地方特别说明问题,动态和多视角任务。在 Gemma4-31B 上,DSI-Bench 涨了 17.6 分,MindCube 涨了 15.3 分。这俩是什么任务?是那种得跨好几帧、跨好几个视角,把几何计算一环扣一环串起来才能做的题。恰恰是最吃「能不能把多步结果接着算」的场景,代码接口的优势被放到最大。这逻辑是自洽的,不是数字凑巧好看。
更让我觉得这事儿靠谱的是,这套增益能迁移。从 26B 到 397B,六个不同的骨干模型,换上代码接口都涨。这说明他们摸到的不是某个模型的脾气,是一条更普适的规律。
讲到这我得踩个刹车,免得你觉得我在无脑吹。
它有两个很硬的天花板,官方自己写得明明白白。第一,感知就是上限。代码接口再灵活,说到底也是在更好地编排 Depth Anything 3 和 SAM 3 给出的东西;这俩要是把某个物体的深度估错了、掩码抠飞了,下游的智能体再聪明也是在错的数据上精算,garbage in garbage out。所以 SpatialClaw 没有创造新的感知能力,它是把现有感知能力的潜力榨得更干。第二,许可证是非商用的。你想拿它直接塞进产品里去赚钱,这条路暂时走不通,目前更适合拿来做研究、做验证、或者借它的思路改造自己手里的 VLM。
那对咱们这些天天跟 agent 打交道的人,能拿走点啥实在的?
我自己琢磨下来,最值钱的不是 SpatialClaw 这个具体框架,是它把一个常被忽略的判断给坐实了,当你的 agent 在某个任务上死活做不好,先别急着换更大的模型、更别急着喊「得微调」。回头看一眼你给它的动作接口,是不是太死了,是不是把工具的中间结果都闷在黑盒里没法二次加工,是不是逼着模型在看不到任何反馈的情况下一次性把策略定死。很多时候,把工具的输出变成模型能自由摆弄的对象、让它能边看边改,比你折腾模型本身的性价比高得多。
这话我以前讲,多少有点像玄学,靠的是工程直觉。现在我能指着这篇论文说,看,20 个基准、6 个骨干、+11.2 分,不是我瞎说。
如果你想自己上手,论文、项目主页和代码我都放下面,setup 脚本一条龙,配好 key 或者自己起个 vLLM 就能跑起来一个基准。
- 论文 https://spatialclaw.github.io/static/pdfs/spatialclaw.pdf
- 项目主页 https://spatialclaw.github.io/
- 代码仓库 https://github.com/NVlabs/SpatialClaw
- 来源报道(MarkTechPost)https://www.marktechpost.com/2026/06/19/nvidia-ai-introduce-spatialclaw-a-training-free-agent-that-treats-code-as-the-action-interface-for-spatial-reasoning
我现在还没在自己的活儿里真正接过 SpatialClaw,纯属看完手痒。但那个「先把感知结果变成普通变量,再让模型像写程序一样自由组合」的思路,我已经在想能不能挪到别的工具调用场景里去了。
写到这儿我突然想起一件事。我们这行老在追模型的参数、追榜单的分数,好像智能这东西全堆在权重里。但 SpatialClaw 提醒了我,很多被锁住的能力,不在模型深处,就在那道你天天路过、却懒得多看一眼的接口上。
灯一直亮着,只是你站在门外,没找到门把手在哪。