想象你走进一家忙碌的餐厅后厨。主厨擅长“纸上谈兵”——他能根据顾客的订单,眉飞色舞地说出一百道应该做的菜:“应该上宫保鸡丁!再来个松鼠鱼!”但他从不下厨,也不看冰箱里有没有食材。旁边的帮厨则相反,他笨嘴拙舌,不会点菜,却最清楚厨房的现状:鸡蛋剩两个、烤箱坏了、水槽通了。真正的后厨要运转,必须让这两个人合作:主厨负责“说该做什么”,帮厨负责“定能不能做”,两人商量出一个双方都点头的方案,菜才能端上桌。 这正是 SayCan 的核心智慧。在 AI 从“会说话”走向“会做事”的演进中,语言大模型就像那位主厨,能理解指令、畅想行动;但要让机器人真的在物理世界里动起来,还需要一个“帮厨”——价值函数——来把关现实可行性。语言说“应该”,环境定“可行”,两者相乘,才是机器人的最终行动。这篇文章就从 Agent 范式演进的角度,带你拆解 SayCan 如何把“语言规划”与“物理约束”缝合成一套完整的具身智能方案。
对 AI 从业者而言,SayCan 是理解“从语言模型到具身 Agent”的关键里程碑,它告诉你如何让大模型从“会说”走向“能做”,为机器人、自动驾驶等实体智能产品的架构设计提供直接范式参考。
可视化演示
展示系统处理流水线、实时性能指标曲线及多方案对比分析,包含数据流转、吞吐延迟监控与方案评估。
本节配有交互动效(进入视口后自动加载,约 3KB)。
系统可视化 处理流程:输入→处理→模型→输出 性能监控:实时指标 P=L×T
范式演进背景
后厨的故事要从“只会看菜谱的厨师”说起。早期的 AI Agent 就像一位从没下过灶的学徒:他能把《红楼梦》里的菜品背得滚瓜烂熟,也能根据你的口味推荐菜——但他不碰刀、不碰锅,更不知道食材下锅后会发生什么。这类“语言 Agent”擅长对话、检索、调用软件工具,却在物理世界面前寸步难行。ChatGPT 可以告诉你如何煎牛排,却无法帮你把牛排翻面,因为它没有“手”,也没有“灶台”。
于是,具身智能(Embodied Intelligence)的概念开始兴起:让 AI 不再只当“纸上厨师”,而是真的走进后厨——拥有感知环境的能力、操作物体的身体,以及在真实世界中试错的可能。研究者逐渐意识到,仅靠语言层面的“聪明”远远不够,Agent 必须把“说得出的理想”与“做得到的现实”连接起来。这构成了 Agent 范式演进的关键一跃:从语言推理走向行动规划,从虚拟交互走向物理交互。
SayCan 正是这条演进路上的标志性作品。它的名字本身就道出了方法论:Say(说)来自语言模型的语义理解,Can(能)来自环境对动作可行性的判定。就像后厨里那位只会夸夸其谈的主厨,终于开始学着看冰箱、摸灶台——而 SayCan,就是给这位主厨配上了一位随时能查库存、试火候的帮厨。
SayCan核心决策
现在我们把聚光灯打在后厨的核心环节:一道菜到底该不该做?主厨的直觉是“应该做宫保鸡丁”,因为顾客的订单里写着“想吃点辣的”;但帮厨翻了翻冰箱,发现鸡肉没有解冻、花生米也见底了,于是摇摇头说“做不成”。真正的后厨会怎么做?他们会一起衡量——主厨的“意愿”乘以帮厨的“可行性”,如果乘积太低,就换一道菜。
SayCan 把这个朴素智慧形式化了。语言模型(主厨) 根据用户的自然语言指令,为技能库中的每个动作打一个“语义合理度”分数;价值函数(帮厨) 则根据机器人当前感知到的环境状态,为每个动作打一个“物理可行性”分数。最终决策不是谁说了算,而是两个分数的乘积。这就是 SayCan 最核心的决策公式:
回到厨房,主厨觉得“拿杯”最符合“准备甜点”的指令(Say 分高达 0.85),但帮厨发现杯子摆在柜子顶层、机械臂够起来很吃力(Can 分只有 0.60);“倒水”虽然语义分稍低(0.70),但水壶就在手边(Can 分 0.90),两者一乘反而胜出。这个例子清楚地告诉我们:在 SayCan 的世界里,单一维度的偏好说了不算,语言愿望和环境现实必须“双向奔赴”。
- 候选技能 $s_i$机器人技能库中的第 i 个高层动作,比如“拿杯”“倒水”,它是决策的基本单元,类似后厨菜单上的一道菜。
- 语言模型评分 $P_{\text{LM}}(s_i \mid I, s_t)$大语言模型(就是那位主厨)在给定用户指令 $I$ 和当前环境描述 $s_t$ 时,认为该执行技能 $s_i$ 的归一化概率。它回答的是“从语义上,这事儿该不该做”。
- 价值函数评分 $F(s_i \mid s_t)$价值函数(就是那位帮厨)在感知到当前状态 $s_t$ 后,预测技能 $s_i$ 执行成功的概率。它回答的是“按现在的条件,这事儿能不能做成”。
- 相乘取最大两把尺子各有偏向,最终选择让乘积最大的那个技能 $a^*$ 执行——既照顾语言上的合理,也尊重物理上的可能。
模型架构设计
要搭建这样一个后厨,需要两份核心文档:主厨的“名菜谱”和帮厨的“物料核查表”。在 SayCan 的模型架构里,这两份文档分别对应语言模型组件和价值函数组件。
语言模型组件(名菜谱)承担“Say“的职责。它接收用户指令和当前环境描述,从预定义的技能库中挑选并排序候选动作。论文中使用的语言模型是 PaLM 这样的大规模预训练模型,参数量高达数千亿级,能够理解”把薯片放到柜子里“这类复合指令,并把指令拆解为”拿薯片—走到柜子—打开柜门—放进去”等一串高层动词技能。值得注意的是,语言模型在打分时不仅看指令本身,还会结合当前状态的文本描述,避免在状态与指令矛盾时给出离谱建议——就像主厨点菜前也会瞄一眼传菜单上的备注。
价值函数组件(物料核查表)承担“Can“的职责。它是一个经过训练的神经网络,输入是机器人的传感器状态(如摄像头图像、关节角度)和候选技能,输出是该技能在当前状态下成功的概率。为了训练这个”核查表“,研究者使用了大量真实机器人操作数据和强化学习算法,让模型逐渐学会”柜门关着时开柜门比较难”“杯子在托盘里拿取成功率更高”这类物理常识。
两个组件通过组合决策机制衔接:语言模型先输出每个技能的说分,价值函数再输出每个技能的能分,系统将两列分数逐项相乘,取最高者执行。这种“先语义筛选、后物理验证”的流水线,就像后厨里主厨先圈出几道候选菜,帮厨再逐个检查食材与设备,双方都点头的菜品才真正下锅。动词技能作为两组的共同语言,保证了语言模型的文字输出能与价值函数的数值评估无缝对齐。
环境约束机制
帮厨最了不起的本事,不是背菜谱,而是“看得见现实”——他知道鸡蛋用完了,知道烤箱坏了,知道水槽堵了。在 SayCan 中,这份“眼力”就是价值函数赋予机器人的环境约束机制,也叫 affordance 评估,直白说就是“环境允许你做什么”。
可行性评估是这一机制的核心。给定当前状态 $s_t$,价值函数计算出执行技能 $s_i$ 后达成目标状态的成功概率。这个概率不是凭空猜的,而是从海量真实交互数据里学出来的:机器人反复尝试“拿起杯子”,有的成功、有的失败,久而久之,模型就把“杯子在桌面中央”与“高成功率”关联起来。它内化的物理规则包括:重力会让物体下落、夹爪必须对准物体重心、柜门打开前不能硬推——每一条都像是帮厨脑子里那张“厨房禁忌清单”。
状态感知则是让评估得以发生的前提。机器人通过摄像头、力传感器、关节编码器感知环境,把高维的视觉信号压缩成价值函数可用的状态表示。SayCan 的一个精妙之处在于:语言模型并不直接“看到”世界,它只读取由感知模块翻译成的文字描述;真正与世界直接打交道的是价值函数。这种分工避免了语言模型对物理世界的凭空想象——主厨不必亲眼看到鸡蛋盒空了,帮厨会把“没鸡蛋”这句实话传给他。
最终,环境约束机制让每个动作都“脚踏实地”:说分再高,只要价值函数判定环境不允许,乘积就会被压到极低,动作自然出局。这正是"Do As I Can, Not As I Say"(做我能做的,而非我所说的)这句论文标题的深意——语言可以天马行空,行动必须服从物理。
长程任务拆解
一桌宴席没人能一口吃下,主厨的做法是先定菜单、再分冷热菜、最后一道道炒。同样,面对“把薯片放到柜子里”这种多步任务,SayCan 也不能一次性输出完整动作序列。它采用分层任务分解策略:先在语言层面把目标拆成有序的子目标,再用 SayCan 决策公式逐个执行。
子目标生成由语言模型驱动。模型根据当前环境描述和目标指令,递归地提问:“现在最应该先做什么?”于是“把薯片放到柜子里”被拆成“找到薯片→捡起薯片→走向柜子→打开柜门→放入薯片”。每一个子目标的语言描述都交给价值函数评估可行性,形成一条从当前状态到最终目标的可达路径——就像主厨每写一道菜,帮厨就当场验证食材是否齐备,不可行的菜立刻被替换。
顺序动作编排则保证了执行的连贯性。机器人每完成一个子目标,就重新感知环境、更新状态描述,再规划下一步。这种“边做边看”的闭环避免了提前规划全部步骤带来的误差累积。从概率角度,长程任务的成功概率是各步骤成功概率的连乘:
整条公式像一根环环相扣的链条,任何一环的可行性不足,都会让整体成功概率大幅跳水。因此 SayCan 不追求“一步到位”,而是用语言模型拆解 + 价值函数验证 + 边做边规划的铁三角,把遥远的大目标变成眼前一个个能做的小目标,像帮厨把宴席菜单拆成一道一道可执行的菜品顺序。
- 完整动作序列 $s_1, s_2, \dots, s_n$从第一步到最后一步的全部子动作,是整个长程任务的答卷。
- 连乘符号 $\prod_{k=1}^{n}$把每一步的难度乘起来。每一步成功率若只有 80%,三步任务整体成功率就降到 51%——这解释了为什么长任务必须谨慎分解。
- 条件概率 $P(s_k \mid s_{<k}, I)$第 k 步动作的成功概率,取决于前 k-1 步的动作和历史信息,相当于帮厨每接到一道新菜,都要根据前几道菜的进展重新评估可行性。
训练与应用验证
帮厨不是天生的,他先是学徒,切坏过无数萝卜,才慢慢练出手感。SayCan 里的价值函数同样需要漫长训练,才能从“笨手笨脚”进化到“心里有数”。
训练阶段主要依赖强化学习。研究者让机器人在仿真环境和真实厨房中反复执行技能,用成功与失败作为奖励信号,逐步优化价值函数对“状态—技能”对的评分。关键技巧是采用离线强化学习(如 QT-Opt):收集大量预录制的交互数据,让模型从中学习“哪些状态下做哪些动作更可能成功”,无需在线试错,大幅降低了真实机器人的训练成本。同时,研究者还混合了行为克隆(模仿学习)数据,让模型先学会人类演示的基本操作,再在强化学习中探索更优策略。
训练完成后迎来实战检验。论文中最著名的实验场景是“厨房任务”:一台移动机械臂需要执行“把薯片放进柜子”“把饮料递给用户”等复合指令。通过 SayCan 的组合决策,机器人在真实厨房的多步任务成功率相比单一语言模型规划大幅提升——因为语言模型会“异想天开”地提出够不着的动作,而价值函数总能把它们拉回现实。研究者还展示了仿真至现实(Sim-to-Real)的迁移:先在大量仿真场景中预训练价值函数,再迁移到真实环境微调,使模型见过更多物体和布局,提升了泛化能力。
最终出师的帮厨,体现为一个实用的规律:语言模型负责“见多识广”,价值函数负责“熟能生巧”。前者保证任务理解不跑偏,后者保证每一次动手都建立在真实的物理统计数据之上。这就像后厨里,主厨的想象力需要帮厨的经验来落地——没有训练,就没有经验;没有验证,就没有信任。
演进意义与局限
站在后厨门口回望,SayCan 的真正贡献不只是让机器人端出了一盘菜,而是确立了一套具身 Agent 范式:语言模型与价值函数各司其职,前者提供开放世界的语义知识,后者锚定物理世界的可执行边界。这套“语言引导 + 物理校验”的双通道结构,深刻影响了后续的具身智能研究,比如 RT-1、PaLM-E 等模型都继承并扩展了“用语言模型规划、用视觉—语言模型感知环境”的思路。SayCan 让行业认识到:Agent 演进的方向不是让语言模型变得无所不能,而是让它在与环境动态的协作中找到自己的生态位。
然而,这套后厨体系也有明显的短板。技能库封闭是最大的局限:机器人只会菜单上列出的几十个动词技能,遇到没学过的动作(比如“打蛋”)就手足无措。数据昂贵同样棘手:训练价值函数需要海量真实机器人交互数据,每一条数据都是真金白银,导致 Can 评分的覆盖面远窄于语言模型的知识面。此外,语言幻觉问题依然存在:语言模型可能自信地提出语义合理但物理荒谬的建议,虽然价值函数会拦下它,但“拦下”毕竟不如“从一开始就理解物理”来得优雅。
面向未来,研究者正尝试让技能库走向开放:用语言描述动态生成新技能、让价值函数在更丰富的仿真世界中预训练、把世界模型融入语言模型使其天生具备物理直觉。就像一间后厨,总有一天不再需要“帮厨死记菜单”,而是主厨本人就懂食材、懂火候——但在那天到来之前,SayCan 的“主厨 + 帮厨”协作模式,依然是最务实、最可信的具身 Agent 蓝图。
AI 应用场景
家庭服务机器人
阶段:具身决策与任务规划
解决的问题:传统智能音箱只能“动嘴”,无法真正动手做家务。SayCan 让机器人把“帮我准备早餐”这类模糊指令拆解为“取杯子—倒牛奶—放回奶盒”等动作,并由价值函数实时评估每个动作在当前家居环境下的可行性,避免因物体位置、柜门状态等变化导致操作失败。
具体案例:一台厨房机器人接到“把盘子放进上层柜子”的指令,语言模型提出了“垫脚伸臂放”和“托举盘底放”两个候选动作,价值函数评估发现前者在机械臂末端负载超限时成功率仅 40%,后者成功率 90%,于是机器人选择托举方式,顺利完成操作。
工业柔性装配
阶段:任务级机器人实时规划
解决的问题:传统产线机器人按固定程序运行,物料不到位就停摆。SayCan 式架构让机器人结合语言订单与传感器状态,实时调整装配顺序和动作,将自然语言指令转化为可执行的物理操作,显著提升产线的柔性适应能力。
具体案例:在手机装配线上,机器人收到“组装 A 型主板”指令后,语言模型生成“取主板—取屏蔽罩—锁螺丝—贴标”四个步骤;价值函数检测到螺丝供料器暂时缺料,将“锁螺丝”排在“贴标”之后执行,避免整线停等。整体换线时间从 2 小时缩短到 20 分钟。
自动驾驶的人车交互
阶段:语言指令与安全决策融合
解决的问题:乘客口头指令可能与道路安全冲突,比如实线路段要求“靠边停车”。SayCan 式的“语义分 × 安全分”决策机制,能让车辆在理解乘客意图的同时,用环境评估模型判断当前路段是否具备安全的停车条件。
具体案例:一辆 L4 级接驳车在高速入口收到乘客“靠边停”的指令,语言模型给出较高的语义分,但安全评估模块检测到实线车道与后方来车,将“能分”压至极低,于是车辆回复“前方服务区将为您靠边停车”,并在 800 米后安全执行。
Python 演示
# -*- coding: utf-8 -*-"""SayCan 决策模拟:主厨(语言模型) x 帮厨(价值函数)""" class SayCanPlanner: def __init__(self, skills): self.skills = skills # {动作名: (say分, can分)} self.action_list = [] # 已选择的动作序列 self._count = 0 # 决策次数计数 def decide(self, instruction, state): """对每个候选动作计算 score = say * can,选最大值""" scores = {} for name, (say, can) in self.skills.items(): say_adjusted = say * (1.0 if instruction else 0.5) can_adjusted = can * (1.0 if state else 0.3) scores[name] = say_adjusted * can_adjusted best = max(scores, key=scores.get) self.action_list.append(best) self._count += 1 return best, scores def main(): kitchen = { '拿杯': (0.85, 0.60), '倒水': (0.70, 0.90), '摆盘': (0.55, 0.80), '扫地': (0.30, 0.95), } planner = SayCanPlanner(kitchen) action, scores = planner.decide('准备一杯水', '水壶在手边') print('决策结果:', action) for name, score in scores.items(): print(name, '=', round(score, 3)) print('历史动作序列:', planner.action_list) print('决策总次数:', planner._count) if __name__ == '__main__': main()
self.action_list = []记录每一步选中的动作,模拟长程任务中“边做边规划”的动作序列。for name, (say, can) in self.skills.items()遍历技能库,取出每个技能的语义分和可行性分,就像主厨与帮厨逐道菜沟通。say_adjusted = say * (1.0 if instruction else 0.5)模拟语言模型对指令的敏感度:有明确指令时语义分可信,无指令时打个折。best = max(scores, key=scores.get)从所有候选动作中挑出 Say×Can 乘积最大的那个,这是 SayCan 的核心决策逻辑。planner.decide('准备一杯水', '水壶在手边')模拟真实调用:传入指令文本和环境状态,返回最终动作与全部评分。
常见误区
误区很多人以为 SayCan 跟 ChatGPT 一样,用户说一句话,语言模型就直接给出动作指令,不需要额外的模块参与。
正解语言模型只负责“Say“这一半——生成候选技能并打语义分;另一半”Can”必须由独立的价值函数完成,它在真实环境中评估每个动作的物理可行性。最终决策是两者相乘,而不是语言模型单方面拍板。就像后厨里主厨说了不算,帮厨点头才算数。
为何常见:ChatGPT 等产品给人“对话即输出”的强烈印象,容易让人忽略机器人行动前还需要一道物理可行性的验证关卡。
误区有人觉得“Can 分数”是语言模型读懂了场景文字后给出的判断,所以语言模型越强,Can 分数就越准。
正解Can 分数来自价值函数——一个独立的神经网络,通过强化学习在真实或仿真机器人上训练而成。它直接根据传感器状态预测“执行这个技能后成功的概率”,和语言模型对世界的文字描述没有关系。语言模型看的是菜单,价值函数摸的是食材,两者不能混为一谈。
为何常见:人们习惯把所有智能归功于“大模型”,忽视了机器人学中环境交互数据的独特价值。
误区不少人以为只要某个动作的语义分和可行性分都超过某个阈值,它就一定会被选中执行。
正解SayCan 的唯一标准是“乘积最大”,不是单项达标。现实里常有语义分很高但可行性普通(如拿柜顶的杯子)、语义分适中但可行性极高(如倒手边的水)的两个动作,后者反而胜出。因为相乘会放大“双高”的优势,也极端惩罚“一高一低”。
为何常见:乘法思维与日常“过线即合格”的评判习惯不同,大家容易凭直觉找“两个分数都不错”的选项,而不是算乘积。
误区看到“端到端”三个字,就以为 SayCan 像魔术一样,输入长指令后一次性吐出完成整个任务的动作序列。
正解SayCan 面对长任务时采用分层规划:先由语言模型把总目标拆成子目标链,再对每个子目标分别执行 SayCan 决策;每完成一步就重新感知环境、更新状态,再规划下一步。这种“边做边看”的闭环设计正是多步任务成功率的保障。
为何常见:市面上“端到端”概念被过度营销,让初学者误以为一句指令到一串动作之间没有任何中间步骤。
面试题
Q1. 在 SayCan 中,"Say"模块由什么负责?
- A.价值函数网络
- B.大语言模型← 正确答案
- C.底层运动控制器
- D.视觉感知模块
答案:B。Say 代表“说出该做什么”,由语言模型根据指令和状态生成候选动作并打分;价值函数负责 Can,运动控制器负责执行,视觉模块负责感知。就像后厨里主厨负责点菜,不是洗碗工负责。
Q2. SayCan 中"Can"打分主要反映的是?
- A.动作在当前环境的成功率← 正确答案
- B.语言指令的语义匹配度
- C.用户对动作的喜好程度
- D.语言模型的参数规模
答案:A。Can 来自价值函数,它在给定当前状态后预测某个技能执行成功的概率,回答“能不能做成”。语义匹配是 Say 的职责,用户喜好和模型参数与此无关。
Q3. SayCan 最终选择动作的标准是?
- A.让语言模型的评分最高
- B.让价值函数的评分最高
- C.两者相乘后的得分最高← 正确答案
- D.两者评分取平均后最高
答案:C。SayCan 的决策公式是 score = Say × Can,取乘积最大者。只看语言分或只看环境分都会失衡,取平均则无法惩罚“一高一低”的极端情况,因此相乘是最贴近原论文的做法。
Q4. SayCan 的价值函数通常通过什么方式获得?
- A.用强化学习在交互数据中训练← 正确答案
- B.由语言模型直接生成权重
- C.手工编写规则来设定分数
- D.从静态文本语料中统计
答案:A。价值函数需要真实世界的“成功/失败”反馈,因此用强化学习(结合离线数据与模仿学习)训练最合适。语言模型生成权重、手工规则、文本统计都无法反映物理操作的成败概率。
Q5. 面对“把薯片放进柜子”这类长任务,SayCan 的做法是?
- A.一次性生成全部底层动作
- B.分层拆解子目标逐步执行← 正确答案
- C.随机尝试动作直到碰运气成功
- D.完全依赖人工远程遥控操作
答案:B。SayCan 用语言模型把长目标拆成有序子目标,再用价值函数验证每个子目标的可行性,形成可执行链后逐步完成。一次性生成全部底层动作会累积误差,随机尝试和人工遥控都不符合自主规划的本意。
Q6. 当语言模型建议与环境可行性冲突时,SayCan 会?
- A.完全以语言模型的建议为准
- B.完全以价值函数的判断为准
- C.乘积较低的动作不会被选中← 正确答案
- D.随机在两者之间选择其一
答案:C。SayCan 不搞“谁说了算”,而是让两项分数相乘。语义分高但可行性低的动作,乘积被可行性拉低;反之亦然。只有当两项都不低时乘积才可能胜出,因此冲突时乘积较低的自然出局。
Q7. 为什么 SayCan 选择“动词技能”而非“原始关节动作”作为决策单元?
- A.动词技能兼顾语义可理解与可执行← 正确答案
- B.动词技能的数量一定比原始动作多
- C.原始动作在物理世界中完全无法执行
- D.价值函数只能为动词技能打分
答案:A。动词技能(如“拿杯”)既是语言模型能理解和排序的语义单元,又可以被价值函数评估为可执行的概率,是连接语言与行动的桥梁。原始动作空间太大难以规划,但不是“无法执行”;价值函数也能对原始动作打分,只是规划难度极高。
Q8. 以下属于 SayCan 核心组成部分的有?
- A.语言模型提供语义评分← 正确答案
- B.价值函数给出可行评分
- C.结合两者分数取最大值决策
- D.用数据库存储用户历史对话
答案:A。SayCan 的三角核心是语言模型(Say)、价值函数(Can)和组合决策机制(取最大乘积)。存储历史对话不是 SayCan 决策链路中的必要组件,它属于外围系统功能。
Q9. 与纯语言 Agent 相比,SayCan 的优势体现在哪些方面?
- A.引入了环境的物理可行性约束← 正确答案
- B.能完成真实世界的操作任务← 正确答案
- C.不再需要任何模型的预先训练
- D.实现了语言规划与现实世界的对齐← 正确答案
答案:ABD。SayCan 用价值函数把物理约束带进决策,让语言模型从“纸上谈兵”落地为真实操作,实现语言到行动的对齐。但价值函数仍需要大量交互数据训练,并非“不再需要训练”。
Q10. 具身智能 Agent 当前面临的主要挑战包括?
- A.物理世界场景的多样性← 正确答案
- B.长程任务的推理偏差← 正确答案
- C.模型越大性能必定越好
- D.真实机器人数据获取困难← 正确答案
答案:ABD。物理世界千变万化,长程任务中误差会逐层累积,真实机器人数据采集昂贵且耗时,这些都是 SayCan 类方案的真实痛点。“模型越大越好”是错误认知,规模之外还需考虑数据效率与物理约束建模。