周末走进一家小餐馆,你只需对服务员说一句“来杯热茶”。这句话到了后厨,却要变成一连串精确的动作:拿杯子、找茶包、烧水、冲泡、端上桌。如果换成一台机器人,它面临的正是同样的问题——听得懂“给我倒杯热茶”,却不知道先做什么、再做什么。在具身大模型与 VLA 的架构里,大语言模型(LLM)就扮演着那位“总厨师长”:它不亲自掌勺,而是把顾客的一句话翻译成一张可执行的“操作卡”,指挥后厨各司其职。这就是 LLM+机器人任务规划。本篇文章会跟随这间“智能厨房”一路走下去,看看提示词设计、思维链推理、代码式规划、技能库对接与执行反馈闭环如何环环相扣,把一句人话变成机器人的行动方案。
掌握 LLM 任务规划,你就掌握了让机器人“听懂人话并干活”的核心工程能力。这是具身智能从演示走向产品化的分水岭,也是机器人算法工程师在 LLM 时代的必修课。
可视化演示
通过任务分解链、技能库接地评分与VLA模型架构三个模式,展示大语言模型如何将自然语言目标分解为机器人可执行动作序列。
本节配有交互动效(进入视口后自动加载,约 3KB)。
'+captions.decomp+'
规划任务本质
所有菜品都是从“拆单”开始的。客人的一句话是模糊的、整体的,后厨的执行却是具体的、线性的:先拿杯子、再放茶包、然后注水。任务规划要做的,恰恰就是这道“拆单”工序——把自然语言目标翻译成一串有序的可执行子任务。在具身大模型与 VLA 的框架里,这通常由大语言模型负责。它不碰电机、不看像素,只回答一个问题:“为了达成目标,机器人应该按什么顺序做什么?”
从概念上讲,任务规划位于“感知—规划—控制”链条的正中间。感知模块告诉机器人“环境里有什么”,规划模块决定“接下来干什么”,控制模块(如 VLA 策略)负责“具体怎么动”。LLM 能胜任规划者,是因为它在大规模文本上习得了丰富的世界知识:它知道“泡茶要先烧水、水要烧开才能泡”,这种常识正是传统手工规则规划器最难以编写、也最难维护的部分。
形式化地看,LLM 任务规划是一个条件概率最大化问题:在所有可行规划中,选出在给定目标和技能库条件下最有可能的那一个。
在智能厨房里,“总厨师长”LLM 拿到需求后并不直接下锅,而是先写出这份“拆单”。它输出的不是火候参数,而是“先做什么、后做什么”的决策。理解了这一点,后面所有工程手段——提示词、思维链、代码式输出——都围绕一个目标展开:让这位总厨师长的“拆单”更聪明、更可靠。
- 候选规划空间 Π所有可能的子任务序列构成的集合,相当于后厨所有可能的做菜流程组合。
- 规划 π 本身一个具体的子任务序列,例如“拿杯→放茶包→注水→端茶”。
- 条件 G 与 S规划必须同时满足用户的目标描述和机器人自身的能力边界,缺一不可。
- argmax 求最优在候选空间中搜寻使条件概率最大的规划,即最“合情理”的做法。
提示词设计
主厨再聪明,也怕顾客语焉不详。“来杯热茶”和“用龙井、85 度水、不加糖”给出的自由度完全不同。对 LLM 来说,提示词就是写给主厨的那张“工单”:工单写得清楚,规划才靠谱;工单写得含糊,再聪明的主厨也只能瞎猜。
Prompt 设计有三个核心杠杆。第一是角色设定(system prompt),例如“你是一名家用机器人规划器,只能输出 JSON 格式的子任务列表”,这相当于先告诉主厨“今天你的岗位是配菜,不是收银”,让模型进入专业状态。第二是示例引导(few-shot),给一两个“目标→规划”的成对范例,模型就会模仿其格式、粒度和风格。第三是约束注入,把技能库清单和环境物体列表直接写进工单,告诉模型“后厨只有这些师傅和食材,别乱编”。
数学上,提示词本质上是改变了模型的输出分布——同样是那个模型,换一张工单,输出的规划概率分布就完全不同。
所以,提示词工程不是“玄学”,而是有明确数学语义的系统工程。老主厨拿到工单后会按图索骥,模型拿到好的 prompt 也会收敛到高质量的规划空间。工单上写清“有哪些师傅(技能)、什么食材(物体)、按什么格式汇报(输出约束)”,这份规划就已经成功了一半。
- 工单构造器 prompt把目标 G 和技能库 S 组装成一段结构化指令文本,类似于把客人要求写在点菜单上。
- 模型参数 θLLM 的内部权重,决定了同一张工单下它更倾向输出什么规划。
- 最大化输出概率让模型“更倾向于”生成某个规划,即概率最高的那一个被选中执行。
思维链推理
有经验的师傅接到复杂订单时,会一边盘算一边念叨:“冰箱里还有茶包吗?哦有。那先烧水,再找杯子……”这种“把思考过程说出来”的习惯,在 LLM 领域有个名字:思维链(Chain-of-Thought,CoT)。总厨师长不需要闷头报结论,而是把决策链一条条摆在桌面上。
对于任务规划而言,CoT 的价值在于把隐式推理显式化。模型先根据目标推理当前环境状态,再逐步推导下一步动作,而不是直接蹦出最终答案。每一步推理都以前面的步骤为条件——“先有杯子,才能放茶包;先烧水,才能注水”。这样一来,中间任何一步出错都能被较早暴露,规划器的逻辑也变得更可检查、可调试。
从概率角度看,思维链就是把“整个规划发生的概率”分解成“一步一步接着想”的条件概率乘积。
在智能厨房里,思维链让“总厨师长”把自言自语变成流程:先确认食材、再设计工序、最后检查漏洞。相比“一口报出十个步骤”的激进做法,边走边想虽然慢一点,却大大降低了漏步骤、乱顺序的概率。
- 子任务 s_t规划中第 t 步要执行的动作,例如“拿杯子”。
- 条件依赖第 t 步的决策依赖目标 g 以及之前所有步骤的结果,不允许跳步。
- 乘积法则联合概率通过链式法则拆成条件概率的连乘,模型逐字生成其实就是逐步采样。
代码式规划
后厨里最值钱的不是散文式菜谱,而是“标准操作卡”:第几步、用什么料、多少量、什么火候,每条都精确到可执行。代码式规划的思路完全一致——让 LLM 输出的不是一段自然语言描述,而是一段 Python 风格的函数调用代码。这就是代码即规划(Code as Plan)。
为什么代码比自然语言更好使?第一,代码天然结构化,一条语句就是一个子任务,语句顺序即执行顺序。第二,代码支持参数传递,grasp('cup') 把物体作为参数打包,比文本“然后去拿那个杯子”更明确、更不易产生歧义。第三,代码可以被解释器逐条安全执行,配合白名单校验,天然适合对接机器人的技能库——总厨师长写下的操作卡,切墩师傅直接照着执行就行。
形式化地,代码式规划就是让 LLM 在函数签名空间的约束下,生成概率最高的代码序列。
在智能厨房里,代码式规划等于让总厨师长不写“小作文”,改画“流程图”。机器人的每个动作都对应一行命令,有问题就删掉这一行,需要复用就整段复制。这种可读、可达、可执行的特质,让 LLM 规划从“看个热闹”真正变成“能跑起来”。
- 代码规划 C由技能调用语句组成的序列,如
move('table')后接grasp('cup')。 - 函数签名集 F每个技能的签名形式,例如
grasp(obj)、place(obj, loc)。 - 目标与签名共同约束生成代码既要服务于目标 G,又必须符合 F 中的签名规范。
- argmax 选择在所有合法代码输出中挑概率最高的那段作为最终规划。
技能库对接
总厨师长不会亲自切每一根葱,他喊一声“切墩的,萝卜切丝”,自有专人执行。机器人的“后厨师傅”就是技能库(Skill Library)——一组预先实现好的原子技能,如 grasp()、move()、place()、pour()。LLM 的规划工作说到底,就是决定“请哪位师傅、做什么、传什么参数”。
技能库对接有三层关键设计。第一层是 API 约束:prompt 中明确告知模型所有可用技能及其签名,禁止输出库以外的调用——相当于在工单上写明“后厨只有这几位师傅”。第二层是技能检索:当技能数量膨胀到上百个时,先用向量相似度把与当前子任务最相关的候选技能筛出来,再交给 LLM 选择,避免大海捞针。第三层是参数绑定:将场景中感知到的物体名(如 'cup')与技能参数一一对应,确保调用合法、物体存在。
技能检索这一层可以用相似度函数形式化描述。
技能库就是这间智能厨房的“师傅花名册”。没有它,总厨师长再聪明也只能纸上谈兵;有了它,LLM 只需要做选择题——从花名册里点将,把自然语言目标翻译成师傅们听得懂的行话。
- 子任务嵌入将第 i 个子任务文本编码成向量,代表“我想让师傅做的事”。
- 技能描述嵌入将每个技能的功能描述编码成同一空间中的向量,代表“这位师傅擅长的事”。
- 相似度匹配用余弦相似度等函数衡量两者语义契合程度,得分高说明“对症”。
- argmax 选技能从技能库中挑出与子任务最匹配的那个技能作为执行原语。
执行反馈闭环
菜出锅前,主厨总要尝一口:“咸了加水,生了回锅。”这个“尝与改”的过程,在机器人规划里叫执行反馈闭环。LLM 规划不是一次性买卖——机器人执行子任务时会不断产生新的观测,一旦某个技能调用失败,规划器就要根据失败信息重新规划后续步骤,而不是硬着头皮往下走。
典型的闭环流程是:执行监控(monitor)捕捉异常信号,比如“抓取失败了,手里没有杯子”;把失败描述、当前环境状态以及已执行步骤一起反馈给 LLM;LLM 生成修正后的剩余规划;机器人继续执行。如此循环往复,系统就从“静态规划一次跑到底”进化为“动态自适应地边看边做”。
下一轮规划可以看作一次“基于反馈的条件生成”。
智能厨房里最真实的场景恰恰如此:茶包可能被用完了,热水壶可能放错了位置。有了执行反馈闭环,总厨师长不再是“拍脑袋定菜单”,而是每出一道菜都尝一口,根据客人的表情微调配方——这样的机器人,才是真正能走出实验室、走进真实世界的机器人。
- 当前观测 obs_k第 k 轮执行后机器人看到的实时状态,例如“杯子不在茶几上”。
- 失败信息 fail_k本轮执行中具体在哪个技能、哪个参数上出了错。
- LLM 重规划把目标、技能库、观测、失败信息一起作为输入,重新生成剩余规划。
- 迭代更新得到下一轮的规划,进入新一轮执行,形成闭环。
挑战与发展
再厉害的厨师也会失手:看错食材、误判火候、被突发的厨房混乱打乱节奏。LLM 规划器同样面临三大挑战。第一是幻觉:模型可能编造出技能库里根本不存在的技能,或幻想环境里没有的物体——相当于主厨凭空喊了一位并不存在的师傅。第二是泛化:换一个“新厨房”(新环境、新的物体组合),规划质量可能断崖式下跌。第三是多模态融合:真实机器人需要把视觉、语言、动作对齐,纯文本规划难以覆盖稠密的几何与物理约束。
应对方向也在快速演进。检索增强(RAG)让模型在规划时实时查阅技能文档,降低幻觉;代码沙箱与白名单机制把不可信输出拦截在执行之前;分层架构让 LLM 负责高层规划、VLA 策略负责低层动作,各司其职;多模态大模型则直接输入图像,让规划器“看得见厨房”再下单。
评判一个规划器的长期表现,可以看它对所有可能规划的期望回报——既要规划合理,也要执行成功率高。
回到这间智能厨房:一个可靠的“总厨师长”不是从不犯错,而是错误可控、可回退、可改进。白名单拦住幻觉,反馈闭环兜住失败,多模态让规划“看见”真实世界——当这些机制组合在一起,LLM 才从一位“话痨主厨”成长为真正能独当一面的机器人总指挥。
- 回报函数 R(π)执行完规划 π 后得到的效果评分,任务完成度越高分值越大。
- 规划概率 P(π|G)给定目标 G,模型生成规划 π 的概率,反映模型“多常想出这个方案”。
- 期望回报把所有规划按概率加权求和,得到该规划器的平均表现水平。
AI 应用场景
家用服务机器人——“一句话下单,机器人跑腿”
阶段:推理与规划(模型部署后的在线规划)
解决的问题:传统方案用行为树或状态机手写每种任务的流程,遇到“帮我把阳台的拖鞋拿来”这类新指令就要重新编程。LLM 规划器把自然语言直接变成流程,零代码适配新任务,大大降低定制成本。
具体案例:用户说“我回来前把客厅收拾一下”,机器人把指令交给 LLM,LLM 结合家居技能库生成“搬走茶几上的杯子→摆正沙发靠垫→用吸尘器吸地毯”的子任务序列,再经技能库逐条执行;执行中发现杯子不在茶几上,触发重规划自动跳过该步。整个过程用户只需说一句话。
仓储物流机械臂分拣——代码式规划上线
阶段:代码式规划 + 技能库对接(在线推理执行)
解决的问题:传统分拣依赖人工编排可编程逻辑控制器的流程,商品品类一变就要停机改程序。代码式规划让 LLM 直接生成技能调用序列,配合白名单执行器快速切换品类,将换线时间从数小时压缩到分钟级。
具体案例:管理员说“把红色包装盒放到 3 号传送带”,LLM 生成 scan('red_box') → grasp('red_box') → move('belt_3') → place('red_box', 'belt_3') 的代码规划,白名单执行器逐行校验后交给机械臂执行,全程无需人工编写逻辑。
具身智能仿真数据生成——VLA 训练的“任务剧本工厂”
阶段:数据准备(VLA 模型训练前置环节)
解决的问题:VLA 训练需要海量“指令-轨迹”数据,人工标注成本极高。用 LLM 自动为仿真环境生成多样化的任务规划,再对接技能库驱动虚拟机器人执行,能低成本批量产出带标签的演示数据。
具体案例:在 Isaac/Habitat 仿真环境中,研究员用 LLM 为同一场景批量生成“把苹果放进冰箱”“打开抽屉放入纸巾”等任务规划,虚拟机器人按规划执行并采集视觉-动作轨迹,用于后续 VLA 模型的微调与评测。
Python 演示
import re class SkillLibrary: """机器人技能库:每个技能函数代表一个可执行原语""" def __init__(self): self.skills = { "grasp": "抓取指定物体", "move": "移动到指定位置", "place": "放置物体到指定位置", "pour": "将液体倒入目标容器", "scan": "扫描并返回物体坐标" } self.grasp_count = 0 self.move_count = 0 def grasp(self, obj): self.grasp_count += 1 return "[执行] 抓取 {} 完成".format(obj) def move(self, pose): self.move_count += 1 return "[执行] 移动到 {} 完成".format(pose) def place(self, obj, loc): return "[执行] 将 {} 放到 {} 完成".format(obj, loc) def pour(self, obj, target): return "[执行] 将 {} 倒入 {} 完成".format(obj, target) def scan(self, env): return "[执行] 扫描 {},发现杯子、茶包、热水壶".format(env) class LLMPlanner: """模拟大语言模型规划器:自然语言目标 -> 代码式规划""" def __init__(self, skill_lib): self.skill_lib = skill_lib self.available_skills = sorted(skill_lib.skills.keys()) # 实际项目中这里应调用真实 LLM API,此处用模板模拟返回 self.plan_templates = { "帮我泡一杯茶": [ "scan('厨房台面')", "grasp('杯子')", "place('杯子', '吧台')", "grasp('茶包')", "place('茶包', '杯子')", "pour('热水壶', '杯子')" ], "把快递搬到门口": [ "move('玄关')", "grasp('快递箱')", "move('门口')", "place('快递箱', '门外')" ] } def plan(self, goal): if goal in self.plan_templates: return "\n".join(self.plan_templates[goal]) return "# 未找到匹配模板,请补充更多示例" class CodePlanExecutor: """安全执行器:白名单校验 LLM 生成的代码,只允许调用技能库函数""" def __init__(self, skill_lib): self.skill_lib = skill_lib def run(self, code_plan): allowed = { "grasp": self.skill_lib.grasp, "move": self.skill_lib.move, "place": self.skill_lib.place, "pour": self.skill_lib.pour, "scan": self.skill_lib.scan } reports = [] for line in code_plan.splitlines(): line = line.strip() if not line or line.startswith("#"): continue m = re.match(r"(\w+)\((.*)\)$", line) if not m: raise ValueError("非法语句,不是技能调用: " + line) name, args_str = m.group(1), m.group(2) if name not in allowed: raise ValueError("禁止调用未注册技能: " + name) args = [a.strip().strip("'\"") for a in args_str.split(",")] reports.append(allowed[name](*args)) return reports def main(): lib = SkillLibrary() planner = LLMPlanner(lib) goal = "帮我泡一杯茶" print("【自然语言目标】", goal) code_plan = planner.plan(goal) print("【LLM 生成的代码式规划】") print(code_plan) executor = CodePlanExecutor(lib) print("【白名单执行器逐条运行】") for report in executor.run(code_plan): print(report) if __name__ == "__main__": main()
class SkillLibrary:技能库即“后厨师傅”集合,每个方法代表一个原子技能。self.skills = {...}技能注册表:LLM 只能调用注册过的技能,这是第一道安全边界。self.grasp_count += 1记录技能调用次数,便于后续做执行监控与统计。class LLMPlanner:模拟 LLM 规划器:输入自然语言目标,输出代码式规划。return "\n".join(self.plan_templates[goal])LLM 输出的“操作卡”是一段多行代码,每行一个技能调用。class CodePlanExecutor:安全执行器,只负责运行“白名单内”的代码。m = re.match(r"(\w+)\((.*)\)$", line)逐行解析函数调用语法,拒绝非技能语句。if name not in allowed: raise ValueError(...)白名单校验,拦住幻觉出来的技能。args = [a.strip().strip("'\"") ...]解析并清洗参数,把物体名绑定到技能参数上。reports.append(allowed[name](*args))真正调用技能库方法,收集逐条执行报告。executor.run(code_plan)执行整个规划序列,对应正文中的“代码式规划 + 安全执行”。
常见误区
误区我以为让 LLM 输出一串电机角度或者关节力矩,机器人就能直接动起来,结果一跑就乱套。它不是应该什么都会吗?
正解LLM 是“总厨师长”而不是“掌勺师傅”。它输出的是高层子任务序列,比如“拿杯子、放茶包”;底层运动由 VLA 策略和运动控制器执行。两层通过技能库解耦:LLM 负责决策,控制器负责出力,直接让 LLM 输出原始控制量既不可靠也不安全。
为何常见:短视频里“AI 控制机器人”常被演绎成端到端一步到位,让人误以为大模型能直接接管电机,忽视了规划与控制之间的清晰分工。
误区我把整个环境的每个细节都塞进 prompt,想让模型“全知全能”,结果它反而规划得更差,甚至开始胡言乱语。
正解上下文窗口是有限的,无关信息会稀释关键指令的注意力。好 prompt 是“有效的工单”:角色设定 + 少量示例 + 技能清单 + 目标本身,控制信息密度、突出约束,模型才能抓住重点。信息过载和缺失一样有害。
为何常见:直觉上“信息越多越好”,忽略了 Transformer 的注意力机制会把权重分散到大量无关 token 上,关键指令反而被淹没。
误区规划器既然输出的是代码,那直接运行不就好了?代码不报错,就说明没问题。
正解直接运行等于把“幻觉”直接变成“事故”。LLM 可能编造不存在的技能、传错参数,代码语法上毫无问题但物理上不可行。必须经过白名单执行器:只允许调用已注册技能、只接受固定参数格式,从机制上拦截不可信代码,而不是赌模型这次没犯错。
为何常见:LLM 输出看起来合情合理,语法检查也通过,很容易让人放松安全警惕,忽略了“合理”与“可安全执行”之间的鸿沟。
误区大模型什么都知道,告诉它目标,它自己就能规划出一切动作,还要技能库做什么?后厨师傅根本多余。
正解LLM 没有“身体”,不知道你的机械臂有几个关节、夹爪能抓多重的东西。技能库既是可执行原语的供给方,也是天然的校验边界——“只能做这些事”恰恰保证规划不飘。没有技能库,LLM 的规划就是无根之木,无法落到底层执行。
为何常见:LLM 强大的文本能力让人误以为它“全能”,忽略了它既没有传感器,也没有物理约束,必须依赖技能库这座“桥梁”才能连接真实世界。
面试题
Q1. 在 LLM+机器人任务规划中,大语言模型主要承担什么角色?
- A.直接驱动电机转动
- B.高层推理与任务分解← 正确答案
- C.替换所有视觉相机
- D.焊接机械臂结构件
答案:B。LLM 是“总厨师长”,负责把自然语言目标分解成有序子任务序列,即高层推理与任务分解。它不直接控制电机,也不替代相机等感知硬件,更不涉及机械结构制造。
Q2. 任务规划环节输出的核心产物是什么?
- A.电机的电流大小
- B.相机曝光参数值
- C.有序子任务序列← 正确答案
- D.外壳喷涂的颜色
答案:C。任务规划输出的是一连串按顺序排列的可执行子任务,相当于“拿杯→放茶包→注水”的操作卡。电流、曝光等属于底层控制与感知参数,不是规划层的输出。
Q3. 提示词中设置“角色”的主要目的是什么?
- A.让输出更加冗余啰嗦
- B.限定模型视角与职责← 正确答案
- C.增加训练数据总量
- D.让模型运行更加快速
答案:B。角色设定相当于告诉主厨“今天的岗位是配菜”——把 LLM 的视角限定到“机器人规划器”上,引导它用专业格式输出规划。它不改变训练数据,也不影响推理速度,更不是为了凑字数。
Q4. 思维链推理在任务规划中的作用包括哪些?
- A.显式生成中间推理步骤← 正确答案
- B.帮助追踪执行状态变化← 正确答案
- C.使中间逻辑可以被检查← 正确答案
- D.完全消除所有失败风险
答案:ABC。思维链把“先烧水再泡茶”这类中间步骤显式写出来,每一步都基于前一步,天然支持状态追踪,也让工程师能检查逻辑断点。但它只是降低错误率,不能“完全消除失败”——执行反馈闭环依然必不可少。
Q5. 代码式规划最核心的优势是什么?
- A.文本更加简洁易读
- B.完全不需要安全校验
- C.结构化且支持传参复用← 正确答案
- D.适合所有非结构化任务
答案:C。代码式规划把子任务写成函数调用序列,天然结构化、可传参数、可复用,比如 grasp('cup') 可以直接换参数变成 grasp('box')。它依然需要安全校验,也不适合所有任务。
Q6. 技能库对接时,下列哪项做法最安全?
- A.允许调用任意系统函数
- B.使用 eval 直接执行代码
- C.白名单过滤后调用技能← 正确答案
- D.关闭所有错误检测机制
答案:C。白名单过滤是安全执行的核心:LLM 生成的代码只能调用已注册的 grasp/move/place 等技能,其他一律拒绝。任意系统函数、eval、关闭错误检测都是在给幻觉代码开大门,极其危险。
Q7. 执行反馈闭环中“重规划”的输入包括哪些?
- A.只有历史随机数据
- B.仅初始自然语言目标
- C.预先写死的固定规划
- D.失败描述与当前观测← 正确答案
答案:D。重规划像主厨尝菜后调整配方,需要把目标 G、技能库 S、当前观测 obs 和失败信息 fail 一起喂给 LLM。只靠初始目标或固定规划无法感知执行错误,随机数据更是毫无意义。
Q8. LLM 任务规划中最典型的幻觉表现是什么?
- A.编造不存在的技能或物体← 正确答案
- B.输出速度变得极其缓慢
- C.消耗的内存大幅增加
- D.训练损失降到最低点
答案:A。幻觉是指模型“一本正经地胡说八道”:编出一个技能库里没有的技能,或者幻想环境里不存在的物体——相当于主厨喊了一位根本没入职的师傅。速度、内存、训练损失都不是幻觉的定义。
Q9. 设计任务规划提示词时常用的技巧有哪些?
- A.设定主厨角色与职责← 正确答案
- B.提供少量规划示例← 正确答案
- C.列出可用的技能清单← 正确答案
- D.直接运行任意生成的代码
答案:ABC。角色设定让模型入戏,示例引导模仿格式,技能清单约束搜索空间——三者是提示词设计的三大杠杆。直接运行生成的代码属于执行阶段的操作,且必须经过白名单校验,不是提示词技巧。
Q10. 当前 LLM 任务规划面临的主要挑战有哪些?
- A.幻觉导致子任务不可执行← 正确答案
- B.对陌生环境的泛化能力弱← 正确答案
- C.多模态信息融合尚不成熟← 正确答案
- D.规划过程完全不消耗算力
答案:ABC。幻觉会编造不存在的能力或物体;换一个新环境时规划质量会明显下滑;纯文本规划难以覆盖视觉与物理约束,多模态融合仍在发展。至于“不消耗算力”恰恰相反,LLM 推理是典型的算力密集型任务。