
1. 项目概述与核心思路1.1 从语言模型的“临场发挥”说起做机器人学习和具身智能这个方向的人这两年应该都有一个共同的感受传统的“一任务一训练”路线越来越走不动了。一个抓取模型换个物体就要重新调参一个导航策略换个房间就失效更别提把几十上百个任务堆在一起训练时数据和算力的消耗让人头皮发麻。我们团队在这条路上踩了不少坑直到把目光转向了大模型领域那个有趣的特性——In-Context Learning中文通常叫“上下文学习”或“语境学习”。所谓In-Context Learning最早是NLP那边的概念。研究人员发现大语言模型在推理的时候不需要更新任何参数只需要在输入的提示词里放几个示例模型就能“现场学会”一个新的任务模式。比如你给模型看两三个“把这句话翻译成法语”的例子它接下来就能处理同类翻译请求。整个过程没有梯度下降没有backward模型权重从头到尾没动过纯粹靠的是输入内容的编排。我当时就在想如果把这个机制搬到机器人身上呢机器人的视觉-语言-动作模型VLA模型能不能也这样——不需要为每个新任务重新收集数据、重新微调而是把任务的示例、环境的信息、指令的说明统统塞进上下文中让机器人“照葫芦画瓢”地执行答案是肯定的而且效果比我们预想的好得多。In-Context Learning for Robotics这个方向说白了就是让机器人具备那种“给两个例子就能干活”的临场应变能力。它适合谁适合搞具身智能、机器人操作、多模态模型应用的研究人员和工程师也适合做产品原型验证的开发者。它能解决的问题很直接机器人不再是一个只能执行预设任务的“呆子”而是在面对新任务时能通过上下文中的示例快速调整行为。1.2 机器人版的上下文学习和NLP有什么不一样如果只是把语言模型里的ICL机制直接套到机器人上那太天真了。机器人面临的是一个物理世界有空间关系、有物体属性、有运动约束光靠语言描述远远不够。我做了几个月的实测后最大的感受是机器人的In-Context Learning要处理的信息模态复杂得多。语言模型处理的是纯文本序列而机器人要同时消化视觉画面、语言指令、力觉反馈还要输出连续的动作序列。这意味着上下文中的“示例”不能只是文字描述而应该是多模态的——比如一段示教视频、一张目标状态的图片、一句指令描述或者是三者组合的“任务片段”。举个我们实验中的具体例子。测试任务是“把红色积木放到蓝色杯子里”。我们在上下文中给模型提供的内容包括一段人类演示这个操作的短视频一句指令的自然语言描述环境当前状态的视觉图像模型读了这些上下文之后面对一个新的场景——积木位置挪了、杯子角度变了——依然能稳定执行同样的任务逻辑。这种能力用传统方法很难实现但放在上下文学习的框架里它显得很自然模型不是记住了一个具体动作序列而是理解了“红色积木”和“蓝色杯子”之间的关系并把这种关系泛化到新的布局中。2. 核心原理解读为什么上下文学习能驱动机器人2.1 In-Context Learning的工作机制要真正用好这个技术不能只停留在“放几个示例进去”的层面得搞清楚它的运行逻辑。从本质上讲上下文学习是模型在推理阶段的一种“模式匹配”能力。模型在预训练阶段见过海量的“输入-输出”配对数据当你把几个示例和待求解的问题拼接在一起时模型能够识别出示例背后的结构规律把这个规律投射到当前问题上。我习惯用一个类比来解释这个机制。好比一个新员工入职你不可能现场给他培训三个月。但如果你给他看两份做得好的报表模板告诉他“照这个格式来”他就能立刻上手做第三份。上下文里的示例就相当于模板模型要做的不是学会“做报表”这个宏大技能而是抓住“格式”这个局部模式。底层实现上当前主流做法基于Transformer架构的注意力机制。当示例被编码进上下文后模型的自注意力层会在示例和查询之间建立关联。关键在于示例中的“输入→输出”映射关系会在注意力计算中被隐式地编码模型相当于在推理时重新组织了自己内部的知识结构。那这件事对机器人意味着什么意味着我们理论上可以用同样的机制让一个VLA模型在看到“示例轨迹当前观测”后直接生成动作序列而不需要为每个任务单独微调模型权重。这就是In-Context Learning for Robotics最核心的价值——把“训练时学习”转化为“推理时学习”。2.2 机器人场景下上下文信息的三种形式在实操中我们发现上下文信息可以以三种形式注入到机器人模型中各有各的适用场景。第一种语言指令视觉示例。这是最轻量的方案。上下文中包含任务的文本描述和一到两帧目标状态图片。比如“把苹果放到盘子里”这句话加上一张苹果在盘子里的照片。模型通过对比当前画面和目标画面的差异推算出需要执行的操作。这种形式适合任务目标明确、环境变化小的场景我们的成功率在固定桌面上能达到85%左右。第二种多步演示轨迹。稍微复杂一点上下文中加入人类示教的完整轨迹包括每一阶段的RGB图像和动作标签。模型需要理解的不只是目标状态还包括达成目标的路径。它适合需要特定操作技巧的任务比如“拧开瓶盖”因为光看目标状态瓶盖被拧开无法推算出“捏住、旋转、上提”的具体动作序列。有了完整轨迹模型就能学到手法细节。这种形式的成功率在我们实验的25类操作任务中平均在78%左右。第三种环境状态描述。更高级一点的玩法是上下文中不只包含任务的信号还加入环境本身的属性。比如桌子高度、物体材质、夹爪类型、可活动范围等元数据。这些信息以参数化的方式注入上下文让模型在执行时能“感知”物理约束。对于跨环境部署特别有用——同样是“拿起水杯”在桌面高度60厘米的A环境和75厘米的B环境下机械臂的运动轨迹在Z轴上的补偿是完全不同的。三种形式可以组合使用。我们在实际测试中发现同时注入语言指令两帧视觉示例环境描述在成功率上比单一形式的方案高出大概15到20个百分点。原因不难理解信息模态越丰富模型对任务意图的歧义越小动作预测的确定性就越高。2.3 与传统机器人学习范式的对比为了说明上下文学习在机器人领域的定位我画了一张脑内对比图每次给别人讲核心技术时都用它开场。传统的机器人学习范式有两条路要么是Imitation Learning模仿学习——收集大量人类示教数据训练一个策略网络模型直接输出动作要么是Reinforcement Learning强化学习——设计奖励函数让机器人在环境中大量试错通过探索学习最优策略。上下文学习和这两者最大的区别在于“学习的时点”。模仿学习和强化学习都是“训练时学习”模型在部署之前已经完成了知识固化参数一冻结现场能不能干好全凭训练质量。新任务来了对不起重新收集数据重新训练。上下文学习则是“推理时学习”固定的模型权重在推理阶段通过输入内容的变化来适应新任务。你不需要为每个新任务重复训练只要换一批示例放进上下文里同一个模型就能完成不同的任务。卡片对比对比维度模仿学习/强化学习In-Context Learning学习时点训练阶段推理阶段每次新任务的开销重新收集数据重新训练重新编排上下文参数是否更新是否对数据量的依赖高需要大量任务数据中等需要多样化预训练数据任务泛化能力取决于训练覆盖度取决于模型规模和示例表达力适合场景高频重复任务、场景固定多任务切换、场景动态变化这个表格揭示了一个关键趋势如果我们能构建足够强大的VLA模型上下文学习完全可能成为机器人部署的主要范式。因为现实世界中的任务分布是长尾的高频任务就那么几个剩下的全是低频、个性化的长尾任务。为每个长尾任务重新训练模型成本不可接受。但通过上下文学习在输入里塞几条示例就行成本几乎可以忽略。3. 实操过程与核心环节实现3.1 模型选型与环境搭建在介绍我们具体的实操流程之前先聊聊硬件的选择。整个项目的核心是VLA模型市面上能直接用的开源方案有几个RT-2是Google的经典作品但权重没有完全开放OpenVLA是开源社区比较活跃的项目基于LLaMA-2架构改造同时处理视觉和语言输入还有ByteDance的GR-1以及一些基于LLaVA架构扩展的机器人模型。我们最后选了OpenVLA作为基底模型。原因是它有32亿参数量在学术级的单卡A100上能跑推理且支持LoRA微调作为备选方案。对我们这种资源有限、但又想验证上下文学习效果的团队来说它是平衡性能和可定制性的最优选择。环境方面需要注意的细节我多说几句。除了基础的PyTorch和Transformers库OpenVLA的推理依赖专门的流程先用SigLIP视觉编码器对RGB图像做特征提取再通过投影层把视觉特征映射到语言模型的语义空间最后用autoregressive的方式生成动作token。整个链路如果用CPU跑一个动作预测要等30秒以上完全没法用。我们的配置是单张A100 80G显卡单次推理大约在1.2秒到1.8秒之间基本满足实时控制的要求。3.2 核心任务定义与上下文编排我们设计的核心测试任务是“桌面物体分类摆放”要求机器臂把桌面上随意放置的几类物品分别移动到对应的目标区域。这个任务看起来简单但包含了物体识别、空间推理、抓取规划和放置策略等多重挑战非常适合验证上下文学习的效果。任务开始前我们需要在上下文中构造三类信息。首先是任务指令。我们用自然语言明确表达动作意图比如“把红色方块放到左上角的红色区域把蓝色圆柱放到右下角的蓝色区域”。注意这个指令必须同时在语言和视觉两个层面和目标区域建立对应关系否则模型容易混淆。其次是视觉示例。这一步很关键我们会给模型展示两到三个“已完成状态”的图像。注意不是展示过程轨迹图而是直接展示目标状态——红色方块已经在红色区域里、蓝色圆柱已经在蓝色区域里。模型的训练任务就是学习“当前画面”到“目标画面”的转化方式即推断出实现这个转化需要的动作序列。最后是环境上下文。我们会在上下文中注入一些元信息比如机械臂的型号对应的运动学参数、夹爪的最大开口宽度、桌面高度、物体类型标签等。这些信息以纯文本形式拼接在指令前后。调试中最容易踩的坑是上下文拼接顺序。我们试过多种排列组合发现把“任务指令”放在最前面后面紧跟“视觉示例”最后附上“环境信息”效果最好。如果把指令放在后面模型容易把环境描述误认为指令执行目标导致动作预测偏差。3.3 上下文示例数量对成功率的影响关于上下文示例放多少个的问题我们做了系统性的对比实验。固定其他变量只改变视觉示例的数量从0到5个递增每组重复50次测试。测试的结果很有意思。没有示例的情况下模型处理新任务的准确率只有42%基本等于瞎猜。放一个示例准确率跳到63%提升显著。放两个示例准确率到71%。放三个示例准确率到76%。放四个和五个示例准确率分别到78%和79%提升开始变得平缓。从数据里能看出示例数量的边际收益递减明显。前两个示例提供了质的飞跃——让模型理解了任务的基本模式到第三个示例之后模型已经能从已有示例中提取充分的结构信息再增加示例只是锦上添花。结合模型本身的上下文窗口限制OpenVLA支持的最大token数是4096我们建议在实际部署时采用“2到3个示例”的配置既能保证较高的任务成功率又能将上下文的token占用控制在合理范围内留下足够的空间给视觉特征和环境描述。3.4 动作序列生成与闭环控制上下文学习模型输出的是离散动作token需要经过解码模块转换成实际的控制信号。在OpenVLA里动作被离散化为256个bin值每个维度包括末端位置的x、y、z坐标、绕各轴的旋转角、夹爪开合度都有独立的bin范围。我们遇到的一个典型问题是原始动作输出的抖动比较明显可能上一帧输出末端位置在坐标的0.4米处下一帧直接跳到0.55米。直接把这种信号下发到机械臂会导致剧烈抖动严重的会把桌上的物体碰翻。解决思路是在解码层加上动作平滑。我们用了一阶低通滤波对每个维度的动作信号做时间序列上的平滑处理smoothed_action alpha * raw_action (1 - alpha) * previous_actionalpha取0.7左右衰减系数取0.3左右。实际测试下来动作序列的连续性提升明显。另一个关键点在闭环控制——模型单次推理只输出未来一段固定时长大约2秒的动作轨迹执行完成后需要重新获取当前视觉状态再次推理下一段轨迹。这就是一个“感知-推理-执行-再感知”的闭环循环。我们在控制频率上做了降频从模型的推理频率大约1Hz匹配到机械臂的控制频率10Hz到20Hz中间用插值补齐。4. 常见问题与排查技巧实录4.1 模型对上下文示例过拟合的识别与规避头一个月实验的时候我们遇到了一个诡异的现象。在“红色方块放红色区域”这个任务上模型表现得很好几乎百分之百成功。但一旦把任务换成“蓝色方块放蓝色区域”成功率掉到了三成以下。排查了很久才定位到问题。原来我们一开始的示例库中红色方块的示例占据了绝大多数。模型并不是学会了“按颜色分类”这个通用规则而是学会了“见到红色方块就放到左上角”这种具体映射。这就是典型的上下文过拟合——模型在注意示例和当前输入的相关性时过度偏爱高频出现的样例而忽略了任务的通用结构。规避方法并不复杂核心是提高示例的多样性。我们重建了示例库确保每种颜色、每种物体形状的组合都有至少两个示例并且示例之间保持差异同一个任务有的示例展示从左侧抓取有的展示从右侧抓取。这样做的效果立竿见影模型在新任务上的成功率明显回升而且在从未见过的颜色组合上也有一定的泛化能力。提示如果你发现在某个任务上上下文学习效果不佳先检查你的示例库是否太单一。模型看到的东西越单调它能理解的结构就越浅。4.2 视觉上下文与语言指令冲突时的优先级处理第二个高频问题来自视觉和语言信息的不一致。有一次我们在上下文中放了一个视觉示例——茶杯放在托盘中央但同时语言指令写的是“把茶杯放到托盘左上角”。模型面对两种冲突的信息时行为变得很奇怪它有时候按视觉示例执行把茶杯放到中间有时候按语言指令执行放到左上角甚至有一次它先放到中间再移到左上角。这个问题的根源在于模型对“视觉示例”和“语言指令”的语义层级理解是模糊的。它区分不了哪一个是真正的“目标”哪一个是“示例”。我们的解决方案是在上下文结构上做文章引入显式的分隔标记和优先级提示。在构建上下文时我们在指令部分加上优先级前缀比如“最高指令”、“示例仅供参考”来消除歧义。格式大致如下[System] 你是机械臂控制模型任务指令优先级最高视觉示例仅供参考。 [User] 最高指令把茶杯放到托盘左上角。示例图像中展示的是另一种可能的摆放方式仅作风格参考。 [Visual] [示例图片1] [Visual] [示例图片2]经过这种显式的优先级编码后模型的冲突处理能力提升明显。在50次对抗性测试中视觉示例和语言指令有意冲突模型有46次正确执行了语言指令这个结果说明上下文的内部结构对模型的决策有直接影响不只是信息内容本身。4.3 长指令场景下的上下文长度管理与性能平衡还有一类实际问题来自指令本身的长度。当任务复杂到一定程度比如“先拿起红色方块跳过中间的蓝色障碍物把方块放到托盘上再回到初始位置”对应的语言描述、视觉示例、环境信息等整体上下文的token量会快速上升。我们验证过一个极端情况上下文总长度达到3800多token时单次推理时间从1.4秒爆增到3.2秒成功率反而下降了11个百分点。原因不难理解上下文越长模型内部的注意力计算越复杂有效信息的信噪比下降动作预测的准确度也随之降低。我们在实践中总结了一套上下文精简策略。指令部分去掉一切冗余修饰词保留动作和对象的必要描述。环境信息只保留两个最重要的元数据夹爪类型和桌面高度其他信息能省则省。视觉示例从3张完整RGB图缩减为2张并且把图像分辨率从224×224压缩到168×168。经过这些优化后上下文总token控制在2200以内推理时间恢复到1.5秒左右成功率回到76%。这套策略对于在真实物理环境中部署机器人特别关键因为推理速度直接影响控制频率控制频率不足会导致动作卡顿严重的可能导致机械臂在运动中途停顿引发安全隐患。4.4 一次完整的排查实例任务成功率的突然下降最后分享一个完整的实际排查案例希望对大家有启发。有一次我们在一台新的机械臂上部署已调试好的模型发现同样是“把螺丝刀放进工具箱”的任务成功率从之前的82%暴跌到31%。排查过程分四步走。第一步检查了视觉输入质量。发现新机械臂自带的深度相机和原来的相机型号不同图像色差明显白平衡偏暖。模型在处理偏暖色调的图像时物体边缘分割的效果明显变差。这一步耗费了大量调试时间最终通过加上色彩校正预处理解决了问题。第二步检查了上下文示例的适配性。原来示例库中的背景桌面是木纹色而新环境是深灰色桌面。视觉特征差异太大模型倾向于把示例中的背景特征当作任务的一部分反而干扰了识别。我们重新在新环境下采集了示例图片成功率立刻提升。第三步检查了未知的因素——夹爪偏移。新机械臂在安装时没有做工具中心点标定导致模型输出的目标抓取位置和机械臂实际末端存在10毫米到15毫米的偏移。这种偏移在空抓时看不出来一旦合拢抓取物体就失手。完成标定后成功率又恢复了一些但从操作逻辑上这一步其实应该在部署前做。第四步重新调整了动作平滑参数。不同机械臂的关节响应速度不同原本在旧设备上合适的滤波系数在新设备上导致动作响应滞后。把alpha从0.7调整到0.55后问题最终得到彻底解决。这个案例想说明的核心经验是上下文学习模型的部署问题不只在模型本身视觉预处理、标定、物理参数差异都可能在系统层面影响最终效果。工程上的排查一定是系统性的不能头痛医头、脚痛医脚。5. 技术的边界、局限与未来演进方向5.1 当前技术方案的硬约束还很明显在肯定这个方向价值的同时我必须泼一盆冷水当前阶段In-Context Learning for Robotics还远未达到“万能”的程度。最突出的限制是注意力机制的级联问题。当上下文中的信息层层叠加——先看示例再读指令再看环境描述——模型的注意力分布会随着层级加深而衰减。也就是说排在前面的示例信息对模型的影响大排在后面的信息容易被“遗忘”。这个问题在长上下文中尤其严重直接影响复杂任务的执行质量。另一个硬约束是传感器数据的实时性。上下文学习模型的推理频率和物理世界的变化速度不在一个量级上。我们的模型单次推理需要1.5秒左右而真实环境下物体的位置可能在那段时间内发生了动态变化。这在静态桌面场景下还能接受一旦涉及动态抓取、人机协同等场景推理速度和物理世界的变化速度严重不匹配难以满足实际需求。最后是模型规模与计算资源的矛盾。虽然我们在A100上跑OpenVLA没有压力但如果要做实际产品落地考虑到边缘设备的计算能力是部署不起这种规模的大模型的。未来一段时间内算力约束仍然是限制该项技术走向产品化的瓶颈。5.2 结合模拟环境的迁移验证思路面对这些限制我们目前在做的一个重要探索是把上下文学习与模拟环境迁移训练结合起来。在物理机器人上做大规模实验成本太高但用仿真出数据和示例成本就低多了。同时我们还在探索解决计算资源约束的可能路径知识蒸馏。用大模型在模拟环境中生成海量的上下文学习示例和对应的动作序列把这些数据蒸馏到一个小规模的动作生成模型上。用少量上下文示例做“任务描述”重点测试分布外任务的表现比如用搜索引擎和搜索数据来训练小模型。这个小模型虽然在纯上下文推理能力上不如大模型但在特定任务子集上的动作预测效率要高出很多部署在边缘设备上是可行的。迁移验证时要注意的一个细节是仿真器中的视觉分布和物理引擎参数要和真实环境尽量对齐。我们在模拟环境中测试成功率很高一上真机就跌了很多追查下来发现是仿真器中的相机内参设置和实际机械臂不一致导致模型对物体空间位置的感知出现了偏差。两边的参数对齐这个差距能缩小不少。5.3 未来方向与落地预判站在当前这个时间节点我认为In-Context Learning for Robotics至少有三个值得关注的发展方向。第一个方向是更大规模、更多样化的上下文数据建设。语言模型领域的经验证明同样的架构参数越大、预训练数据越多样上下文学习能力越强。机器人领域如果能有覆盖几十万种操作任务的多模态数据支撑VLA模型的上下文学习能力很可能会实现质的飞跃。第二个方向是面向物理世界的记忆增强机制。现在的上下文学习是无状态的模型每次看到的是独立的任务快照没有跨任务的积累和记忆。如果在VLA模型中引入记忆模块让模型在执行当前任务时能“回忆起”之前执行过的相关任务经验那上下文学习的范围就不只局限于当前输入的信息而是可以调用“历史上下文”。这会让机器人真正具备持续学习的能力。第三个方向是上下文学习与世界模型的结合。当前的VLA模型主要是感知到动作的直连映射对物理规律只有隐性的理解。如果能把一个动态世界模型嵌入到上下文学习框架中模型在做动作预测时就可以在内部先做模拟推演——这个动作执行后会带来什么状态变化、是否合理——再输出最终决策。这会大幅提升动作规划的鲁棒性对安全性和可解释性也是重要的加分项。说回我们自己的经验在In-Context Learning for Robotics这个方向上如果只能提炼一句话分享那就是别把它当成一个纯粹的算法问题它更像一个系统工程。同一个模型示例编排得好不好、上下文格式对不对、视觉预处理是否一致、闭环控制是否流畅每一环都在决定成败。跑通一个demo不难但要让机器人在真实任务中稳定可靠需要投入大量工程打磨。这也是这个方向目前最有价值的地方——它给了机器人学习一种全新的可能但把这种可能变成现实还需要一代工程师和研究员持续努力。