雪原驿马站的哑仆
白桦岭是雪原上最后一个能换马的地方。往北再走,四百里没有人烟。
所以每趟车到了岭上都要停,卸货、换马、重装、再走。站里养了三十七匹马、九副套具、两口铁炉,还有一套用了二十年的规矩。
一、三个人都没错,二十七瓶药还是碎了
规矩是三道手续,三个人各管一道。
第一道在雪场上。望桩人亚努什裹着羊皮出去,绕车走三圈,看货、看轴、看前头三里的雪情,回来在一张纸上填八个栏目:货几石、箱几口、雪深几寸、道分几等、风向哪边、出发何时。
第二道在账房。画单人伊尔莎接过纸,照上头的数目排道——八石以下走近道,近道有个陡坡;八石以上走绕道,绕道多两个时辰。她把道次、时辰、换马的桩号一并写全,盖上站里的木印,这就成了行车单。
第三道在马厩。驭手波格丹拿到单子,照单套马、照单装货、照单赶车。
二十年,这三道手续没出过大岔子。
那年腊月出了一次。
南边来的药商托了一批货:一百二十只玻璃药瓶,分装两口木箱,外加一捆兽皮。亚努什绕车三圈,填了纸:货八石,箱两口,雪深一尺二,风西北,道听凭排。
伊尔莎一看八石,正好在近道那一档,便排了近道,省两个时辰。
波格丹照单赶车。近道那个陡坡他闭着眼都能下,当天日头没落就到了。
卸货时药商蹲在雪地里数了半刻钟,站起来的时候脸都白了:碎了二十七瓶。
站里三个人被叫到炉子边。
亚努什先急:"三圈我走足了,八石我称了三遍。"
伊尔莎把单子拍在桌上:"八石排近道,二十年的规矩,哪一条我错了?"
波格丹更冤:"单子上写近道,我走近道。坡我下过三百回。"
老站长米尔科没看他们,他一直盯着那张单子。
"你们三个都没错,"他说,"错的是这张纸。"
他把纸翻过来,指着背面的空白:"药商托货的时候,原话是什么?"
亚努什想了想:"他说——这箱瓶子怕震,走缓一点的道,卸的时候先垫草。"
"这三句话,"米尔科用手指敲了敲那八个栏目,"落到纸上,剩下什么?"
"剩下八石。"
炉子里的柴爆了一声。
伊尔莎说:"那就加一栏,加个'怕震'。"
米尔科笑了:"上个月你加过'怕冷'。前年加过'怕压'。今天加'怕震',明天来一趟活物,你加'怕闷';后天来一车蜂桶,你加'怕晃'。这单子改到第九版了,你数数还有几个格子是空的?"
伊尔莎没答。
"格子永远追不上人嘴里的话。"米尔科说。
二、账房里那个不说话的少年
第二天清早,米尔科把三个人又叫到账房。
账房又暗又冷,四面墙从地到顶全是架子:二十年的行车单、四十年的行记抄本、旅人口述录、南北货栈的价册、还有几十卷各地风物图谱——沙地的骆驼、河口的船、南边的鱼、西边的驼铃,画得极细。
架子中间的地上铺着一张草褥。褥子上坐着个十六七岁的少年,正把一卷行记摊在膝头。
他叫塔什。二十年前一个雪夜,米尔科在岭下的雪窝里捡到他,抱回来的时候还不满一岁。他不会说话——从来没说过一个字——但耳朵极灵,眼睛更灵,字写得比伊尔莎还工整。
米尔科从小让他睡在账房。这里的每一卷东西,塔什都读过,有些读过十几遍。
"他认得'蜡封',"米尔科对三个人说,"认得'带崽的母鹿皮'、'苔原的浮土'、'南边水里养的活鱼'。这些他一样都没亲手碰过,可他都认得。"
亚努什忍不住:"认得字有什么用?他连缰绳都没摸过。"
"所以我要带他走车。"米尔科说。
伊尔莎抬起头:"带他走车,那单子谁写?"
"以后不写三张单子了。"米尔科说,"托货的人说什么,让他直接听。"
"直接听?"波格丹愣住,"那我照什么赶车?"
米尔科看着草褥上的少年:"照他写的。"
三、跟车四十趟,只写七步
从腊月中到正月末,塔什跟着波格丹走了四十趟。
规矩很简单:出发之前,他去看一眼车、看一眼雪,再听托货的人说一句话。然后他往一块木牌上写字。
一开始波格丹嫌他碍事,走到第七趟就不嫌了。
第一条规矩是米尔科定的:牌上只许写"相对"的话。
"往左半掌""再退两指""缓半拍"——这样写。
不许写"停在第三根桩子外侧"。
波格丹问为什么。
米尔科抓起一把雪:"今天桩子露三尺,明天一场雪埋了两尺半。你按桩子量,量的是雪,不是路。手上的半掌、两指,今天管用,明年也管用。"
第二条规矩是塔什自己写在木牌背面的。
那趟车下坡,他一笔一划写"退两指",还没写完,波格丹的车已经过了弯。
当晚他在牌背上写了一行给米尔科看:我写字慢,他手快。
米尔科看懂了。第二天他改了规矩:塔什一次写七步,不是一步一问。
木牌上七行字,波格丹拿了牌,一气把七步做完,做完抬头看塔什一眼,塔什再递下一块牌。
"一步一问,车早滑到坡底了。"米尔科说,"你写慢,那就一次多写几步。"
第三条规矩是米尔科在第二十趟之后加的,加得很凶。
那天伊尔莎想把塔什的木牌抄成三份——一份给亚努什看货,一份自己排道,一份给波格丹。
米尔科当场把三张纸都撕了。
"托货的人说的是一整句话,"他说,"'瓶子怕震、走缓道、先垫草',这是一句。你拆成三份,又掉了一半。"
伊尔莎说:"三个人分工,总比一个人稳。"
"分工不是分句子。"米尔科说,"分工是把一句完整的话,交给一个能从头听到尾的人。"
四、南边来的活鱼,和桥下那层暗冰
正月末,来了一趟从没见过的货。
南边的商队,四口蜡封的陶罐,罐里养着活鱼——岭北一位老爷做寿,要在宴席上见活的。
亚努什拿着纸站在雪地里,第一栏就填不下去:活鱼算几石?栏目里没有活物这一档。
塔什绕着车走了一圈,蹲下来看了看罐口的蜡,又抬头听商队的人说话。
那人只说了一句:"罐里是活的,怕冷,也怕倒。"
塔什回到炉边,一块木牌写了七行:
罐口朝上,不许侧放。
罐底垫双层干草。
走风背面那条道。
每走一里,揭封一次透气。
封回去要按实。
过桥前停,四罐都摸一遍。
到了先卸罐,后卸别的。
亚努什凑过来看了半天:"他没碰过活鱼。"
"他读过。"米尔科说,"'活的''怕冷''封'——这几个字他读过上百回。字他早就认得,今天只是第一次拿它们指挥一辆车。"
那七行字,一行没错。
出事的地方不在鱼上。
过白桦桥下那段,前夜化了雪,后半夜又冻回去,雪皮底下结了一层看不出来的暗冰。
塔什的牌上写着"退两指"。波格丹照做。
马蹄在冰上滑了半尺,车横过来,两只前轮下了道。
人没伤。四只罐倒了一只,鱼捞回去三条,死了两条。
回到站里,伊尔莎第一句话就是:"让他回账房再读读关于冰的那几卷。"
米尔科摇头。
"书他读得够多了。"他说,"他缺的不是字。"
第二天天没亮,他让波格丹套了一辆空车,带塔什去桥下那三十丈冰面上走。
来回走了三十趟。就那三十丈,什么货也不载。
第三天塔什的木牌上多了一句:
桥下三十丈,退一指,先压后转。
那之后又出了一件事。
入冬深了,岭上换了一批矮种马:腿短、力沉、起步慢,套具也跟着换了一副。
伊尔莎急了:"新马新套具,他那些牌子全得重写吧?"
米尔科让塔什跟着新马走了十趟。
十趟之后,牌照旧写,分寸改了几处:起步那一下要多让半拍,转弯要早半掌。别的没动。
"书不用重读。"米尔科在炉边说,"他认得的还是那些字。要重对的是手上的分寸。"
那晚三个人围着炉子复盘,亚努什拿炭在墙上记了四条:
一、认得字,不等于认得雪。字是账房给的,雪要自己走。
二、分寸要相对,不要绝对。桩子会被埋,半掌不会。
三、慢的人写整段,快的人一气做完。
四、一整句话,不许拆着传。
米尔科看了看墙,又看了看草褥上那个不说话的少年。
"塔什的本事,一半是账房给的,一半是冰给的。"
技术解读
这个故事讲的是 VLA(Vision-Language-Action,视觉-语言-动作)模型——当前具身智能最主流的一类范式。
传统机器人系统是三段式流水线:感知模块(检测、分割、位姿估计)负责看清世界,规划模块负责算出抓取位姿和轨迹,控制模块负责逆运动学与力控执行。三段各自训练、各自评测,中间用人工定义的接口传递信息。
问题恰恰出在接口上:人能说出"这个杯子是热的、轻拿、放到左边第二格",而模块之间只能传结构化的数字——位姿、点云、包围盒。语义在接口处大量丢失,而且每加一类新语义都要改接口、改标注、改训练。
VLA 的做法是把三段合成一段:输入图像帧、本体状态和一句自然语言指令,直接输出动作序列,中间不再有人工接口。它的骨干通常复用一个在互联网图文数据上预训练过的视觉语言模型(VLM)——这样"热的""左边第二格""活的""怕冷"这些概念不需要用机器人数据重新教,机器人数据只负责教"手怎么动"。
这条路线的关键节点:Google 的 RT-1(2022)先证明了大规模真机演示数据可以训出通用操作策略;RT-2(2023)提出把动作离散成 token 接进 VLM 词表,与图文数据共同微调,从而把互联网语义泛化能力带进动作空间;Open X-Embodiment(2023)汇聚 22 种机器人本体的数据,验证了跨本体预训练的可行性;π0(Physical Intelligence, 2024)改用 flow matching 生成连续动作,提升精细操作的精度;OpenVLA(2024)把 7B 规模的 VLA 开源,成为学术界的通用基线。
核心概念回顾
| 概念 | 通俗解释 |
|---|---|
| 三段式流水线 | 感知、规划、控制各自训练,中间靠人工定义的接口传数字 |
| 接口语义损失 | 人话里的"怕震、轻拿"落到结构化接口上只剩下重量和坐标 |
| VLA 模型 | 输入图 + 一句话,直接输出动作序列,端到端一套权重 |
| VLM 骨干 | 在互联网图文上预训练过的视觉语言模型,提供语义与常识 |
| 动作 token 化 | 把连续动作切成离散符号,当成一门新语言接进词表 |
| 动作专家 | 挂在骨干上专门生成连续动作的模块(扩散 / flow matching / 回归头) |
| 相对动作(增量) | 输出"往左 2cm"而非"移动到 (x,y,z)",换场景不失效 |
| 动作分块 Action Chunking | 一次输出未来若干步动作,由底层控制器连贯执行 |
| 频率鸿沟 | 大模型推理只有几 Hz,伺服控制要几十到上千 Hz |
| 本体状态 proprioception | 关节角、夹爪开合等机器人自身状态,与图像一同作为输入 |
| 语义泛化 | 没见过的物体,只要概念读过就能理解并给出合理动作 |
| 物理泛化 | 摩擦、刚度、惯量变了,策略容易失效,必须补真机数据 |
| 跨本体预训练 | 先在多种机器人数据上学通用动作表征,不绑定某一台机器 |
| 本体对齐微调 | 换机器人时只用少量数据重新对齐动作尺度与时序 |
故事中的隐喻对照
| 故事元素 | 映射的技术概念 | 解释 |
|---|---|---|
| 望桩人看货看雪 | 感知模块 | 负责把世界变成结构化描述:重量、雪深、道等 |
| 画单人排道盖印 | 规划模块 | 依据感知输出算出路线与时序,即轨迹规划 |
| 驭手照单赶车 | 控制模块 | 只负责执行,不理解任务语义 |
| 八个栏目的行车单 | 人工定义的模块接口 | 只能传结构化数字,表达能力固定 |
| "怕震"落到纸上只剩"八石" | 接口处的语义损失 | 自然语言里的约束在结构化接口上被抹掉 |
| 三个人都没错却碎了瓶 | 流水线各模块局部最优、全局失败 | 每段都达标,任务仍然失败 |
| 单子改到第九版还漏格子 | 靠加接口字段追语义追不上 | 语义空间开放,接口枚举永远滞后 |
| 账房二十年的行记与图谱 | 互联网规模图文预训练语料 | 海量图文见闻,与机器人动作无关 |
| 塔什读遍行记却没摸过缰绳 | 预训练 VLM 有语义、无动作能力 | 懂概念但不会控制 |
| 不会说话但能听能写 | 单向的语言理解 + 动作输出 | 模型消费语言指令、产出动作,不需要对话 |
| 米尔科让他直接听那句话 | 端到端替代三段式 | 指令直接进模型,不再拆成模块接口 |
| 跟车四十趟 | 少量真机演示数据微调 | 用演示数据把语义能力接到动作上 |
| 只写"往左半掌""退两指" | 相对动作 / 增量动作空间 | 输出增量而非绝对坐标,跨场景更稳 |
| 不写"停在第三根桩子外侧" | 绝对坐标表示的脆弱性 | 环境基准一变,绝对目标全废 |
| 桩子被雪埋掉两尺半 | 场景几何漂移 | 参照物本身在变,绝对量失去意义 |
| "我写字慢,他手快" | 频率鸿沟 | 模型推理频率远低于伺服控制频率 |
| 一次写七步,做完再抬头 | 动作分块 Action Chunking | 一次输出一段动作,执行完再重新推理 |
| 撕掉抄成三份的纸 | 拒绝重新拆回模块接口 | 端到端的价值在于不切断语义链 |
| 蜡封陶罐里的活鱼 | 从未见过的物体与任务 | 训练数据中不存在的新组合 |
| 亚努什第一栏就填不下去 | 结构化接口无法表达新类别 | 没有对应字段,流水线直接卡死 |
| 塔什七行字一行没错 | 语义泛化成功 | "活的、怕冷、封"这些概念来自预训练 |
| 桥下看不出的暗冰 | 未建模的物理属性变化 | 摩擦系数突变,视觉上无法察觉 |
| 照牌"退两指"却滑了半尺 | 物理泛化失败 | 语义正确但动力学假设失效 |
| 不让回账房读书,去冰面走三十趟 | 补真机数据而非补语料 | 物理失配只能用真实交互数据修 |
| 牌上多出"桥下三十丈,退一指" | 场景特化的策略修正 | 针对特定物理条件的局部适配 |
| 换矮种马与新套具 | 更换机器人本体 | 运动学、动力学、时延全变 |
| 只走十趟对手感,书不重读 | 本体对齐微调 | 语义层复用,只重对动作尺度与时序 |
| 墙上四条 | VLA 的四项工程共识 | 语义与物理分开、增量表示、分块执行、端到端不拆 |
为什么这个故事对应 VLA?
因为语义损失发生在接口上,所以解法只能是取消接口。 三个人各自尽责却失败,根因是"怕震"无法穿过八个栏目的行车单;VLA 之所以要端到端,不是因为模型更聪明,而是因为任何人工接口都无法穷举自然语言的约束空间。
因为语义能力来自读而不是做,所以骨干必须先在图文上预训练。 塔什认得"活的""怕冷"是账房二十年积攒的结果,与赶车无关;VLA 的语义泛化同样来自互联网图文预训练,机器人数据量再大也不可能覆盖这些概念。
因为动作能力无法从读里获得,所以必须有演示微调。 塔什读遍行记仍不会赶车,要跟车四十趟;VLM 骨干同理,缺少动作数据就无法输出可执行动作,这正是 co-fine-tuning 或动作专家训练存在的原因。
因为参照物本身在漂移,所以动作必须是相对量。 桩子会被雪埋,按桩子定位等于按雪定位;机器人场景里桌面高度、物体初始位姿每次都不同,输出绝对坐标的策略换个场次就失效,而增量动作把这部分方差消掉了。
因为写字速度远慢于赶车速度,所以必须成块输出。 塔什一步一问车已过弯;VLA 骨干推理只有几 Hz,若逐帧决策则控制回路根本填不满,动作分块加底层控制器插值是唯一可行的工程解。
因为读过的概念可以组合,所以没见过的活鱼也能处理。 "活的 + 怕冷 + 蜡封"是三个熟悉概念的新组合,塔什第一次就写对;VLA 的零样本泛化本质也是概念组合,而不是记住过某个具体任务。
因为暗冰改变的是动力学而不是语义,所以补书无效、必须补真机数据。 塔什的字没错,错在冰的摩擦;VLA 遇到摩擦、刚度、负载变化时,加语料、加指令都不管用,只能靠真实交互数据重新校准——这也是"语义强、物理弱"这句判断的来源。
因为语义层与本体层是分开的,所以换马只需重对手感。 换矮种马不用重读行记;换机器人本体时,跨本体预训练学到的通用动作表征可以保留,只需少量数据做本体对齐微调,这正是 Open X-Embodiment 那条路线要证明的事。
后记:VLA 最动人的地方,不是它把三个模块压成一个,而是它承认了一件很朴素的事——理解世界和动手做事,是两种要分别付学费的本领。
前者可以靠读:图文、论文、说明书、上百万张照片和上亿句话,读得越多,认得的东西越多。后者只能靠碰:碰到过湿滑,才知道要多退一指;碰到过打横,才知道先压后转。互联网上没有一句话能替你在冰上滑那一次。
所以今天所有认真做具身智能的人,都在同时干两件事:一边往模型里灌更多的图文与常识,一边在真实世界里一趟一趟地采数据。前者让机器人听得懂人话,后者让它站得住。
账房里的字,和桥下那三十丈冰面,少哪一样都不行。塔什不说话,但他那块木牌上,一半墨是书给的,一半是雪给的。

