
1. 从屏幕里爬出来AI-Agent 为什么必须走向物理世界这两年做 AI-Agent 的人都有一个共同感受纯软件层面的工具调用已经卷到天花板了。你让 Agent 去查天气、订机票、写代码、调 API这些事它做得越来越溜但一旦让它去开个门、拧个瓶盖、把桌上的杯子递过来整个系统立刻抓瞎。问题不在于模型不够聪明而在于数字世界的输出是 token物理世界的输出是力矩这两者之间隔着一道巨大的鸿沟。我最早接触 AI-Agent 是从工具调用Tool Use / Function Calling入手的。那时候的思路很直接给模型一堆 API 描述让它自己决定调哪个、传什么参数。这套范式在信息检索、流程自动化上确实好使但它有个根本局限——所有可调用的工具都是人预先封装好的。换句话说Agent 能做的事永远超不出工程师写好的那些函数。你想让它操作一个从未见过的物体对不起没有对应的 API。具身执行Embodied Execution要解决的就是这个问题。它让 Agent 不再依赖预定义的工具接口而是直接通过视觉感知环境、通过语言理解任务、通过动作输出控制物理实体。这里面最核心的技术载体就是VLAVision-Language-Action模型——把视觉、语言、动作统一到一个模型里输入是摄像头画面加自然语言指令输出是机器人关节的控制序列。这篇文章适合谁看如果你是做 AI-Agent 应用开发的想了解怎么从纯软件的工具调用扩展到物理执行如果你是机器人方向的同学想知道 VLA 模型到底怎么训练、怎么评测、怎么从仿真迁移到真机或者你只是对这个方向好奇想搞清楚 Sim2Real、LIBERO 这些热词到底在说什么——那这篇内容应该能给你一个比较完整的图景。我会尽量把每个环节的“为什么”讲清楚而不只是罗列概念。2. 工具调用与具身执行两种范式的本质差异2.1 工具调用的能力边界在哪里工具调用的本质是结构化输出匹配。模型看到用户请求从预定义的函数列表里选一个然后按照 JSON Schema 填充参数。这个过程的核心能力是语义理解和参数映射不涉及任何物理交互。举个例子你给 Agent 配了这些工具{ name: get_weather, parameters: {city: string, date: string} }用户说“明天北京天气怎么样”模型输出get_weather(city北京, date明天)完事。整个链路是确定的、可验证的、无副作用的查询类操作。即便是控制类操作比如“打开客厅的灯”也是通过智能家居 API 完成的Agent 本身不直接产生物理动作。这套范式的优势很明显安全、可控、可测试。但劣势同样明显能力上限被工具集锁死。你没法让一个只会调 API 的 Agent 去完成“把散落的积木按颜色分类放进盒子里”这种任务因为这里面涉及连续的视觉反馈、精细的运动控制、以及对不确定环境的实时适应。2.2 具身执行多了哪些硬骨头具身执行把 Agent 扔进物理世界后至少多了四层挑战第一层是感知的不确定性。仿真环境里物体位置是精确的浮点数真机上摄像头有噪声、光照会变化、物体会被遮挡。VLA 模型必须在这些噪声下仍然输出合理的动作。第二层是动作的连续性。工具调用的输出是离散的选哪个函数、传什么参数而机器人控制是连续的高维向量。一个 7 自由度的机械臂每个时刻要输出 7 个关节角度或末端位姿增量频率通常在 10Hz 到 50Hz 之间。这意味着模型不能只输出一个动作而要输出一个动作序列Action Chunk。第三层是时间的耦合性。当前动作会影响未来状态一步走错可能导致后续全盘失败。这跟工具调用那种“每次调用独立”的模式完全不同。第四层是 Sim2Real 的鸿沟。在仿真里训练得好好的策略搬到真机上可能直接崩掉。原因包括动力学建模误差、传感器噪声分布不同、执行器延迟等。2.3 为什么 VLA 成了主流技术路线在 VLA 出现之前机器人领域的主流做法是分模块视觉感知用一个模型语言理解用另一个运动规划再用一个。这种 pipeline 的问题是误差逐级累积而且模块之间的接口需要人工设计泛化能力很差。VLA 的思路是端到端一个大模型同时处理视觉输入、语言指令和动作输出。这样做的好处是联合表征视觉和语言在同一个语义空间里对齐模型能理解“红色的杯子”和图像中哪个区域对应。泛化能力见过足够多的任务后模型能组合出未见过的指令-动作映射。数据效率可以利用大规模的视觉-语言预训练数据再在机器人数据上微调。目前主流的 VLA 模型架构通常包含三个部分视觉编码器如 ViT、语言模型主干如 LLaMA 系列、动作解码头如 Diffusion Policy 或离散 token 预测。训练时先把视觉和语言对齐再通过行为克隆Behavior Cloning学习动作分布。3. VLA 模型的核心技术拆解3.1 视觉-语言对齐是怎么做的VLA 的第一步是让模型看懂画面和指令之间的关系。这部分通常复用已有的视觉-语言模型VLM比如 CLIP、SigLIP 或者 LLaVA 系列的架构。具体做法是视觉编码器把图像切成 patch每个 patch 变成一个 token语言指令也 tokenize 成序列然后这些 token 一起送进 Transformer通过注意力机制让视觉 token 和语言 token 互相关注。训练目标是让模型能回答“图中哪个物体是红色的杯子”这类问题。这一步的关键在于空间信息的保留。很多 VLM 为了做分类或问答会把视觉特征压缩成全局向量但机器人需要知道物体的精确位置。所以 VLA 通常保留 patch 级别的特征或者额外加一个空间定位头。3.2 动作解码从 token 到关节力矩动作解码是 VLA 区别于普通 VLM 的核心。模型不仅要理解场景还要输出具体的动作。目前主流方案有两种方案一离散 token 预测。把连续的关节角度离散化成若干个 bin每个 bin 对应一个 token然后用语言模型的方式预测动作 token 序列。这种方案实现简单可以直接复用 LLM 的解码逻辑但精度受限于离散化的粒度。方案二Diffusion Policy。用扩散模型生成动作序列。输入是当前观测和语言指令输出是一段未来动作。扩散模型的优势是能建模多模态的动作分布同一个任务可能有多种完成方式生成的动作更平滑。缺点是推理速度较慢需要多步去噪。实际项目中我见过不少团队采用混合方案用离散 token 做粗粒度的动作规划再用扩散模型做精细的动作生成。这样兼顾了速度和精度。3.3 动作分块与时间集成机器人控制有一个很实际的问题如果每个时刻都让模型推理一次计算量太大而且相邻时刻的输出可能抖动。解决方案是动作分块Action Chunking模型一次输出未来 K 步的动作然后执行其中一部分再重新推理。这里有个关键参数叫时间集成Temporal Ensembling。假设模型每次输出 16 步动作但只执行前 8 步就重新推理那么同一时刻会有多个预测结果重叠。时间集成就是把这些重叠的预测加权平均让动作更平滑。我实测下来动作分块的长度对性能影响很大。太短了推理频率高、计算吃不消太长了动作不够灵活、遇到突发情况反应慢。一般 8 到 16 步是比较稳妥的选择具体要看任务的控制频率要求。3.4 训练数据的来源与处理VLA 的训练数据主要有三个来源仿真数据在 Isaac Sim、MuJoCo、PyBullet 等环境里批量生成。优势是量大、标注精确、可以并行采集。劣势是存在 Sim2Real 鸿沟。真机遥操作数据人通过手柄或动捕设备遥控机器人完成任务记录观测和动作。优势是真实、可靠。劣势是采集成本高、速度慢。人类视频数据从公开视频里提取动作信息。优势是量大。劣势是动作标注困难需要额外的姿态估计和重定向。实际训练时通常是混合使用先用仿真数据做预训练再用真机数据微调。比例大概是 10:1 到 5:1具体取决于任务复杂度。数据处理阶段有几个容易踩的坑一是动作空间归一化不同机器人的关节范围不同必须统一到 [-1, 1] 或标准正态分布二是观测对齐摄像头帧率和控制频率往往不一致需要做时间戳对齐和插值三是语言指令的多样性同一个任务要准备多种表述否则模型会过拟合到特定句式。4. Sim2Real从仿真到真机的关键一跃4.1 域随机化让模型见过足够多的“变体”Sim2Real 最经典的手段是域随机化Domain Randomization。核心思想很简单既然仿真和真机有差异那就在仿真里随机化各种参数让模型见过足够多的变体从而对真实环境中的差异免疫。具体随机化哪些东西我整理了一个常用清单随机化维度具体参数推荐范围视觉光照强度、色温、阴影强度 0.5-2.0 倍视觉相机位置、角度位置 ±5cm角度 ±10°视觉纹理、背景随机贴图物理物体质量标称值 ±30%物理摩擦系数0.1-1.0物理关节阻尼标称值 ±50%控制执行器延迟0-50ms控制观测噪声高斯噪声 σ0.01-0.05域随机化的关键是范围要合理。随机化太窄模型泛化不够随机化太宽模型学不到有效策略。我的经验是先从窄范围开始逐步扩大观察真机表现再调整。4.2 系统辨识把真机参数“搬”进仿真域随机化是“让模型适应差异”系统辨识则是“减少差异本身”。做法是在真机上跑一些标定动作测量实际响应然后反推仿真参数。比如测量机械臂的关节响应给一个阶跃信号记录实际角度变化曲线拟合出阻尼和惯量。再比如测量摄像头拍标定板计算内参和外参更新仿真里的相机模型。系统辨识能把 Sim2Real 的差距缩小很多但它有个前提你得有真机可以操作。如果真机还没到位就只能先靠域随机化撑着。4.3 真机微调最后一步不能省不管仿真做得多好真机微调这一步基本省不掉。通常的做法是仿真预训练 → 真机采集少量数据 → 微调动作头视觉和语言主干可以冻结。真机数据不需要太多每个任务 20 到 50 条演示往往就够了。关键是覆盖失败模式如果模型在某个场景下总是失败就针对性地补几条数据。微调时学习率要调小一般是预训练的 1/10 到 1/100。否则容易把预训练学到的泛化能力冲掉。5. LIBERO 评测VLA 模型的“高考”5.1 LIBERO 是什么为什么重要LIBERO 是目前 VLA 领域最常用的评测基准之一。它包含四个子集LIBERO-Spatial空间关系、LIBERO-Object物体操作、LIBERO-Goal目标条件、LIBERO-Long长序列任务。每个子集有若干任务每个任务提供人类演示数据用于训练然后在仿真环境里评测成功率。为什么 LIBERO 重要因为它提供了标准化的对比基准。你说你的 VLA 模型好好在哪里在 LIBERO 上成功率多少跟基线比提升了多少这些数字是可复现、可对比的。5.2 在 LIBERO 上测试的完整流程我把自己跑 LIBERO 的流程整理一下供参考第一步环境搭建。LIBERO 基于 MuJoCo 和 RoboSuite需要先装好依赖。Python 版本建议 3.8 到 3.10太高了有些包不兼容。pip install libero robosuite mujoco第二步数据准备。LIBERO 提供了每个任务的人类演示数据格式是 HDF5。你需要写一个 DataLoader 把观测图像本体状态和动作读出来做归一化。第三步模型适配。你的 VLA 模型需要适配 LIBERO 的观测空间和动作空间。LIBERO 的观测通常包含一个第三人称视角图像和一个手腕视角图像动作是 7 维6 维末端位姿增量 1 维夹爪。第四步训练。用行为克隆损失训练通常是 L1 或 L2 损失加上动作分块。训练 epoch 数取决于模型大小一般 50 到 200 个 epoch。第五步评测。每个任务跑 20 到 50 次记录成功率。注意要固定随机种子否则结果不可比。第六步分析失败案例。把失败的 rollout 录下来看是感知问题、规划问题还是控制问题。这一步往往比训练本身更有价值。5.3 评测中的常见陷阱跑 LIBERO 有几个坑我踩过观测归一化不一致训练时用的均值和方差评测时必须用同一套。我见过有人训练用 ImageNet 统计量评测忘了改结果直接崩。动作裁剪模型输出的动作可能超出合法范围必须裁剪。但裁剪范围要跟训练时一致。评测次数太少跑 5 次成功 3 次成功率 60%但置信区间可能覆盖 20% 到 90%。至少跑 20 次才有统计意义。任务顺序影响有些环境有状态残留任务之间要 reset 干净。6. 实操心得与避坑指南6.1 模型选型不是越大越好VLA 模型参数量从几十 M 到几 B 都有。我的经验是先跑通小模型再考虑放大。一个 100M 左右的模型在 LIBERO 上就能达到不错的效果推理速度还快。参数量上去之后训练成本、推理延迟、部署难度都是指数级增长。如果非要用大模型建议用 LoRA 或者 Adapter 做参数高效微调别全量微调。6.2 数据质量比数量重要我见过太多团队花大力气采集了几万条数据结果模型效果还不如别人几千条。问题往往出在数据质量上演示不一致同一个任务不同人的操作方式差异太大模型学混了。动作抖动遥操作设备本身有噪声采集的动作不平滑。语言标注随意指令写得太简略或太复杂跟实际任务对不上。建议采集数据前先定好操作规范采集后做平滑滤波和异常剔除。6.3 推理部署的实时性VLA 模型部署到真机上最大的挑战是推理速度。一个 1B 参数的模型在消费级 GPU 上单次推理可能要 100ms 以上而控制频率要求 10Hz 意味着每 100ms 必须出结果。这还没算图像预处理和后处理的时间。优化手段包括模型量化FP16 或 INT8、推理引擎优化TensorRT、动作分块减少推理次数。我实测下来动作分块到 16 步、配合 FP16 量化基本能满足 10Hz 的控制要求。6.4 安全兜底不能省物理世界跟数字世界最大的区别是出错是有代价的。Agent 调错 API 最多返回个错误码机器人动作错了可能撞坏东西甚至伤人。必须有的安全机制包括力矩限制超过阈值直接断电、工作空间限制不让机械臂进入危险区域、急停按钮物理的不是软件模拟的。这些是底线不能因为模型效果好就省掉。7. 这个方向接下来还能怎么玩从工具调用到具身执行AI-Agent 的能力边界正在快速扩展。我个人的判断是接下来几个方向值得关注多模态指令的融合。现在大部分 VLA 还是以语言指令为主未来可能会融合手势、 gaze、甚至脑电信号。想象一下你指一下桌上的杯子再给个眼神机器人就知道你要它拿那个杯子。长序列任务的规划。LIBERO-Long 已经在做这个方向但真实世界的长序列任务复杂度远高于仿真。怎么把高层规划LLM 负责和低层控制VLA 负责结合起来是个开放问题。跨具身泛化。同一个模型能不能控制不同形态的机器人机械臂、四足、人形动作空间完全不同。目前有一些工作在做跨具身的行为克隆但离实用还有距离。在线学习与适应。现在的 VLA 基本是离线训练、部署后冻结。如果能让模型在部署后根据反馈持续学习适应新环境和新任务那实用性会大幅提升。我在实际项目里的体会是这个方向最大的门槛不在算法而在工程链路的完整性。从数据采集、仿真环境搭建、模型训练、到真机部署和评测每个环节都有大量细节。算法论文里一句话带过的东西工程上可能要调好几天。所以如果你打算入坑建议先把一个简单的任务比如抓取固定位置的物体完整跑通再逐步增加复杂度。别一上来就搞长序列、多物体、复杂指令那样很容易卡在某个环节出不来。最后分享一个小技巧调试 VLA 模型时先把动作头的输出可视化出来跟人类演示的动作对比。如果动作头输出的轨迹跟演示差很远那问题在训练如果轨迹差不多但真机执行失败那问题在 Sim2Real 或者控制接口。这个二分法能帮你快速定位问题所在。