安全与确定性:为什么机器人不能"胡说"
指标摸清了(第 3 篇的 TTFT / TBT)、身子瘦下来了(第 5 篇的边缘部署)、一个动作的耗时拆到了每一环(第 7 篇的六站),从仿真到现实的坑也踩遍了(第 8 篇的四大陷阱)。到这儿,我们的"聪明脑"已经能在真机上转起来了。
但转起来不等于转得安全。还有一层更要命的问题:机器人不能"胡说"。
chatbot 偶尔蹦出一句胡话,你笑一笑就划走了;机器人要是"胡说"——输出一段不合语法、不可执行的动作,或者在临界工况下采样到一个离谱的动作——后果是物理的、即时的。所以这一篇,我们给这颗聪明脑套上安全带。
一、先说清代价:chatbot 的幻觉是"尴尬",机器人的幻觉是"事故"
为什么同一个模型、同一种"出错",在两边的分量差这么远?因为输出通道不一样。chatbot 输出的 token,最后变成屏幕上的像素——错了,顶多是尴尬,你可以划走、可以重问。机器人输出的 token,最后变成关节电机的转角——错了,就是撞墙、打翻、夹手、伤人。回扣第 2 篇说的 Decode 逐 token 生成:模型每吐一个 token,就是一次动作决策;在 chatbot 里错一个 token 是一个错字,在机器人身上错一个 token 是一次错的关节角度。第 6 篇讲 VLA 是"看画面直接出动作",这条通道短、快、省延迟,但也意味着模型离物理世界只隔了一层电信号——没有编辑、没有撤回、没有"重新生成一次"。
所以对机器人来说,"确定性"不是审美偏好,而是安全底线。这里要分清两个常被混着用的词:
- 确定性(deterministic):同样输入给同样输出,可复现、可预期。它的价值在工程侧——你能测试、能复现 bug、能重放事故、能向监管证明"这个行为是设计出来的,不是碰巧撞上的"。
- 安全性(safe):无论输出什么,都不越界、都能被中止。它的价值在物理侧——就算模型今天状态不好、就算遇到没见过的场景,最坏情况也有个底。
确定性管"会不会飘",安全性管"飘了会不会出事"。两个都要,缺一个都不算能上岗。而把人从"希望它不出错"变成"保证它出错也不致命",靠的是三道依次收窄的防线——不是一道,是三道的叠加。
二、第一道防线:结构化输出——只让它填"合法的空"
最容易想到的做法是"生成完再检查"。但更狠的一招是根本不让它吐错:在生成的时候就把非法 token 掐掉。这就是语法约束解码(grammar-constrained decoding)。回扣第 2 篇:Decode 是一步一步往外吐 token 的,每一步模型都会给整个词表算一遍概率,再挑一个。语法约束做的事,是在每一步按预先定义好的语法自动机(schema)判断——哪些 token 在这一步是合法的——然后把非法 token 的概率直接压到零,只让合法的那几个参与采样。
打个比方:给模型一张只能填这些空的答题卡。填空题的横线就那么几条,每条只能填一个数字;你想在横线上写一整段散文,机器读都读不出来。不是"写完了判你错",而是"格式不对根本写不进去"。
这一招把第 2 篇的"逐 token 自由生成"变成了"逐 token 在轨道上生成",代价几乎为零——因为约束是查表级的,不额外跑一次模型。
但格式合法不等于物理合法。所以结构化输出还有第二层:动作空间约束。
- 关节范围:每个关节有物理行程,超出就是撞限位。动作向量里对应那一维,必须被约束在行程之内。
- 速度与增量上限:相邻两帧的动作不能跳变太大,否则就是"抽一下"。
- 数值格式 schema:动作必须是固定维度的浮点向量、必须落在归一化区间里、必须有明确的单位约定——这是"格式合同法";上面两条是"物理合同法"。两份合同都得签。

一句话记这道防线:它管的不是"动作对不对",而是"动作像不像话"——先把语法和量纲的野马关住,才有资格谈后面的判断。
三、第二道防线:可控采样——把随机性关进笼子
格式合法了,还有第二个风险:合法但离谱。回扣第 3 篇《采样与输出》。chatbot 的 temperature 是往上调的——调高一点,回答更活泼、更有创造力,偶尔的"跑偏"反而是惊喜。机器人完全反过来:它要的是可复现。同一个场景、同一个指令,今天和明天应该给出同一个动作;否则你没法测试、没法验证、没法保证昨天的安全结论今天还成立。所以第二道防线的动作是三个:
压低 temperature。 把概率分布"削尖",让高概率的那个动作更占绝对优势,低概率的离谱动作被压到几乎不可能。极端情况是贪心解码(greedy / argmax)——永远挑概率最高的那个,彻底没有随机性。
收紧 top-p。 只在累积概率最高的一小撮候选里采样,剩下的尾巴整体砍掉。temperature 是调"形状",top-p 是砍"尾巴",两个一起用,才真正把分布收窄。
拒绝采样(rejection sampling)。 采出来一个动作,先过一遍校验:超关节范围?丢。变化率过大?丢。不满足任务约束?丢。丢了就重采,直到采到一个合格的。类比门口的保安——来一个人查一次证件,不合格直接退回。
但拒绝采样有个不能忽略的账:重采一次,就多一次 Decode。回扣第 7 篇的六站链路和第 4 篇的控制环路临界线——本来一次推理刚好压进临界线内,重采三次就三倍时间,TBT 直接冲破安全边界,想变安全反而造出了不安全。所以拒绝采样必须带预算上限:最多重采几次、超了就退到保底动作(比如保持当前姿态、减速、请求人类),而不是无限重试。
这里有个必须说清的权衡:太随机 = 动作抖、不可复现、无法测试;太死板 = 遇到新情况不会应变、可能卡死在一个错的动作上。所以本质不是"消灭随机性",而是把随机性关进笼子——允许它在安全范围内活动,边界之外一律不许出去。

四、第三道防线:安全护栏——不靠模型"自觉"
前两道防线都还在"模型内部":一个管语法,一个管分布。但工程上有个铁律——不能把安全寄托在被保护对象的自觉上。
汽车的安全带和气囊,从来不是靠司机"开得小心"来起作用的;它们是独立于司机的另一套系统,司机失误时它们才登场。机器人也一样:模型再聪明,也可能遇到没见过的场景、可能被对抗性输入带偏、可能某次推理出个 bug。所以在模型之外,必须再加一层物理兜底:
- 关节限位 / 动作范围截断:模型给出的值超出行程,直接 clip 到边界。它想撞限位,物理上到不了。
- 速度与力矩限制:不让它"猛地一下"。就算模型输出一个巨大的跳变,也被限速器拉成平缓的斜坡。
- 急停(E-stop):一根独立于软件的硬件回路。按下去就切断动力 / 刹住——这是唯一一条完全不依赖任何代码的通道。
- 人类接管通道:随时可以从中断处切手动,人接手继续干。
- 影子模式(shadow mode):新策略上线前先在"影子"里跑——真实地看、真实地算、但不真动(指令不发给电机)。对比它算的动作和人在同样场景下会做的动作,观察一段时间没问题了,再逐步放行到真动。
这一层的设计原则只有一条:独立性。它不读模型的中间结果、不做"如果模型觉得安全就放行"的判断、不因模型升级而改变。模型换代、换供应商、出回归 bug,护栏永远在那里,参数不变、逻辑不变。

五、三道防线怎么串起来:一个层层收窄的漏斗
把三道防线摆在一起,形状就很清楚了:不是三道并列的网,而是一个由宽到窄的漏斗——每一层都砍掉一部分可能性,最后剩下的才允许变成真实动作。
每一层拦的是不同类的风险,这就是"纵深防御"的意思:
- 结构化输出拦的是"说不出人话"——格式乱、维度错、单位不对。它连让这类输出出现的资格都不给。
- 可控采样拦的是"说得像人话但胡说"——合法但偏离常识、合法但在临界工况下抖。它把"偶尔抽到离谱"的概率压到可接受。
- 安全护栏拦的是"人话也说得像、但物理上真不能做"——哪怕前两层都放行了,只要会撞、会超速、会伤人,物理层直接截断或急停。
关键的工程心态是:不要指望某一道防线 100% 有效。每一道都有漏洞,但三道叠加后,同时穿透的概率极低——这才是"安全"的真实来源,不是"我们的模型很可靠",而是"我们的模型不可靠时也不会出事"。
⚠️ 说明:本专题目前没有真实自测数据,上面关于各层有效性的讨论均为机制层面的定性说明与示意,非精确实测。真实系统里各层的阈值、重采预算、限位参数都要按具体硬件和任务标定。
六、闭环:同一个"采样旋钮",在 chatbot 里调风格,在机器人上调生死
写到这儿,基础篇和具身篇真正闭环了。第 3 篇讲采样与量化时,temperature 和 top-p 是纯"体验调参"——调高一点回答更活泼,调低一点更稳重,怎么调都不至于出事,最多是"这段回答有点飘"。那时它们是风格旋钮。
到了这一篇,同一个旋钮换了岗位:它是安全机制。压 temperature 不是为了回答更稳重,是为了动作可复现、可测试、可认证;收紧 top-p 不是为了少说废话,是为了别在临界工况下抽到一个离谱的关节角;拒绝采样不是"再生成一次看看",而是"这份动作不合法,退回重做,并记入预算"。
同一个参数,在 chatbot 里调风格,在机器人上调生死。 这就是基础篇那些指标真正落地的地方——它们从来不只是跑分数字,而是物理世界里"反应延迟"和"安全临界"的另一套写法。
具身篇到这儿就收束了:瘦身(第 5 篇)、边缘(第 5 篇)、横评(第 6 篇)、延迟拆解(第 7 篇)、sim-to-real(第 8 篇)、安全(本篇)——一整套"让模型在物理世界安全跑起来"的地基,铺完了。
但地基之上还没盖楼。最后一篇,我们抬头看远方:端侧大模型 + 世界模型,具身推理的下一个十年,以及那个每个人都想问的问题——"具身智能到底离通用还有几步"。
预告第 10 篇:《前沿展望:端侧大模型 + 世界模型,具身推理的下一个十年》。
那是这个专题的收官,也是下一段路的开场。
读后小测
3 句话复述
1. chatbot 输出 token 变成屏幕像素,错了只是尴尬;机器人输出 token 变成关节转角,错了就是事故——所以"确定性"(可复现、可预期)和"安全性"(不越界、可中止)对机器人不是审美偏好,而是上岗门槛。 2. 第一道防线结构化输出,用语法约束解码在生成时就把非法 token 概率压到零(答题卡只能填这些空),再加关节范围、速度增量、数值 schema 的动作空间约束,管的是"动作像不像话";第二道防线可控采样,压低 temperature、收紧 top-p、带预算上限的拒绝采样,把随机性关进笼子,管的是"合法但不离谱"。 3. 第三道防线安全护栏是独立于模型的物理兜底(关节限位截断、速度力矩限制、急停、人类接管、影子模式),不靠模型自觉——就像安全带气囊不靠司机自觉;三道防线是层层收窄的漏斗,各自拦一类风险,安全的真实来源不是"模型很可靠",而是"模型不可靠时也不会出事"。
1 件动手小事
今晚做一次"三道防线"的纸上演练,零基础也能做:拿一张纸画三个格子,写出你要机器人做的一个最简单动作(比如"把桌上的杯子往左推 10 厘米")。第一格写"格式"——这个动作要几个数、每个数是什么单位、范围是多少;第二格写"稳定"——如果让模型连算五次,你希望五次结果差多少算可接受,超过多少就判为"抖"要重算;第三格写"底线"——哪个数值一旦超过就绝对不许执行(杯子会不会被推下去、手会不会撞到桌沿),以及那条"立刻停"的通道由谁按。写完你会发现:真正让你敢让机器人动的,不是"我信这个模型",而是"这三格我都填上了"。这个体感记住了,下一篇我们抬头看端侧大模型和世界模型时,你会明白为什么再强的模型,也永远需要这三格在下面托着。