
做机器人操作研究的人最近肯定都有同一个感受打开arXiv十个做learning的组有五个在讨论In-Context LearningICL怎么用在机器人上从VIMA、RT-2聊到OpenVLA再到最近的π0每篇都在强调多模态大模型上下文示例的组合仿佛给机械臂看几段视频它就能学会新任务。可真要自己动手复现和搭建的时候很多人反而被绕进去了上下文学习到底在学习什么参数那些demo是怎么塞进模型的为什么有的任务给几个示例就收敛有的任务塞满上下文还是瞎抓这篇东西我想把这些底层逻辑彻底拆开讲一遍把我自己实验里踩过的坑、对比过的方案、以及值得关注的工程细节都拿出来聊。不管你是刚接触机器人学习的研究生还是已经在部署机器人策略的工程师这篇文章的目标是让你读完以后能自己判断一个任务到底适不适合用ICL来做模型内部发生了什么以及从数据集到部署环境有哪些容易忽略的门槛。1. 先搞清楚机器人领域的In-Context Learning到底在学什么1.1 从开卷考试说起ICL在不同场景下的含义差异In-Context Learning最早是大语言模型圈子的概念大家熟知的定义是不修改模型参数只通过在输入序列里拼接示例、指令、或者少量demo让模型在推理时临时进入一种新任务状态。通俗讲就像开卷考试——参数是考生头脑里已有的知识上下文就是考场上翻的那几页参考资料考完试参考资料一收脑子里的参数还是原样。但机器人领域的ICL跟NLP里的ICL有个非常关键的区别NLP里模型输出的还是词元token而机器人模型最终要输出的是动作——关节角度、末端位姿、力控指令、或者导航速度。这导致整个上下文的形态也随之改变不再只是文字而是图像、点云、语言指令、历史状态、甚至过去的动作序列混在一起的异构序列。还有一点容易被忽略NLP里的ICL任务边界很清晰模型只需要理解示例然后生成答案机器人ICL则必须同时解决三个问题感知当前场景里有什么物体、任务意图推断示例里展示的是完成什么目标怎么泛化到新物体/新布局以及动作生成输出能闭环执行的低层控制信号。所以即便同样叫ICL做NLP那套把几个示例拼进去就完事的思维直接搬到机器人上根本不成立。1.2 机器人ICL的三条主要技术路线目前我看到的主流做法可以粗分为三类理解清楚它们的区别才能看懂论文第一类基于视觉-语言模型的动作字面化路线。代表工作是RT-2、OpenVLA、以及后来的不少VLA视觉-语言-动作模型。思路是把动作离散成token作为一种特殊语言词让模型输出。比如把机械臂末端轨迹量化成256个码本词模型生成这些词就等于生成了动作。这类方法里ICL的上下文就是语言指令、历史图像帧以及偶尔拼接的少量演示轨迹。第二类基于离线强化学习/模仿学习的上下文推断路线。代表是IMRLIn-Context Imitation Learning with Sequential Transformer Models系列。它把多个任务的演示轨迹拼成一个长序列Transformer策略根据前面若干条轨迹推断出现在这条轨迹的意图然后在新场景里零样本执行类似意图的任务。这类方法强调的是从示踪片段中在线推断任务目标而不是靠文本指令。第三类带环境反馈的在线ICL路线。这是最近开始升温的方向把环境返回的reward或者成功信号加入上下文让模型在一个 episode 内部自适应调整策略。相当于没有梯度更新的online RL但靠上下文里的反馈做调整。严格说这是in-context RL跟前面两类不完全是一回事但论文里经常混着讲。所以下次你看到ICL for Robotics的标题先问一句是哪种ICL是给模型看演示还是给模型看文字图还是给模型看奖励信号三种路子的核心技术栈和困难点差异非常大。1.3 为什么让模型看几个例子就会做这么吸引人这个话题这么火根本原因是它触及了机器人领域最痛的痛点任务泛化。传统流程是每个任务单独采集几千条demo、单独训练一个模型新任务一来全部重来。ICL至少在概念上提供了一条路——训练阶段还是那些数据但推理阶段你只要换上下文模型就能切到新任务。我调过不少机器人策略深知这种切换的价值它意味着部署现场不需要数据采集员不需要回传云端微调边缘端设备就能承载多任务扩展。不过也别把ICL神化。它解决的是如何快速指定新任务的问题但模型里到底有没有完成该任务所需的先验技能仍然取决于训练数据覆盖范围。如果模型从来没观察过拧瓶盖这种接触操作上下文里塞一万个示例也白搭。这就是后文要展开的ICL真正起作用的前提不是上下文而是底层的多任务预训练。2. 为什么是ICL而不是传统示教或继续微调2.1 传统示教编程的硬边界在座做过产线机械臂集成的朋友应该很熟悉给ABB或者KUKA写新程序要么用示教器逐点走路径要么用离线编程软件把轨迹算好再灌进去。这套方式的优势是精确、可重复但代价是每来一个新工件、新摆放角度就得重新把轨迹走一遍。尤其当任务不是简单点到点运动而是需要根据物体当前位姿调整动作时示教轨迹根本不起作用。难点不在于写程序而在于让机器人感知到环境变化并改变策略。传统视觉引导方案比如2D/3D相机标定、抓取点计算能解决一部分变位姿问题但任务一复杂就崩需要堆叠零件分离、需要拖拽线缆、需要做力控打磨……这些场景里固定视觉算法根本覆盖不住丰富多变的物理交互。这也是大家转向learning-based方法的根本原因。2.2 细看微调路线效果不错但成本太高相比之下基于大模型微调fine-tuning的机器人策略去年已经验证了效果。比如在RT-1或RT-2的权重上收集新任务数据做继续训练成功率能显著提升。但问题在于每接一个新任务都需要重新训练一轮。这不是普通的几分钟训练而是涉及几百块GPU、大量数据清洗、以及后续部署的版本管理。做过一次端到端机器人模型微调的人应该都有体会——采集数据、标数据、训练、回灌模型这个循环的周期是周级别的。而且微调还存在灾难性遗忘问题。模型学新任务时会逐渐忘掉之前学会的技能。你加一个开抽屉任务可能推盘子就没那么稳了。虽然可以用经验回放和正则化手段缓解但工程复杂度呈指数上升。2.3 ICL的真正算账逻辑ICL在这种情况下就显得经济得多。训练阶段专注做多任务通用预训练推理阶段零样本适应新任务。新任务只要写一句语言指令、或者给几个演示视频模型参数不需要动。本质上相当于把一个全栈工程师预训练好之后每个新任务只是给他一张新的需求文档而不是重新培训这个人。从算力账看预训练很贵但可以摊薄到所有下游任务上部署阶段ICL几乎是免费的。从数据账看新任务只需要少量甚至一个演示示例而不是上万条样本。从可迭代角度看现场调整提示词和示例就行不需要重新发布模型权重这对实际产品非常有吸引力。不过关键前提必须说清楚ICL的效果天花板完全取决于预训练模型具备的技能广度。如果预训练完全没见过某类操作示例再高质量也没办法无中生有。所以做ICL不是不做微调而是把微调看作扩展底层技能库ICL则是在技能库之上快速指定任务——两者并不敌对是不同维度的工具。2.4 一个直觉化的类比我经常跟团队这样说传统示教给每一道菜写一本精确到毫升的菜谱微调把厨师送去新东方进修三个月学新菜系ICL带着一个已经会500道菜的大厨现场给他看两遍新菜的演示他照着做就完事。前提是他之前积累的刀工火候足够好。这个类比虽然粗糙但能快速解释为什么我们在决策时选了ICL而不是每任务微调——因为我们要面对的是不断新增的、短平快的操作需求根本没有时间和人力去做每任务训练。3. 从输入到输出机器人ICL系统的最新原理拆解聊完动机往下走一层看看真正动手搭一个机器人ICL系统时内部各个模块都在干什么。3.1 输入侧上下文序列是怎么拼出来的机器人ICL的输入不是一条单纯文本而是多模态序列。拿一个基于VLA的抓取任务举例输入可能长这样一条语言指令把红色杯子放到托盘上过去T帧的相机图像可能是第三视角腕部视角二值化的机器人状态关节角度、夹爪开合可选的额外示踪信息成功轨迹的观测片段或者目标位置的标注这些数据在送入模型前必须被转换成统一的token序列。图像通常用视觉编码器比如CLIP的ViT切成patch token语言直接用LLM分词器机器人状态和动作则另做专门编码。3.2 统一token空间所有模态都变成一串向量我最想强调的一点是做机器人ICL本质上就是在解决模态对齐问题。你必须让图像token、语言token、状态token、动作token在同一个语义空间里相互看得懂。不同工作有不同的做法RT-2的做法很直接动作经过离散化后变成类似文本的词元用词表ID表示动作块语言模型的交叉熵损失直接监督动作词元。相当于模型把动作当作外语来生成。VIMA的做法是把所有轨迹也当作一种token流在预训练时使用多任务演示数据让模型学会看完演示token流后接着生成机器人token流。π0这类模型则不完全走离散token路线而是在transformer后面接一个流匹配flow matching头直接输出连续动作分布。这个设计选择对结果影响极大。离散化动作的好处是训练稳定、可以直接复用语言模型的loss坏处是动作分辨率受限精细操作容易失真。连续输出头比如diffusion、flow matching动作精度更高但训练难度和推理耗时都上升。3.3 上下文记忆从哪里来站在Transformer的注意力机制上ICL的理论根基仍然是Transformer的自注意力。当模型看到一串包含示例的序列时注意力机制会把任务指令、示例中的状态动作对、当前观测三者之间建立关联等效于在推理图里动态生成一个任务映射。没有梯度更新但通过前向传播的attention路径就实现了某种意义上的参数化记忆。这里有个实操中很容易踩的坑上下文长度与KV Cache占用。做图像输入时一张224x224的图像patch化后就有196个token再堆8帧历史图像直接干到1500 token。而预训练时很多模型的上下文窗口并不大训练和推理时上下文长度一旦不一致注意力分布会发生偏移效果可能断崖式下降。我自己在部署OpenVLA时就发现训练用的上下文是7帧推理时如果改成9帧成功率跌了十几个点。所以测ICL时示例数量、帧数、prompt长度必须严格复现训练时的配置不要随手改。3.4 输出侧动作时域、频域与分辨率的设计机器人ICL的输出设计非常硬核值得单独展开。通常有两种输出粒度高层动作action chunk一次输出未来H步的动作块而不是单步动作。比如VIMA输出长度为16-32的动作序列。这种做法的好处是策略具备一定的开环规划能力减少复合误差坏处是遇到环境扰动时不够灵活需要靠后续重规划覆盖。低层步进控制每步输出一个关节速度或末端增量实时性更强但容易陷入局部振荡。我的经验是如果任务本身是长程多阶段操作比如整理桌面用action chunk如果任务是接触力敏感型比如插USB口用步进控制更好因为需要频繁根据接触状态调整。两者也见过混合方案——先预测动作块然后再用一个小网络精修到步进控制信号。3.5 一个最小ICL策略的流程拆解为了让你对整体流程有个画面感我给出一个简化版伪代码不是某个具体的模型而是机器人ICL策略的通用骨架。这种结构在不少开源项目中都能看到# 伪代码机器人ICL策略前向流程 class RobotICLPolicy: def __init__(self, model, tokenizer, action_vocab_size256): self.model model # 多模态Transformer self.tokenizer tokenizer self.action_vocab_size action_vocab_size def build_context(self, instruction, demo_obs_list, demo_act_list): # 1. 语言指令token化 lang_tokens self.tokenizer.tokenize(instruction) # 2. 历史示例逐帧变成图像token demo_tokens [] for obs, act in zip(demo_obs_list, demo_act_list): obs_tokens self.visual_encoder(obs) # [num_patches, d_model] act_tokens self.discretize_action(act) # 动作离散为特殊token demo_tokens.append(concat(obs_tokens, act_tokens)) # 3. 当前观测帧 current_tokens self.visual_encoder(current_obs) # 4. 拼接成完整上下文序列 return concat(lang_tokens, *demo_tokens, current_tokens) def predict(self, context_tokens, temperature0.8): # 前向推理生成动作token for step in range(self.num_action_steps): next_token self.model.generate_one(context_tokens, temperature) context_tokens append(context_tokens, next_token) # 反离散化为连续动作 action self.undiscretize(context_tokens[-self.num_action_steps:]) return action这段代码省略了大量细节比如视觉编码器的具体选择、动作反离散化的方式、训练loss如何形态转换但核心思路是所有信息都被编码成同构token流模型在token序列上做条件生成。4. 代表工作横向对比VIMA、RT-2、OpenVLA、IMRL、π0的取舍这节帮大家把目前最有代表性的几条技术路线放在一张表里对比然后逐一讲它们的独特设计和我的实际感受。工作发布时间上下文输入动作表示关键技术点特点/局限VIMA2022文本指令演示视频当前观测离散token多模态prompt、大规模仿真预训练强调演示作为提示但主要在仿真环境验证RT-22023文本指令历史图像离散为文本token用互联网级VLM权重初始化联合训练视觉语言动作动作分辨率受限但跨任务泛化能力很强OpenVLA2024文本指令图像离散token7B开源VLA、LoRA微调、RL-Pretrained视觉编码器可本地部署、可微调上下文较短动作精度一般IMRL2023多条不同类型的演示轨迹连续动作纯行为克隆基于Transformer序列建模通过上下文隐式推断任务意图无需语言指令π02024语言指令图像状态流匹配连续动作基于PaliGemma流匹配动作头专家混合动作精度高接触操作表现好但推理成本高4.1 VIMA把任务描述玩明白了VIMA是最早系统化把多模态提示引入机器人操作的工作之一。它不只是把文本指令当prompt而是真的把演示视频、目标物体图像、机器人轨迹全部token化后拼在一起。预训练数据来自一个经过精心设计的仿真环境包含几十万条多任务演示。我比较欣赏它的实验设计——将样例数量、prompt格式、任务相似度都做了消融证明了上下文示例对性能的显著影响。但VIMA之后在真实机器人上落地的案例不算多。根本原因是它过于依赖密集的演示型上下文而真实世界采集高质量演示的成本很高。它更多是理念验证性的工作给后续很多研究提供了演示也可以进入上下文序列的启发。4.2 RT-2互联网知识能不能指挥机器人RT-2的思路非常暴力把一个8B级别的VLM在互联网图片和文本上训练的拿到机器人数据上继续训练让模型既会做视觉问答又会输出动作token。它最惊艳的一点是能够利用VLMs里学到的概念知识来指挥机器人执行一些训练时没见过的指令比如把苹果放到红色杯子里——因为模型见过苹果红色杯子这些概念只是没见过机器人抓取的指令组合。但RT-2的动作离散化方式比较粗糙它将动作空间映射成一定数量的bin对于需要精细控制的任务比如插入、旋转阀门、装配表现不够好。而且因为模型本身参数很大部署到真实机器人上的实时性不太理想早期版本需要1-2秒才能出一个动作决策对闭环控制来说太慢。4.3 OpenVLA真正能自己跑的开放模型OpenVLA是2024年最受社区欢迎的开源VLA方案7B参数训练自一个大规模机器人操作数据集Open X-Embodiment的子集并且支持LoRA微调。我这几个月经常拿OpenVLA做baseline它的优势非常明显部署方便H100上就能跑而且视觉编码器经过强化学习阶段微调特征质量高。它的不足主要在上下文处理上。默认输入的图像数量有限而且未真正利用长时间跨度的历史帧另外它输出离散动作的粒度偏向于粗放操作抓取和放置这种任务没问题但精密装配需要额外后处理或微调。如果你要搭建自己的VLA系统OpenVLA是当前最合适的起点。4.4 IMRL不靠语言的策略推断IMRL系列走的是另一条极简路线不说一句文本指令直接把多条任务的演示轨迹按token序列拼接让Transformer在推理时观察上下文里前面几个任务的轨迹如何执行然后推断当前任务应该怎么做。这其实更像人类学徒——先看师傅做三件事然后轮到第四件事时你自然知道要做类似的活。IMRL在仿真MetaWorld, RLBench里展示了惊人的零样本任务切换能力。这个路子的优势是不需要语言标注这在真实世界采集数据时很宝贵因为标注描述本身的成本不低而且任务推断完全依赖视觉上下文。缺点是对任务之间的区分度要求较高如果两个任务的视觉特征非常相似但目标不同模型就比较容易混淆。另外它目前更多停留在抓取、推动、夹持等行为层尚未见到长程复杂操作的成功案例。4.5 π0动作精度的又一次升级π0来自Physical Intelligence团队是2024年底到2025年初非常受关注的工作。它选了PaliGemma 3B做基础VLM但动作输出部分采用了流匹配flow matching而不是离散token使得精细接触操作比如插头、叠衣服、清扫表现远超前代方案。同时用了一个混合专家结构来保证不同任务共享计算。我在看它的技术报告时印象最深的是两点一是数据飞轮的闭环——他们自己搭建了一支能采集大量真实数据的机器人硬件平台强调上下文学习的效果极限是在数据层面被压住的二是它对训练分布内任务和分布外任务做了系统评估结果显示ICL提升主要体现在分布内的任务切换上真正分布外的动作技能依然会崩。这恰好呼应我在第一节说的话预训练的底层技能库宽度定了ICL的上限。4.6 对比之后能得出的几条结论把表格和上面对比放在一起我自己的取舍建议如下需要快速部署多任务操作且任务本身是粗粒度抓取、放置、推、按压OpenVLA系列的VLA路线最现实。需要高精度接触类操作关注π0这类连续动作方法但要做好算力和数据准备。没有语言标注、但任务之间视觉差异明显IMRL这类纯上下文推断值得试。在仿真阶段做算法验证VIMA的实验框架仍然是最好的消融平台因为你完全可控prompt格式、演示数量等变量。5. 数据、上下文长度与评估口径部署中卡脖子的三座大山这节重点讲那些论文里不会写透、但实际工程中绕不开的问题。很多人在仿真里跑得好好的一到实体就翻车多半是栽在这几个环节上。5.1 数据飞轮ICL系统的燃料到底怎么来先明确一点ICL模型不是不需要数据而是需要更大规模、更多样性的统合数据。想让模型具备看几个示例新任务就能上手的能力预训练数据集必须覆盖足够的任务语义空间。真实世界采集方案主要三种遥操作采集人类操作员通过虚拟现实或主从机械臂完成演示获取的轨迹质量高但速度慢通常一个熟练操作员一天也就能采几百条有效轨迹。自动化标注/自监督采集让机器人随机推搡物体进行数据收集然后用算法自动标注成功与否。成本低、规模大但数据质量波动大需要大量清洗。仿真数据在RLBench、MetaWorld、Franka Kitchen这类环境里批量生成演示再加上Domain Randomization增强视觉多样性。仿真数据量大且标注完整但sim-to-real gap一直在那里。从Open X-Embodiment社区的经验看混合数据池的效果远好于单一来源。你不需要一条完美数据集但数据多样性非常关键——不同机器人型号、不同相机视角、不同光照条件、不同风格的动作轨迹。上下文学习的泛化能力其实来源于底层表示学习的多样性而不是上下文本身。5.2 上下文长度一个看起来简单但极其致命的设计变量我之前在第三节提过KV Cache的问题这里展开到工程层面。多模态transformer的推理时延与上下文长度几乎线性相关图像token占用的显存也随帧数增长。你在测试环境里感觉加点帧数效果更好于是从4帧加到8帧结果单次推理时间从150ms飙到500ms——对控制频率要求高的任务直接不可用。我的建议是先把上下文长度当作一个受控变量深度调优。可以尝试对历史帧做特征级压缩比如用一个轻量时序模型把历史图像压缩成固定数量的memory token而不是无限堆Raw图。有些工作已经在探索让模型只读取关键帧而非均匀抽样历史帧效果类似但推理成本大幅下降。这类优化往往比换更大的模型划算得多。还有一点容易被忽略上下文示例的使用率不等于对模型的友好度。我在实际测试中发现塞了8个demo进去模型并不总能充分利用它们有些demo之间差异过大反而混淆了模型的注意力。所以上下文设计不是越多越好而要去留意示例之间的一致性和代表性。给3个有效示例可能比给8个五花八门的示例效果更稳。5.3 评估方法成功率不是唯一指标机器人learning领域的论文通常只报一个任务成功率但做实际系统的人都知道这个指标在ICL场景里信息量太低了。一个模型在测试集上平均成功率70%看起来不错但可能是在一半任务上100%另一半任务上0%——这种方差在实际部署里完全不能接受。我建议项目里至少同时跟进以下指标任务级成功率标准metric但必须按任务分组报告方差。示例敏感性固定模型随机换一组上下文示例跑5次看成功率波动。好的ICL模型应该对示例的细微变化不敏感。分布外压力测试把场景的背景、光照、物体颜色做轻微改动看成功率衰减曲线。这直接反映模型是真正学会了任务抽象还是只在背训练集样式。动作平滑性相邻时间步的动作变化幅度。ICL模型因为是在大transformer里做条件生成偶尔会产生抖动的动作token对实体机器人非常不友好。我个人习惯是用一组固定的黄金测试集——包含任务类别、难度梯度、干扰因素三个维度的平衡样本。每次模型更新后先跑一遍黄金测试再决定是否上实体。5.4 部署大坑视觉输入分布变化是最大的敌人最后说一个我最常踩的坑训练时用固定相机位姿部署时稍微挪了一下相机性能直接腰斩。VLA模型的视觉编码器对相机位姿的敏感度超乎想象。解决办法要么在训练数据里加入大量不同相机位姿的扩增要么在部署端设计机械固定结构确保相机位姿与训练分布一致。听起来像废话但很多翻车事故都源于这个细节。另外推理时延与动作频率的匹配也要提前规划。如果你的动作决策频率需要10Hz以上但模型推理一次要200ms那唯一的办法是用异步推理动作缓存——模型持续生成unrolled的动作序列底层控制器按时间戳逐条执行。这种情况下上下文长度又直接跟缓存容量的经济性挂钩了。总之ICL看似零样本但真正让它跑起来背后是一整套工程系统的配合。6. 个人经验要不要上ICL、怎么起步、未来看点6.1 什么情况下值得上ICL如果你正在决策一个项目到底该用传统规划、微调、还是ICL我的判断标准很直接新任务是一个已知技能库里的组合变体比如把某个物体放到某个新容器换一种摆放角度执行插入那么ICL价值巨大。新任务涉及从未见过的物理接触模式比如让机器人第一次用剪刀剪东西ICL不是答案你需要先扩大技能库说白了还是得回到采集数据和微调。任务数量少且基本固定传统视觉引导或手工标注规则可能更快更稳不必为了赶潮流强行上ICL。一句话ICL适合任务空间大、但技能原子有限的场景是典型的多任务转换器不是新技能生成器。6.2 从一个最小项目出发的路线图如果是我现在从头搭一个机器人ICL系统会按以下顺序推进先用开源VLA比如OpenVLA在一个已有数据集上跑通预训练和推理闭环感受动作离散化的精度边界。搭建一个可控的仿真环境对上下文示例数量、上下文长度、示例顺序三个变量做系统消融找到自己任务的最佳配置。设计一个混合数据池真实遥操作数据少量 仿真随机化数据大量做统一预训练。在训练时加入相机位姿随机化和视觉增强确保部署端视觉变化在分布内。最后才是上实体机器人先用粗粒度抓取任务验证整体链路再逐步增加接触密集型任务。这个路径不一定是最快的但每一步都留了充分的回归验证点。我自己有过跳过第2步直接上实体结果花了两周才发现问题出在示例顺序上——早该在仿真里用几小时试完的事。6.3 未来三个值得关注的ICL方向在线ICL与闭环反思当前的ICL大都是开环——上下文在episode开始前就固定了。如果能够让模型在episode中加入实时经验反馈比如上一次抓取了但失败了姿态偏了2厘米策略自适应能力会大幅提升这是真正的经验学习。跨形态与跨案例共享数据稀缺永远是机器人落地瓶颈如果ICL上下文能够跨机器人型号传递技能在A机器人上演示操作迁移指导B机器人执行数据复用率会有数量级提升。上下文记忆压缩如何在有限上下文窗口里塞进更多高价值历史信息是ICL从实验室走向长期部署的必经之路。模型需要学会遗忘无关信息而保留关键经验。最后说点个人观察。其实大家很容易被上下文学习这个词带偏以为模型具备魔法任何任务看几遍就会了。但实际情况是ICL能否生效九成取决于预训练阶段积累的技能覆盖度和表征质量。真正值得投入精力的地方仍然是数据、数据、数据以及一个能系统评估泛化能力的实验框架。上下文只是最后的临门一脚前面的传球和跑位做得不扎实临门一脚再漂亮也进不了球。