172、多模态Agent:视觉+语言+语音
今天凌晨两点,我被一个“看得到却听不懂”的Agent折磨得差点砸键盘。场景很简单:一个带摄像头的机械臂,要识别桌面上三种颜色的杯子,然后根据语音指令“把红色的那个递给我”完成抓取。视觉模型用的是CLIP,语音用的Whisper,语言链路走的GPT-4。单测全过,一到真机就翻车——机械臂稳稳地抓住了……空气,还在空中礼貌地悬停了三秒。
我盯着日志发呆,发现语音转出来的文本是“把红色的那个递给我”,视觉模型标出的目标框也确实框住了红杯子,但Agent最终拿到的坐标是(0.42, 0.17)——那是桌面左上角的一团阴影。问题出在哪?后来一步步拆,才发现视觉模型输出的不是“红杯子在哪儿”,而是“这个区域内最像红杯子的东西”,它把阴影当成了一等公民。语音和语言都正常,唯独视觉和行动之间缺了一层“空间语义对齐”。
多模态Agent不是把三个API串起来就完事。它本质上是让模型在异构信息之间建立“共同注意点”。视觉给的是像素分布,语音给的是声学特征,语言给的是符号序列,这三者在底层根本不是一个维度的东西。你硬要把它们塞进一个对话流里,就会遇到我这种“看得到却说不对位置”的灵异事件。
先说视觉和语言的缝合。很多人直接让视觉模型输出“图像描述”,再扔给LLM做推理。这么做能跑通demo,但真实场景会死得很难看。因为图像描述是“穿靴子的猫坐在沙发上”,而Agent需要的是“猫的质心在图像坐标系(0.35, 0.62)处,置信度0.9”。一个偏语义,一个偏几何。你让LLM去猜坐标,它只能根据“猫大概在沙发中间”这种模糊先验去编,编出来的数你敢信?
我自己的做法是给视觉模型加一个“空间投影头”。不是让模型直接回归坐标,而