我是在一次机械臂抓取调试现场意识到这个问题的。当时我让机器人按照自然语言指令“把左边那个零件挪到托盘里”,它用大模型接口生成了抓取点,结果连续三次都抓在同一个错误位置上——它不是没有“知识”,而是把知识放在了会带偏它的地方。后来我做了一个叫“箱熵”的小方案,核心思路很简单:把机器人依赖的知识从“随叫随到的文本”变成“编译期就锁定的一张图纸”。这篇文章就把这个思路拆开讲清楚,包括为什么用编译的思路处理机器人知识,图纸到底是什么结构,以及在真实机器人上落地时踩过哪些坑。
箱熵这个名字,是我把“熵”这个概念反过来用了。机器人运行过程中最大的问题就是不确定性太高,模型输出不确定、传感器读值不确定、场景变化不确定,所有的“不确定”叠加起来,机器人就会显得像一个在做即兴表演的演员。箱熵想做的事情,是把这些不确定的知识内容放进一个个有边界的“箱子”里,让机器人在箱子里可以自由发挥,但不能越过箱壁。传统的软件工程里面有一个几乎一样的动作,叫编译——把源代码从人类可读的语言,变成机器可执行并且边界明确的产物。所以我把它叫“编译成图纸”:一份去掉多余解释、只剩关键结构和约束的工程蓝图。
这套东西不是用来解决“机器人的所有问题”的,它专门解决一类问题:当机器人需要依赖大模型或AI Agent去理解任务时,怎么保证它不会“现编”。文档、页面、物体位置、技能参数、安全边界,这些知识如果散落在自然语言提示词里,每次执行都会有一次“自由发挥”的机会。把它们变成一张图纸,意味着机器人在运行前就知道哪些动作是允许的、哪些参数是可用的、哪些区域是禁区,自然语言只负责在图纸允许的范围内做选择和填空。
1. 机器人的“口才”和“动手能力”为什么总在打架
1.1 大模型让机器人会说话,却没让它敢动手
我见过不少团队的第一反应,是给机器人接一个对话大模型,然后让模型直接输出控制指令。这个方案在Demo里效果很好,一问一答行云流水,但在真实环境里会迅速崩溃。原因是自然语言生成的指令天然带有歧义和幻觉,“把零件挪到托盘”这句话到底基于哪个坐标系、“零件”具体指哪个实例、“托盘”的边界在哪,这些信息模型不掌握细节,它只能靠上下文猜测。猜测的结果就是动作不规范、抓取位姿有偏差、偶尔还会凭空产生一个不存在的操作。
大模型适合做的是“意图理解”,就是判断操作者想要什么;它不适合做“执行参数生成”,因为执行依赖的是当前环境下的事实,而不是模型里学习过的统计规律。统计规律回答的是“一般情况是什么样”,但机器人需要的是“这台设备、这个零件、现在的坐标”,两回事。所以如果你把大模型当成机器人的全部“大脑”,机器人确实有了口才,但动手能力会被幻觉拖累。
箱熵提出的路径是:让大模型只负责它擅长的一小段,也就是把自然语言转成结构化请求,剩下的事实查询和动作规划都走图纸。图纸里写明的知识不需要模型“回忆”,只需要模型“查找”。任何知识,只要被编译进图纸,就是最高优先级的事实来源,不允许模型凭印象输出。这一下子就断掉了“现编”的根基。
1.2 “知识打包”这件事,传统工业机器人其实早就在做
提到知识编译,很多人会觉得这是一个特别新的AI概念,但其实工业机器人早就用类似思路解决了大部分问题。传统机器人编程的时候,工程师会把一个任务拆成固定的点位序列、逻辑分支和异常处理,最后编译成机器人控制器能运行的代码。整个流程里根本不存在“模型现场发挥”的空间,每一步做什么都是提前定义好的。这套体系最大的优点是稳定可靠,缺点是太死板,稍微换一个工件型号、调一下工位布局,就得重新改程序。
到了智能机器人时代,我们希望机器人能有一点“应变能力”,于是开始加入视觉识别、路径规划、大模型推理。但这一步步子迈大了,很多方案直接把确定性知识也交给AI生成,结果就是把本来稳定可靠的系统变得不可预测。其实正确的做法不是非黑即白,而是分层:底层的技能、运动学、安全逻辑保持传统编译式的确定性,顶层加入AI做任务理解和场景适配。箱熵要做的知识编译,正好就是中间这一层——把AI要用到的知识做成确定性的、可检查的“格式”,让AI的灵活性踩在确定性的地基上。
1.3 箱熵到底想解决哪一层问题
概括成一句话,箱熵解决的是“知识表示与其边界校验”的问题。它不是一个电机控制算法,也不是一个新的视觉模型,它处于机器人技术栈的中间层,位于AI推理和底层控制之间。具体执行的时候,它会接收这几类输入:任务描述、场景先验、可用技能列表、物料与坐标信息、安全约束。然后它把它们统一编译成一份“知识图纸”,包含符号表、状态机、技能接口和约束规则。
运行的时候,机器人拿到一条自然语言指令,先做意图识别,再把意图对应到图纸里的节点和参数上,最后只执行那些通过了边界检查的动作。这个过程最大的特点是——大模型的角色被限制成“意图翻译”和“参数填空题”的答题者,而不是一个胡诌八扯的自由作者。图纸上有就做,图纸上没有就明确拒绝,这是整个方案能够落地到真实设备上的最核心原因。
2. 把“知识”当“源代码”:箱熵的设计思路
2.1 编译器前端的四个阶段怎么映射到机器人知识
接触过编译原理的同学都知道,传统编译器要经过词法分析、语法分析、语义分析、中间代码生成这几个阶段。我设计箱熵的时候,直接把这套思路平移到了机器人知识处理上,效果出奇地一致。你不需要把整个编译原理重学一遍,但理解这个映射关系对后续使用非常有帮助。
先看词法分析,对应的是从原始文本中提取知识单元。比如维修手册里写着“当气压低于0.4兆帕时禁止启动夹爪”,这句文本就要被拆成“条件类知识单元”“动作类知识单元”“阈值类知识单元”。语法分析则是检查知识单元的组合是否正确,比如“夹爪”这个动作对象必须匹配“打开/关闭”这类动作,不能出现“夹爪启动电机”这种语义上别扭的描述。语义分析更近一步,要检查变量和约束是否冲突,比如两条规则里一条说“温度高于60度可以继续运行”,另一条说“温度高于50度必须停机”,它们之间就存在矛盾,必须在编译阶段直接报错。最后生成的中间代码,就是那张图纸本身。
这样做有一个立竿见影的好处:知识问题在编译时暴露,而不是在机器人运行时才暴露。运行时的故障排查成本远高于编译时。很多时候我们调试AI机器人感到痛苦,就是因为问题总是到现场才发生,而且每次发生的还不一样。把知识变成源代码再编译,等于把大量错误拦截在上线之前。
2.2 为什么是“图纸”,而不是知识库或者向量数据库
有人问过我,为什么不直接把知识放到向量数据库里做检索增强,让模型在回答问题时查资料?向量数据库确实是处理非结构化知识的好工具,但它本质上是一种“模糊检索”,它返回的是相似内容,不是确定内容。对文档问答场景来说足够好用,但对机器人控制场景来说是致命的——你没办法保证检索回来的内容就是正确的,哪怕相似度99.9%,也可能因为某一条更相似但错误的记录导致动作偏差。
图纸这个形态强调的是“编译后的确定性”。它像一张建筑施工图一样,标注了每一个连接关系、尺寸、材料,施工人员不需要再去翻几千页的规范文档,只需要照图施工。箱熵的图纸也是这样,它把知识提炼成一份经过校验的、可供运行时直接读取的结构化文件。
图纸和代码还有一个共同点:它是一份可以审查、可以diff、可以版本管理的资产。你可以在代码评审里看到某次修改删除了一个安全阈值,也可以追溯到是谁在什么时间加的这条规则。而向量数据库里的内容往往是批量导入的,修改一次要重新embedding,审查起来非常困难。在这个意义上,图纸不只是给机器人看的,也是给人看的——这是团队协作中的关键要素。
2.3 编译期的主要产出:符号表、依赖图和接口契约
一份完整的箱熵图纸在编译成功后,至少会产出三样东西:符号表、依赖图、接口契约。符号表就是一个命名空间的索引,记录所有可用实体,比如“传送带1”“料箱A”“六轴机械臂”,每个实体带有一组属性和可调用的方法。依赖图则是在描述实体之间的逻辑关系,比如“机械臂要移动到料箱A,必须先确认传送带1处于停止状态”,这个关系画出来就是一张有向图。接口契约是运行时最重要的东西,它明确定义了每个能力需要哪些输入参数、参数范围是多少、返回什么数据。
把它类比成一个餐厅的设计图会非常直观:符号表是菜单上所有菜品的名称清单,依赖图是后厨各工位之间的配合流程,接口契约则是每道菜的详细配方和操作标准。厨师(AI)可以在菜单范围内自由推荐和搭配,但配方规定了盐最多放多少克、烹饪时间不能超过多少分钟。箱熵运行时,机器人每决定执行一个动作,系统都会按契约校验参数,超范围直接拒绝并把原因反馈给决策层。这样AI的不确定性就被限制在一个可控范围内。
3. 一张“图纸”的可落地形态:数据结构与运行时接口
3.1 图纸长什么样:从领域语言到结构化配置
在具体实现上,箱熵的图纸并不复杂,它通常是一份YAML描述的知识源文件加一份编译后生成的Json或Protobuf。我先给你看一段概念性的知识源文件,用类YAML格式写出来,它描述的是一个抓取任务的基础知识:
entities: - name: left_fixture_on_conveyor type: fixture position: { frame: "conveyor_1", x: 0.35, y: -0.12, z: 0.2 } allowed_grasp_approaches: ["from_top", "from_side"] - name: tray_a type: tray position: { frame: "table_work", x: 0.72, y: 0.45, z: 0.05 } capacity: 8 occupied_slots: 2 skills: - id: pick_and_place name: 从指定料位抓取并放到托盘空位 params: - source_entity: entity_ref validate: in_entities - target_entity: entity_ref validate: in_entities preconditions: - "source_entity.position != target_entity.position" - "robot_state == 'idle'" forbidden_when: - "tray_a.occupied_slots >= tray_a.capacity" prompts: task_understanding: system: | 你是一个任务调度员。 只能执行图纸中声明的 skill。 当目标超出图纸范围时,回复 NOT_SUPPORTED。 user_template: | 用户请求: {user_request} 可用实体: {entities} 请输出 JSON: {"skill_id": "...", "params": {...}}这段文件还不是图纸本身,它是图纸的“源代码”。箱熵编译工具会读取它,做冲突检测,检查实体引用是否存在、坐标是否越界、预条件表达式是否可计算,最后生成一份只包含运行时所需内容的Json图纸。编译后的图纸里不再有prompt模板,因为运行时不允许大模型直接接触原始prompt。prompt已经变成一个固定的、编译时校验过的调度器模版,模型的自由度被进一步压缩。
3.2 运行时拿着图纸,AI还能做什么
插一句,很多人会担心,把AI限制得这么死,那机器人是不是又退回传统编程的老路上了?其实不会。图纸留了充分的自由空间,只是这个空间是“参数空间”而不是“规则空间”。比如图纸声明了一个抓取技能,允许的抓取方式有“从上方”和“从侧面”两种,AI在执行时可以根据视觉识别的结果选择实际的抓取位姿。再比如图纸声明了任务完成的判定条件是“目标实体位置变更”,但不规定必须用哪条路径到达目标点,路径规划算法就可以继续自行发挥。
所以箱熵的边界设计是有意的:它剥夺了AI“发明规则”的权力,但保留了AI“选择策略”的空间。这两者的区别是本质性的。发明规则意味着AI可能凭空创造一个不存在的操作,这在物理世界中可能造成碰撞或伤害;选择策略则是在已经被验证安全的选项里做选优,风险是可控的。运行时的守护进程会持续校验每一个输出:如果模型输出的JSON里出现了一个不存在的skill_id,系统会直接丢弃并在日志中标记一次“越界请求”。
3.3 知识编译和程序编译的本质差异
虽然我在前面说了很多“把知识当代码”的话,但知识编译和程序编译之间有一个非常重要的差异:程序的执行逻辑是完全确定的,代码分支最终都会按指令执行;知识的执行则引入了一个非确定性的消费方——大模型。模型在推理时无法保证每一步都跟上次一样,所以箱熵不能只做一次编译然后彻底撒手,它还需要在运行期做一遍轻量级的“动态校验”。
这个动态校验可以比作机场安检:编译保证了所有旅客都买了票,但上了飞机之后依然要在登机口核验身份证件。图纸在编译期保证了知识的逻辑一致性,到了运行期,每一条要执行的意图还要跟图纸上的接口契约做实时比对。也正因为这样,箱熵的图纸通常体积很小,几十到几百KB就足够覆盖一个工站的全部知识,模型推理时不需要携带大量背景资料,系统的Token消耗和延迟都会下降,对于资源受限的机器人平台来说这一条尤其友好。
4. 实操复盘:从需求到“图纸”的一次完整构建流程
4.1 第一步:盘点知识边界,不要把什么都塞进图纸
我先说一个真实经验:第一次用箱熵的时候,最容易犯的错误是想把所有可能的问答知识全部塞进图纸。我当时对着项目文档写了厚厚几十页,结果编译阶段报警一大堆,主要原因就是很多内容根本不属于执行层的知识。比如“这台机器人的保修期是多久”这种问题,它是文档知识,不是任务执行知识,机器人运行时根本不应该回答它,直接转给售后知识库即可。
正确做法是先做一次“边界划分”:列出机器人需要自主执行的N个任务,分别标注每个任务需要的实体、技能、参数和安全约束。不在任务执行链路上的知识一律不进图纸。图纸不是越大越好,而是越精确越好。还有一类知识也容易被误收进去,那就是“过时的经验”。工艺参数半年改一次,图纸里写的还是旧数值,运行时排在旧参数上,后果可想而知。所以知识边界不仅指的是范围,还要考虑时效性。
4.2 第二步:定义实体和技能,用“接口思维”而不是“文本思维”
这一阶段是重头戏。我建议用接口思维来定义实体和技能,把每个实体想象成一个类,它有属性、有状态、有允许被外部调用的方法。比如“托盘A”这类实体,属性里除了位置,还可以有“容量”“已占用槽位”“温度传感器读数”等,状态包括“空闲”“已满”“锁定中”,方法包括“获取空槽位坐标”“查询剩余容量”。定义的时候先在纸上画出依赖关系,再转成配置。
技能定义相对更关键,因为它直接决定AI能做什么。技能不是自然语言描述,而是一组接口约束。你需要在技能定义中明确:输入参数列表、参数类型和取值来源、执行前需要满足的前提条件(preconditions)、哪些情况下禁止执行(forbidden_when)。定义得越严格,后面AI越不容易犯错。我最初写技能时习惯用大段自然语言描述步骤,后来发现副作用很大,模型会把“先抓取再移动”理解成“移动再抓取”。把它们改成显式的状态机步骤并加上条件判断后,执行准确率才真正提上来。
4.3 第三步:编译检查与配置生成
写完领域文件后,运行箱熵编译工具做检查。我用一个简化命令来演示一下:
xentropy compile --source ./knowledge/site_yaml \ --output ./build/knowledge_graph.json \ --check-level strict \ --with-rule-config ./rules/safety.json编译过程的终端输出通常会有几个阶段的提示信息。词法检查阶段如果出现“unknown entity reference”说明你在技能参数里引用了一个不存在的实体,99%的情况是名字拼写不一致造成的。语义检查阶段最常见的报警是“conflict preconditions”和“unreachable skill”,前者说明两条规则之间互相矛盾,后者说明某个技能在现有状态机下永远无法满足前提条件。我在项目中把编译检查接入CI流程,每次有人修改知识文件,自动构建出一份新的图纸并跑一遍静态检查。这样知识变更对现有技能的影响能第一时间暴露出来,比让机器人上线再试错高效太多。
编译通过后,还要人工抽查一遍生成的图纸。重点检查几处:一是所有坐标是否是基于正确的坐标系写的,有没有把基坐标系和工具坐标系混为一谈;二是禁止条件有没有被编译器优化掉;三是路径规划需要的地图边界标识是否正确。人工核查不是不信任编译器,而是因为图纸最终驱动的是物理运动,再多的自动检查也比不上一次场景推演。
4.4 第四步:真机联调时,跑通“一条正常链路、三条异常链路”
图纸上写知识是一回事,在真机上跑通是另一回事。我在联调阶段一般会先跑一条完全的正常链路,指令“把左边夹具放到托盘A空位”,走完识别、查图纸、执行、确认的完整闭环。这条链路能通过只能说明系统打通了,还没法暴露大部分风险。真正有价值的是异常链路的验证:我建议优先测试几个场景——请求一个图纸之外的技能、请求图纸内技能但参数越界、以及请求时机不对(比如托盘已满还要继续放)。
这三条异常链路基本覆盖了“AI现编”的常见形式。第一条模型意图识别跑偏了,把客户随口说的话当成任务指令;第二条模型虽然在技能集合内,但生成的参数超出了合理的尺寸或坐标范围;第三条是忽略了状态条件,把一定时序下不可能执行的动作也输出出来。箱熵运行时会对这三类情况分别返回错误码,调试工具能快速定位是模型意图错还是约束定义错。我实测下来的经验是,最初阶段大部分异常都发生在约束定义不全,而不是模型本身,别太早怀疑你的模型,先怀疑自己的图纸。
5. 我踩过的坑:箱熵落地常见的5类问题
5.1 “图纸编译通过,但机器人就是不动”
这个问题基本都出在预条件表达式上。编译通过只说明表达式语法正确、引用存在,不代表表达式在机器人当前状态下能够判定为真。比如某条预条件写成“抓取目标必须位于工作台高度以上”,如果图纸里的目标高度是通过另一次视觉识别后才能更新的变量,而运行逻辑没有更新它,系统就会认为条件永远不满足,机器人自然原地不动。
排查的方法是在调试窗口观察条件判定日志,查看某一个具体预条件被判定为False时它所引用的变量实时值是多少。大多数情况下会看到变量是空值或默认值,这就说明上游数据获取环节(视觉识别或传感器采集)没有成功更新图纸中的实体属性。所以每次联调前先检查一遍实体的属性是否被正确绑定到了感知系统输出。
5.2 “AI还是会在参数边缘试探”
即使有了接口契约,模型的参数生成仍然可能在数值边缘上做文章。比如图纸允许夹爪开度0到80毫米,模型可能生成了一个79.9毫米的值,虽然合法但可能导致抓取不稳定,因为0到80是理论允许值,而实际稳定抓取范围可能是30到70毫米。这里我学到的教训是:不要用一个笼统的合法范围,要分开“允许暴露给模型的执行窗口”和“设备硬极限”。模型参数校验看着执行窗口,硬极限留给底层控制器。
这很像开车时的道路边界和导流线的关系,导流线以内才是真正安全的行车区域,道路边界只是不能碰的护栏。有了这两层,AI基本不能靠边界上的抖动来挑战整个系统。如果发现某些参数模型频繁“压线”,可直接在图纸里把暴露给模型的范围进一步缩小,再在运行时告警。这种做法比单纯调模型参数要稳妥得多。
5.3 “一张图纸装不下所有边缘情况”
图纸做得太严容易丧失灵活性,做得太松又会留下“现编”空间。这是整个设计过程中最大的张力。我的经验是:不要把边缘情况都写进图纸,而是设计“回退策略”。图纸中声明一个默认的安全行为——当机器人无法理解意图或找不到匹配技能时,就停在原地并请求人工介入,或者移动到安全位等待下一步指令。处理不了的边缘情况,与其给AI一个模糊的动作建议,不如让它停下来。
“停下来本身就是一种合理的机器人行为”,我觉得做机器人行业的人应该反复在心里默念这句话。很多时候用户抱怨机器人不聪明,其实是它该停的时候没停,反而做出了危险的试探动作。箱熵里我特意加了一个规则:没有明确说“可以做”的事情,默认就是“禁止做”,这与很多互联网产品的默认策略正好相反,但物理世界里的安全策略必须如此。
5.4 知识更新之后,机器人拿到的还是旧“图纸”
知识文件改过了、编译也生成了新的图纸,但部署环节如果出了问题,机器人加载的还是机器人控制器缓存里的旧版本。有一次我排查了半天,发现逻辑改动没有生效,最后才在日志里看到当前加载的图纸版本号还是前一天编译的。加了版本号机制之后这一类问题几乎绝迹。
现在我要求每份图纸文件都带版本号和内容哈希,编译工具在文件头强制写入这些信息。运行时启动时与控制系统的部署清单做比对,一旦发现版本不匹配直接阻止启动并打印链路上所有仓库的版本状态。另外,知识与代码是分开演进的,如果图纸里改了实体坐标,而对应的底层控制模块没有同步更新,两边的版本会对不上。版本号是这套体系里最不起眼却最能救命的设计。
5.5 “到底谁来维护图纸?”是团队管理里最难的问题
最后聊一个技术之外的问题。图纸的维护角色比很多人想象中更难定,因为既需要懂机器人操作底层的细节(坐标系、状态机、运动指令),又需要会做抽象建模,甚至还要了解大模型的接口边界。有的团队让算法工程师维护,容易忽略模块间的业务条件;让数字孪生工程师维护,又容易把图纸当仿真界面来写;让现场工程师维护,则常常缺少系统思维。
我比较建议的做法是:选出一个人担任“知识架构师”,类似传统软件团队的架构师职责,负责图纸的全局结构、版本评审和对外接口。他对编译产生的最终运行风险负全责。其余一线的变更以“变更请求”方式提交,每次变更走完整编译与评审流程,而不是直接改共享的文件。这个机制在两个人以上的机器人团队里几乎是必备的,能显著降低知识混乱造成的机器人误动作概率。
6. 箱熵后续可以怎么扩展,或者说它到底适合谁来用
6.1 把数字孪生和仿真环境接进来,把真机风险前移
图纸编译检查只能发现逻辑矛盾,发现不了底层几何层面的碰撞。后续我计划把图纸和底层仿真环境绑定,也就是将图纸里的实体位形、技能接口和约束规则同步到数字孪生环境中,让每一次图纸的变动都先跑一遍大量采样场景的仿真回归。尤其是在产线变更频繁的场景下,用仿真环境快速验证可执行性再做真机切换,能省下大量现场停工调试的时间。
这一步本质上和软件行业的CI/CD是同一个思路:知识图纸是源码,仿真验证是编译期,发布到真机控制器是上线部署。箱熵的价值不是替代其中任何一环,而是让这一整套流程里流动的产物变成结构化的、可校验的图纸,而不是非结构化、存在幻觉风险的文本。在有数字孪生条件的项目上,这套链路几乎可以无缝衔接。
6.2 箱熵不会取代大模型,它只是给AI当好降落伞
先给个明确的结论,箱熵这类“知识编译”方案不是大模型的对立面,反而是大模型在物理世界落地时最需要的护栏。大模型仍然负责它擅长的那部分工作:理解人类意图、生成初步方案、做多模态感知的推理。箱熵只负责在它输出之后做一次硬性的边界过滤和事实对齐,相当于一个认真负责的助手,拿着图纸在旁边看着,一旦发现清单之外的施工方案,立即喊停。
物理世界和数字世界最大的区别在于,一个失败的动作可能造成上千元的物料损失甚至安全事故。互联网产品的AI胡说两句大家可以容忍,机器人领域的AI胡说两句就可能是撞车或者是夹爪压碎工件。箱熵给AI划定“你可以自由选择,但不可以离开这张图”的范围,不是限制智能,而是把智能放到安全边界内去发挥。
6.3 我建议哪些团队认真考虑这个思路
团队在规划机器人AI能力时,可以用下面三类特征做一个简单对照。如果至少命中两条,我认为你确实需要一个类似箱熵的知识编译层:
- 你的机器人系统需要对接大模型,且要求从自然语言到控制动作的链路尽可能端到端。先不要急着把所有环节都交给提示词,把任务分解后加上一个编译校验中间层会大幅提升稳定性。
- 你的项目包含多套可复用技能,比如抓取、装配、导航、上下料,不同任务的参数和安全条件不一样,你需要一套统一的结构来描述和管理它们。
- 你的知识和技术文档需要反复维护,且维护错了会直接影响现场运行可靠性,仅靠人工检查或向量检索已经不够,你需要一套带冲突检测和版本管理的知识沉淀机制。
最后再分享一次我自己的体会。从在车间里被AI错觉折腾到写第一版配置文件,再到编译工具能自动帮我发现规则冲突的那一刻,我对“知识”这件事的理解发生了根本变化。机器人领域的知识不应该是一堆让人左猜右猜的文案,它应该像软件代码一样需要经过版本管理、静态检查、架构评审和回归测试。箱熵只是一个把常识固化下来的例子,真正有意思的是借它看清这一体感:“图纸”比“话术”可靠,编译比解释可靠,边界比自律可靠。未来如果大家想在自己的项目里尝试这套思路,不妨先拿一个三天之内的简单分拣或导航任务做起,边做边体会——到时候你可能会发现,最难的不是让机器人“懂得更多”,而是让它对不知道的东西保持沉默。