论文信息标题Inner Monologue: Embodied Reasoning through Planning with Language Models会议arXiv 2022单位谷歌机器人部门代码https://innermonologue.github.io论文https://arxiv.org/pdf/2207.05608引言机器人也能“三思而后行”想象一下你让机器人去厨房拿一瓶可乐。传统的机器人会怎么做它会生成一个僵硬的计划1. 走到厨房 2. 拿起可乐 3. 拿给你。然后就一条路走到黑——如果可乐不在桌子上它会傻站在那里如果第一次没拿起来它会直接放弃如果冰箱里只有雪碧它完全不知道该怎么办。但人类会怎么做我们会有“内心独白”“可乐不在桌子上那看看冰箱里有没有。”“第一次没拿起来再试一次。”“冰箱里只有雪碧问问用户要不要换雪碧。”这就是谷歌机器人团队在2022年提出的Inner Monologue内心独白的核心思想让机器人也拥有这种“内心独白”能力通过自然语言反馈形成闭环根据环境变化动态调整计划。之前的工作比如SayCan已经证明了大语言模型LLM可以作为机器人的高层规划器但它们都是开环的——生成计划后就不管执行结果了一旦中间出问题整个任务就失败了。而Inner Monologue通过引入三种自然语言反馈源让LLM能够实时感知环境变化进行重试、重规划甚至询问用户大大提升了机器人在复杂动态环境中的鲁棒性。一、Inner Monologue的核心设计Inner Monologue的整体框架如图1所示。它的核心思想非常简单把所有的环境反馈都转换成自然语言然后和之前的对话历史一起输入给LLM让LLM根据完整的上下文生成下一步的动作。图1 Inner Monologue的整体框架来源论文Figure1从图1可以看到整个系统由三个核心部分组成大语言模型LLM作为高层规划器负责理解人类指令、生成动作计划、处理环境反馈感知模块负责将视觉信息转换成自然语言反馈比如“我看到了可乐和雪碧”、“动作执行失败”机器人技能库包含一系列预训练的低级别技能比如“走到桌子”、“拿起可乐”每个技能都有对应的自然语言描述1.1 问题陈述我们的目标是让一个具身机器人执行人类给出的自然语言指令iii。机器人只能执行技能库Π\PiΠ中的预训练技能πk\pi_kπk每个技能都有对应的自然语言描述ℓk\ell_kℓk。规划器也就是LLM需要找到一个技能序列来完成指令iii。同时规划器可以获取环境的自然语言反馈ooo比如成功检测、场景描述、人类反馈等。我们的目标是研究LLM如何利用这些反馈来形成闭环提升规划的鲁棒性。1.2 三种反馈源Inner Monologue引入了三种不同类型的自然语言反馈如图2所示图2 三种类型的自然语言反馈来源论文Figure21成功检测Success Detection这是最基本的反馈告诉LLM上一个动作是否成功执行。比如“动作执行成功”或“动作执行失败”。通俗解释这就像你做完一件事后自己判断有没有做好。如果没做好就再试一次。2被动场景描述Passive Scene Description在每一步动作执行后自动向LLM提供当前场景的语义信息。比如“场景桌子上有可乐、雪碧和巧克力”。通俗解释这就像你环顾四周告诉自己现在周围有什么东西。3主动场景描述Active Scene DescriptionLLM可以主动向环境或人类提问获取需要的信息。比如“你想要可乐还是雪碧”然后根据回答调整计划。通俗解释这就像你遇到不确定的事情时主动问别人的意见。1.3 闭环规划流程Inner Monologue的完整规划流程是一个完美的闭环和人类的思考过程几乎一模一样接收人类指令LLM根据指令和当前上下文生成下一步动作机器人执行这个动作感知模块生成自然语言反馈将反馈添加到上下文中回到步骤2直到任务完成二、惊人的实验结果研究人员在三个完全不同的环境中测试了Inner Monologue的性能结果都非常惊艳。2.1 模拟桌面重排任务第一个实验是在Ravens模拟环境中进行的桌面重排任务比如“把所有方块放到不匹配颜色的碗里”。实验结果如表1所示表1 模拟桌面重排任务的成功率来源论文Table1任务类型CLIPortCLIPortoracleObjectLLMObjectSuccessObjectScene见过的任务24.0%74.0%80.0%90.0%94.0%没见过的任务0.0%0.0%20.0%70.0%86.0%结果分析传统的CLIPort在没见过的任务上成功率为0完全无法泛化只加入物体识别ObjectLLM未见任务成功率提升到20%加入成功检测ObjectSuccess成功率飙升到70%再加入任务进度场景描述ObjectScene成功率达到了惊人的86%这充分证明了闭环反馈的重要性。特别是在未见任务上Inner Monologue的泛化能力远超传统方法。2.2 真实桌面重排任务第二个实验是在真实的UR5e机器人上进行的桌面重排任务包括3块积木堆叠和食物/调味品分类。实验结果如表2所示表2 真实桌面重排任务的成功率来源论文Table2任务Object LLMObjectSuccessObjectSuccess完成3块积木堆叠20%40%40%100%分类水果和瓶子20%50%40%80%平均20%45%40%90%结果分析开环的Object LLM平均成功率只有20%单独加入物体识别或成功检测成功率提升到40-45%同时加入两种反馈平均成功率达到了90%在真实环境中由于感知噪声和执行误差开环方法的表现非常差。而Inner Monologue通过闭环反馈能够自动重试失败的动作大大提升了鲁棒性。2.3 真实厨房移动操作任务第三个实验是在真实的办公室厨房中进行的移动操作任务使用的是谷歌的Everyday Robots机器人。这个实验对比了Inner Monologue和之前的SayCan方法结果如表3所示表3 真实厨房移动操作任务的成功率来源论文Table3方法无干扰有干扰SayCan65%0%Inner Monologue (w/ Success)75%50%Inner Monologue (w/ SuccessObject)80%75%结果分析在没有干扰的情况下Inner Monologue已经比SayCan表现更好在有干扰的情况下比如故意让动作失败SayCan的成功率直接降到了0%因为它没有重试机制而Inner Monologue通过成功检测和物体识别反馈能够自动重试和重规划成功率仍然保持在75%这是最令人震撼的结果。在真实的动态环境中干扰是不可避免的。开环的SayCan在遇到干扰时完全无能为力而Inner Monologue却能像人类一样灵活应对。2.4 令人惊喜的涌现能力除了基本的重试和重规划能力Inner Monologue还涌现出了很多论文中没有明确提到的能力如图5所示图5 Inner Monologue的涌现能力来源论文Figure5这些能力完全是大语言模型自带的不需要任何额外的训练持续适应新指令在任务执行过程中人类可以随时改变目标机器人会自动调整计划。比如你让机器人拿可乐中途说“算了拿雪碧吧”机器人会立刻切换目标。自我提出目标当原目标无法实现时机器人会主动提出替代方案。比如“紫色方块太重了我拿蓝色方块可以吗”多语言交互机器人可以理解多种语言的指令比如中文、英文等。交互式场景理解任务完成后你可以问机器人“碗里有什么”它会根据之前的动作和反馈回答你的问题。三、核心代码实现简化版下面是一个极度简化的Inner Monologue实现展示了它的核心闭环逻辑importopenaiimporttimeclassInnerMonologueRobot: 简化版Inner Monologue机器人 核心逻辑LLM规划 - 执行动作 - 获取反馈 - 更新上下文 - 重新规划 def__init__(self,openai_api_key):openai.api_keyopenai_api_key self.context[]# 对话上下文存储所有的指令、动作和反馈# 系统提示词告诉LLM它的角色和任务self.system_prompt 你是一个机器人规划器。你的任务是根据人类的指令和环境反馈生成下一步的动作。 你可以执行以下动作 - go_to(location): 走到指定位置 - pick_up(object): 拿起指定物体 - put_down(object, location): 把物体放到指定位置 - ask(question): 向人类提问 - done(): 任务完成 每次只生成一个动作。如果动作执行失败重试一次如果还是失败考虑其他方案或询问人类。 defadd_to_context(self,role,content):添加内容到上下文self.context.append({role:role,content:content})defcall_llm(self):调用大语言模型生成下一步动作messages[{role:system,content:self.system_prompt}]self.context responseopenai.ChatCompletion.create(modelgpt-3.5-turbo,messagesmessages,temperature0)returnresponse.choices[0].message.content.strip()defexecute_action(self,action):执行动作并返回反馈这里用模拟的反馈print(f执行动作:{action})time.sleep(1)# 模拟动作执行结果有30%的概率失败importrandomifrandom.random()0.3:return动作执行失败else:ifaction.startswith(go_to):locationaction.split(()[1].split())[0]returnf成功到达{location}elifaction.startswith(pick_up):objaction.split(()[1].split())[0]returnf成功拿起{obj}elifaction.startswith(put_down):obj,locationaction.split(()[1].split())[0].split(, )returnf成功把{obj}放到{location}elifaction.startswith(ask):questionaction.split(()[1].split())[0]print(f机器人问:{question})returninput(你的回答: )elifactiondone():return任务完成else:return未知动作defrun(self,instruction):运行机器人执行给定的指令self.add_to_context(user,instruction)print(f收到指令:{instruction})whileTrue:# 调用LLM生成下一步动作actionself.call_llm()self.add_to_context(assistant,action)# 如果动作是done()任务结束ifactiondone():print(任务完成)break# 执行动作并获取反馈feedbackself.execute_action(action)self.add_to_context(user,feedback)print(f反馈:{feedback})# 测试代码if__name____main__:robotInnerMonologueRobot(你的OpenAI API密钥)robot.run(帮我从厨房拿一瓶可乐)代码说明这个简化版实现了Inner Monologue的核心闭环逻辑用OpenAI的GPT-3.5-turbo作为LLM规划器动作执行和反馈是模拟的实际使用时可以替换成真实的机器人控制代码和感知模块当动作执行失败时LLM会自动重试这完全是它自己学会的不需要任何额外的提示四、局限性与未来展望虽然Inner Monologue取得了非常好的效果但它仍然有一些局限性依赖高质量的自然语言反馈目前的场景描述和成功检测还需要人工标注或专门训练的模型。未来可以用更强大的视觉语言模型比如GPT-4V来自动生成高质量的自然语言反馈。LLM可能会忽略反馈在某些情况下LLM可能会忽略环境反馈继续执行原来的计划。这可以通过更好的提示词工程或微调来改善。上下文长度限制目前的LLM上下文长度有限无法处理非常长的任务。未来随着上下文长度的增加这个问题会得到解决。低级别技能的限制机器人的最终表现还是受限于低级别技能的能力。如果低级别技能本身无法完成某个动作再聪明的规划器也没用。未来的研究方向包括用视觉语言模型完全替代人工标注的反馈让LLM能够学习新的低级别技能引入强化学习让机器人通过试错来改进自己的规划提升LLM的长上下文推理能力五、总结Inner Monologue是机器人领域的一个重要突破。它证明了用自然语言作为机器人的“内心独白”可以让大语言模型成为一个强大的闭环规划器。通过引入简单的自然语言反馈Inner Monologue解决了之前开环规划方法的鲁棒性问题让机器人能够在复杂动态的真实环境中灵活应对各种情况。更重要的是它不需要任何额外的训练只需要用少量的提示词就能让LLM具备这种能力。这篇论文向我们展示了通用基础模型在机器人领域的巨大潜力。未来随着基础模型能力的不断提升我们离真正的通用机器人会越来越近。
【Inner Monologue论文阅读】: 首次将大语言模型嵌入机器人控制闭环,实现自我反思和动态行为调整
论文信息标题Inner Monologue: Embodied Reasoning through Planning with Language Models会议arXiv 2022单位谷歌机器人部门代码https://innermonologue.github.io论文https://arxiv.org/pdf/2207.05608引言机器人也能“三思而后行”想象一下你让机器人去厨房拿一瓶可乐。传统的机器人会怎么做它会生成一个僵硬的计划1. 走到厨房 2. 拿起可乐 3. 拿给你。然后就一条路走到黑——如果可乐不在桌子上它会傻站在那里如果第一次没拿起来它会直接放弃如果冰箱里只有雪碧它完全不知道该怎么办。但人类会怎么做我们会有“内心独白”“可乐不在桌子上那看看冰箱里有没有。”“第一次没拿起来再试一次。”“冰箱里只有雪碧问问用户要不要换雪碧。”这就是谷歌机器人团队在2022年提出的Inner Monologue内心独白的核心思想让机器人也拥有这种“内心独白”能力通过自然语言反馈形成闭环根据环境变化动态调整计划。之前的工作比如SayCan已经证明了大语言模型LLM可以作为机器人的高层规划器但它们都是开环的——生成计划后就不管执行结果了一旦中间出问题整个任务就失败了。而Inner Monologue通过引入三种自然语言反馈源让LLM能够实时感知环境变化进行重试、重规划甚至询问用户大大提升了机器人在复杂动态环境中的鲁棒性。一、Inner Monologue的核心设计Inner Monologue的整体框架如图1所示。它的核心思想非常简单把所有的环境反馈都转换成自然语言然后和之前的对话历史一起输入给LLM让LLM根据完整的上下文生成下一步的动作。图1 Inner Monologue的整体框架来源论文Figure1从图1可以看到整个系统由三个核心部分组成大语言模型LLM作为高层规划器负责理解人类指令、生成动作计划、处理环境反馈感知模块负责将视觉信息转换成自然语言反馈比如“我看到了可乐和雪碧”、“动作执行失败”机器人技能库包含一系列预训练的低级别技能比如“走到桌子”、“拿起可乐”每个技能都有对应的自然语言描述1.1 问题陈述我们的目标是让一个具身机器人执行人类给出的自然语言指令iii。机器人只能执行技能库Π\PiΠ中的预训练技能πk\pi_kπk每个技能都有对应的自然语言描述ℓk\ell_kℓk。规划器也就是LLM需要找到一个技能序列来完成指令iii。同时规划器可以获取环境的自然语言反馈ooo比如成功检测、场景描述、人类反馈等。我们的目标是研究LLM如何利用这些反馈来形成闭环提升规划的鲁棒性。1.2 三种反馈源Inner Monologue引入了三种不同类型的自然语言反馈如图2所示图2 三种类型的自然语言反馈来源论文Figure21成功检测Success Detection这是最基本的反馈告诉LLM上一个动作是否成功执行。比如“动作执行成功”或“动作执行失败”。通俗解释这就像你做完一件事后自己判断有没有做好。如果没做好就再试一次。2被动场景描述Passive Scene Description在每一步动作执行后自动向LLM提供当前场景的语义信息。比如“场景桌子上有可乐、雪碧和巧克力”。通俗解释这就像你环顾四周告诉自己现在周围有什么东西。3主动场景描述Active Scene DescriptionLLM可以主动向环境或人类提问获取需要的信息。比如“你想要可乐还是雪碧”然后根据回答调整计划。通俗解释这就像你遇到不确定的事情时主动问别人的意见。1.3 闭环规划流程Inner Monologue的完整规划流程是一个完美的闭环和人类的思考过程几乎一模一样接收人类指令LLM根据指令和当前上下文生成下一步动作机器人执行这个动作感知模块生成自然语言反馈将反馈添加到上下文中回到步骤2直到任务完成二、惊人的实验结果研究人员在三个完全不同的环境中测试了Inner Monologue的性能结果都非常惊艳。2.1 模拟桌面重排任务第一个实验是在Ravens模拟环境中进行的桌面重排任务比如“把所有方块放到不匹配颜色的碗里”。实验结果如表1所示表1 模拟桌面重排任务的成功率来源论文Table1任务类型CLIPortCLIPortoracleObjectLLMObjectSuccessObjectScene见过的任务24.0%74.0%80.0%90.0%94.0%没见过的任务0.0%0.0%20.0%70.0%86.0%结果分析传统的CLIPort在没见过的任务上成功率为0完全无法泛化只加入物体识别ObjectLLM未见任务成功率提升到20%加入成功检测ObjectSuccess成功率飙升到70%再加入任务进度场景描述ObjectScene成功率达到了惊人的86%这充分证明了闭环反馈的重要性。特别是在未见任务上Inner Monologue的泛化能力远超传统方法。2.2 真实桌面重排任务第二个实验是在真实的UR5e机器人上进行的桌面重排任务包括3块积木堆叠和食物/调味品分类。实验结果如表2所示表2 真实桌面重排任务的成功率来源论文Table2任务Object LLMObjectSuccessObjectSuccess完成3块积木堆叠20%40%40%100%分类水果和瓶子20%50%40%80%平均20%45%40%90%结果分析开环的Object LLM平均成功率只有20%单独加入物体识别或成功检测成功率提升到40-45%同时加入两种反馈平均成功率达到了90%在真实环境中由于感知噪声和执行误差开环方法的表现非常差。而Inner Monologue通过闭环反馈能够自动重试失败的动作大大提升了鲁棒性。2.3 真实厨房移动操作任务第三个实验是在真实的办公室厨房中进行的移动操作任务使用的是谷歌的Everyday Robots机器人。这个实验对比了Inner Monologue和之前的SayCan方法结果如表3所示表3 真实厨房移动操作任务的成功率来源论文Table3方法无干扰有干扰SayCan65%0%Inner Monologue (w/ Success)75%50%Inner Monologue (w/ SuccessObject)80%75%结果分析在没有干扰的情况下Inner Monologue已经比SayCan表现更好在有干扰的情况下比如故意让动作失败SayCan的成功率直接降到了0%因为它没有重试机制而Inner Monologue通过成功检测和物体识别反馈能够自动重试和重规划成功率仍然保持在75%这是最令人震撼的结果。在真实的动态环境中干扰是不可避免的。开环的SayCan在遇到干扰时完全无能为力而Inner Monologue却能像人类一样灵活应对。2.4 令人惊喜的涌现能力除了基本的重试和重规划能力Inner Monologue还涌现出了很多论文中没有明确提到的能力如图5所示图5 Inner Monologue的涌现能力来源论文Figure5这些能力完全是大语言模型自带的不需要任何额外的训练持续适应新指令在任务执行过程中人类可以随时改变目标机器人会自动调整计划。比如你让机器人拿可乐中途说“算了拿雪碧吧”机器人会立刻切换目标。自我提出目标当原目标无法实现时机器人会主动提出替代方案。比如“紫色方块太重了我拿蓝色方块可以吗”多语言交互机器人可以理解多种语言的指令比如中文、英文等。交互式场景理解任务完成后你可以问机器人“碗里有什么”它会根据之前的动作和反馈回答你的问题。三、核心代码实现简化版下面是一个极度简化的Inner Monologue实现展示了它的核心闭环逻辑importopenaiimporttimeclassInnerMonologueRobot: 简化版Inner Monologue机器人 核心逻辑LLM规划 - 执行动作 - 获取反馈 - 更新上下文 - 重新规划 def__init__(self,openai_api_key):openai.api_keyopenai_api_key self.context[]# 对话上下文存储所有的指令、动作和反馈# 系统提示词告诉LLM它的角色和任务self.system_prompt 你是一个机器人规划器。你的任务是根据人类的指令和环境反馈生成下一步的动作。 你可以执行以下动作 - go_to(location): 走到指定位置 - pick_up(object): 拿起指定物体 - put_down(object, location): 把物体放到指定位置 - ask(question): 向人类提问 - done(): 任务完成 每次只生成一个动作。如果动作执行失败重试一次如果还是失败考虑其他方案或询问人类。 defadd_to_context(self,role,content):添加内容到上下文self.context.append({role:role,content:content})defcall_llm(self):调用大语言模型生成下一步动作messages[{role:system,content:self.system_prompt}]self.context responseopenai.ChatCompletion.create(modelgpt-3.5-turbo,messagesmessages,temperature0)returnresponse.choices[0].message.content.strip()defexecute_action(self,action):执行动作并返回反馈这里用模拟的反馈print(f执行动作:{action})time.sleep(1)# 模拟动作执行结果有30%的概率失败importrandomifrandom.random()0.3:return动作执行失败else:ifaction.startswith(go_to):locationaction.split(()[1].split())[0]returnf成功到达{location}elifaction.startswith(pick_up):objaction.split(()[1].split())[0]returnf成功拿起{obj}elifaction.startswith(put_down):obj,locationaction.split(()[1].split())[0].split(, )returnf成功把{obj}放到{location}elifaction.startswith(ask):questionaction.split(()[1].split())[0]print(f机器人问:{question})returninput(你的回答: )elifactiondone():return任务完成else:return未知动作defrun(self,instruction):运行机器人执行给定的指令self.add_to_context(user,instruction)print(f收到指令:{instruction})whileTrue:# 调用LLM生成下一步动作actionself.call_llm()self.add_to_context(assistant,action)# 如果动作是done()任务结束ifactiondone():print(任务完成)break# 执行动作并获取反馈feedbackself.execute_action(action)self.add_to_context(user,feedback)print(f反馈:{feedback})# 测试代码if__name____main__:robotInnerMonologueRobot(你的OpenAI API密钥)robot.run(帮我从厨房拿一瓶可乐)代码说明这个简化版实现了Inner Monologue的核心闭环逻辑用OpenAI的GPT-3.5-turbo作为LLM规划器动作执行和反馈是模拟的实际使用时可以替换成真实的机器人控制代码和感知模块当动作执行失败时LLM会自动重试这完全是它自己学会的不需要任何额外的提示四、局限性与未来展望虽然Inner Monologue取得了非常好的效果但它仍然有一些局限性依赖高质量的自然语言反馈目前的场景描述和成功检测还需要人工标注或专门训练的模型。未来可以用更强大的视觉语言模型比如GPT-4V来自动生成高质量的自然语言反馈。LLM可能会忽略反馈在某些情况下LLM可能会忽略环境反馈继续执行原来的计划。这可以通过更好的提示词工程或微调来改善。上下文长度限制目前的LLM上下文长度有限无法处理非常长的任务。未来随着上下文长度的增加这个问题会得到解决。低级别技能的限制机器人的最终表现还是受限于低级别技能的能力。如果低级别技能本身无法完成某个动作再聪明的规划器也没用。未来的研究方向包括用视觉语言模型完全替代人工标注的反馈让LLM能够学习新的低级别技能引入强化学习让机器人通过试错来改进自己的规划提升LLM的长上下文推理能力五、总结Inner Monologue是机器人领域的一个重要突破。它证明了用自然语言作为机器人的“内心独白”可以让大语言模型成为一个强大的闭环规划器。通过引入简单的自然语言反馈Inner Monologue解决了之前开环规划方法的鲁棒性问题让机器人能够在复杂动态的真实环境中灵活应对各种情况。更重要的是它不需要任何额外的训练只需要用少量的提示词就能让LLM具备这种能力。这篇论文向我们展示了通用基础模型在机器人领域的巨大潜力。未来随着基础模型能力的不断提升我们离真正的通用机器人会越来越近。