1 Introduction
自然语言处理(NLP)的快速发展导致了大型语言模型(LLMs)的发展,如BERT[2]、GPT-3[3]和Codex[4],这些模型正在对广泛的应用程序进行革命。这些模型在文本生成、机器翻译和代码合成等各种任务中都取得了显著的效果。这个模型集合的最新成员是OpenAI ChatGPT[1],这是一个预训练的生成文本模型,使用人类反馈进行了微调。与以前主要基于单个提示符操作的模型不同,ChatGPT通过对话提供了特别令人印象深刻的交互技能,结合了文本生成和代码合成。我们在本文中的目标是研究ChatGPT的能力是否以及如何推广到机器人领域。
在本文中,我们旨在展示ChatGPT在机器人应用中的潜力。我们概述了一个关键概念,它可以解锁用ChatGPT解决机器人应用程序的能力,这是一个高级函数库的创建。鉴于机器人技术是一个多样化的领域,存在多种平台、场景和工具,因此存在各种各样的库和api。我们不要求LLM输出特定于平台或库的代码(这可能涉及大量的微调),而是创建一个简单的高级函数库供ChatGPT处理,然后在后端将其链接到所选平台的实际api。因此,我们允许ChatGPT从自然对话中解析用户意图,并将其转换为高级函数调用的逻辑链。我们还概述了一些帮助ChatGPT解决机器人任务的提示工程指南。
我们的研究表明,ChatGPT能够以零概率的方式解决各种与机器人相关的任务,同时适应多种形式因素,并允许通过对话进行闭环推理。此外,我们的目标是展示当前模型的局限性,并提供如何克服它们的想法。我们的主要贡献如下:
1)我们演示了将ChatGPT应用于机器人任务的管道。该管道涉及多种提示技术,如自由形式的自然语言对话、代码提示、XML标记和闭环推理。我们还展示了用户如何利用高级函数库,允许模型快速解析人类意图并生成解决问题的代码;
2)我们通过实验评估ChatGPT执行各种机器人任务的能力。我们展示了模型在解决数学、逻辑和几何操作时的能力和局限性,然后探索涉及嵌入代理、空中导航和操作的更复杂的场景。我们包括由ChatGPT的计划产生的模拟和现实世界的实验;
3)我们介绍了一个协作开源平台PromptCraft,在那里,研究人员可以一起工作,在机器人环境中与LLM合作时提供积极(和消极)提示策略的例子。提示工程主要是一门经验科学,我们希望为研究人员提供一个简单的界面,让他们作为一个社区贡献知识。随着时间的推移,我们的目标是提供不同的环境,用户可以测试他们的提示,并欢迎新的贡献;
4)我们发布了一个基于Microsoft AirSim[16]并结合ChatGPT集成的模拟工具。这个AirSim-ChatGPT模拟包含了一个用于无人机导航的示例环境,旨在成为研究人员探索ChatGPT如何实现机器人场景的起点。
通过这项工作,我们希望为未来融合LLMs和机器人技术的研究开辟新的机会和途径。我们相信,我们的发现将激励和指导这一令人兴奋领域的进一步研究,为开发新的、创新的机器人系统铺平道路,这些系统可以以自然、直观的方式与人类互动。欲了解更多细节,我们鼓励读者在项目网页上查看我们实验的详细视频(链接)。
2 Robotics with Chatgpt
为机器人控制Prompting LLms提出了几个挑战,例如提供对问题的完整而准确的描述,确定允许的函数调用和api的正确集合,以及使用特殊参数对答案结构进行偏向。为了在机器人应用程序中有效地使用ChatGPT,我们构建了一个由以下步骤组成的管道:
1)首先,我们定义了一个高级机器人函数库。这个库可以特定于形式因素或感兴趣的场景,并且应该映射到机器人平台上的实际实现,同时命名应该足够描述性以便ChatGPT遵循。
2)接下来,我们为ChatGPT构建一个提示符,该提示符描述了目标,同时还标识了库中允许的高级函数集。提示符还可以包含关于约束的信息,或者ChatGPT应该如何组织其响应。
3)用户保持在循环中,通过直接分析或模拟来评估ChatGPT输出的代码,并就输出代码的质量和安全性向ChatGPT提供反馈。
4)在迭代chatgpt生成的实现之后,最终的代码可以部署到机器人上。
我们在图2中以家用机器人为例展现了该管道的可视化描述。
2.1 Construction and description of the robotics API library
机器人技术是一个成熟的领域,已经存在大量的库可以用于感知和动作领域的基本功能(如物体检测和分割、运动规划、控制以及抓取等)。如果在提示中正确指定,LLM可以使用这些预定义的功能函数进行机器推理和执行。
一个重要的提示设计要求是所有的API命名必须描述整个函数行为,清晰的命名可以保证LLM对API之间的功能连接进行推理,从而产生期望的结果输出。因此, 我们可以定义高级函数,它们作为各自库的实际实现的包装器。例如,一个名为detect_object(object_name)的函数可以在内部链接到一个OpenCV函数或计算机视觉模型,而像move_to(x, y, z)这样的函数可以在内部调用一个运动规划和障碍物躲避管道,以及适合无人机的低级电机命令。在提示符中列出这样一组高级函数,对于允许ChatGPT创建行为原语的逻辑序列,以及将其泛化到不同的场景和平台来说非常关键。
根据上下文,我们建议解释api的功能,如果需要,将它们分解为具有明确输入和输出的子组件,类似于代码文档。在图3中,我们展示了一个用于家庭烹饪机器人场景的良好API提示策略示例。提出的策略允许ChatGPT根据机器人实际能够执行的功能来推理任务的顺序和内容。与此相反,我们建议感兴趣的读者参考附录a .1,了解在没有给出API指导的情况下ChatGPT是如何推理的,从而导致无限制的基于文本的答案,或者参考附录a .2,了解API不规范的示例,从而导致对函数调用参数产生幻觉。
我们注意到,与经典符号AI的脆弱结构不同,它需要对象和函数之间严格的预定义关系,LLM能够在与特定问题相关时定义新的函数和概念。这种能力在处理机器人应用程序时赋予LLM灵活性和健壮性。图4显示了ChatGPT如何在需要解决问题时创建新的高级概念,甚至是低级代码,甚至是融合现有api。循环中的用户可以利用这种能力作为一种设计策略,若当前的api不足以解决手头的任务时,可以在LLM的帮助下迭代地定义新的api。
2.2 Clear description of the task details in the prompt
通过对所需的机器人任务及其上下文提供清晰而简洁的描述,ChatGPT可以生成更准确的响应。除了机器人api,一个好的上下文描述应该包含:
1)约束和需求:指定与任务相关的约束或需求。如果任务涉及移动对象,则可以指定要移动对象的重量、大小和形状。
2)环境:描述机器人任务发生的环境。例如,如果任务是在迷宫中穿行,你可以描述迷宫的大小和形状,以及需要避免的障碍物或危险。
3)当前状态:描述机器人系统的当前状态。例如,如果任务是捡起一个物体,您可能会描述机器人和物体的当前位置和方向。
4)目标和目的:陈述任务的目标和目的。如果任务是组装一个拼图,您可以指定需要组装的块数和预期的完成时间。
5)解决方案示例:演示如何解决类似的任务,作为指导LLM解决方案策略的一种手段。例如,如果一项任务涉及与用户的交互,我们可以描述一个例子,说明机器人应该如何以及何时要求用户输入(见图5)。注意,启动也会引入偏见,因此我们应该提供不同范围的例子,并避免过度说明性的语言。
3 ChatGPT abilities for solving robotics problems
在本节中,将更深入地研究ChatGPT解决机器人问题的能力。具体来说,我们研究了ChatGPT在处理各种机器人相关任务时的表现,从简单的时空推理问题到现实世界的空中机器人以及操作部署。我们强调了在这些实验中观察到的几个有趣的功能。
虽然ChatGPT的功能令人印象深刻,但不应忽视实际的部署安全考虑因素,特别是在物理机器人部署的情况下。如图2所示,我们发现有必要在循环中设置一个人来监视和干预由ChatGPT生成的意外行为。此外,在将模型部署到现实世界之前,仿真平台的使用有助于评估模型的性能。我们强调,在机器人技术中使用ChatGPT并不是一个完全自动化的过程,而是作为一种增强人类能力的工具。
我们在附录b中提供了本部分问题的所有初始提示,为了简洁起见,我们只从每个任务中摘录一些简短的内容。完整的对话可以在以下存储库中找到。
3.1. Zero-shot task planning
首先,我们注意到ChatGPT能够以零目标的方式解决几个机器人任务,只需要访问提示符和函数库的描述,而不需要实际的代码示例。
3.1.1. Spatio-temporal reasoning: catching a basketball with visual servoing
在这个例子中,我们要求ChatGPT控制一个平面机器人,该机器人配备了一个朝上的摄像头。该机器人将利用基于篮球外观的视觉伺服方法来捕捉篮球。我们看到ChatGPT能够适当地使用提供的API函数,推理球的外观并调用相关的OpenCV函数,并基于比例控制器命令机器人的速度。
更令人印象深刻的是,ChatGPT可以使用SVG代码估计相机图像中球和天空的外观。这种行为暗示了一种可能性,即LLM跟踪的隐式世界模型超越了基于文本的概率。
3.1.2. Aerial robotics: real-world drone flight with intuitive human-robot interface (Click for video)空中机器人:具有直观人机界面的真实无人机飞行
我们还使用ChatGPT和一个不同的API实现来控制一个真实的无人机。ChatGPT在用户和机器人之间提供了一个非常直观的自然语言界面,根据模糊和定义不清的指令编写机器人代码,并在必要时提出澄清性问题。该模型还能够仅基于提示符的基本api为无人机导航(圆形和割草机检查)编写复杂的代码结构。
3.1.3. Aerial robotics: AirSim industrial inspection ( click for video)
我们还使用Microsoft AirSim[16]模拟器将ChatGPT应用于模拟域。我们探索了一个潜在的非技术用户指导模型控制无人机并执行工业检查场景的想法。我们从下面的摘录中观察到,ChatGPT能够有效地解析用户输入的意图和几何线索,并准确地控制无人机。
3.2 User on the loop: interactive conversations for complex tasks
下一步,我们将重点放在ChatGPT执行更复杂任务的能力上,用户在循环中提供文本反馈。我们观察到,这种交互模式允许复杂的结构,如课程学习,教授系统小规模的技能,这些技能可以组合成更大更复杂的任务。此外,我们发现ChatGPT能够获得关于生成的代码或其性能的高级文本反馈,并将其映射到所需的低级代码更改,从而使潜在的非技术用户能够轻松地与之交互。
3.2.1. Manipulation with curriculum learning(Click for video)
作为第一个例子,我们使用机械臂设置了一个块排列任务,为此我们设计了一个课程。ChatGPT被要求学习简单的拾取物体和放置物体的技能。随后,当要求使用这些技能来执行更复杂的区块排列任务时,ChatGPT将这些学习到的技能逻辑地连接在一起。此外,当使用木块构建Microsoft徽标时,该模型在连接文本域和物理域时展示了一个引人入胜的泛化示例。这项任务需要记住公司标志的样子,包括它的颜色,然后将标志抽象为可以由现有机器人动作构建的物理部分。
3.2.2. Aerial robotics: AirSim obstacle avoidance (Click for video)
我们要求ChatGPT为一架配备了面向前方的距离传感器的无人机编写一个具有障碍物躲避的目标实现算法。ChatGPT构建了规避算法的大部分关键构建模块,但需要一些关于无人机方向的步骤的人工反馈。尽管反馈完全以高级文本形式提供,但ChatGPT通过在适当的地方对代码进行本地化更改来改进其解决方案。
3.3. Perception-action loops
我们还评估了ChatGPT推理感知-动作循环的能力。在第一层,我们概述了模型使用API库在其代码输出中构建感知-动作循环的能力。该模型正确地利用图像采集和物体检测等感知功能,提取机器人导航和控制所需的相关信息。
在复杂性的第二个层面上,我们试图回答ChatGPT的对话系统本身是否可以作为一个封闭的反馈感知-行动循环的问题。我们探索了通过文本对话不断向模型提供感知信息的想法,在对话期间,我们将观察结果(转换为文本格式)输入到ChatGPT。我们发现ChatGPT能够解析这一观察流并输出相关操作。
3.3.1. Embodied agent: closed loop object navigation with API library (Click for video)
作为函数库的一部分,我们为ChatGPT提供了对计算机视觉模型的访问,并让它探索未知的环境并导航到用户指定的对象。对象检测API(后端为YOLOv8[17])返回边界框,ChatGPT生成代码来估计相对对象角度并导航到它们。当我们向ChatGPT提供来自深度传感器的额外信息时,它产生了一个改进的算法,带有像素深度掩蔽,表示为模块化管道。
3.3.2. Embodied agent: closed loop visual-language navigation using ChatGPT’s dialogue(Click for video)
在实验中,我们还评估了ChatGPT使用其对话功能作为感知-动作控制反馈循环的能力。在这种操作模式下,新的状态观测数据以对话文本的形式输入系统,机器人在每一步执行模型的输出,生成新的观测数据。我们注意到,这种类型的行为严重依赖于基于对话框的LLM,例如ChatGPT,它可以自然地接收观察流。我们使用Habitat模拟器[18]构建了一个场景,并让代理导航到感兴趣的区域。在每个步骤中,我们根据可视对象相对于代理的极坐标向ChatGPT提供场景描述。我们限制ChatGPT的输出只返回向前的运动距离和转弯角度。我们验证了该模型能够完成简单的导航任务,但对于更复杂的任务和环境,如何以文本或向量形式正确描述场景上下文还需要更多的研究。
要了解更多的实验,请参阅附录C。
C. Additional experiments
C.1. Zero-shot manipulation: Pick and place, stacking, and pushing
Full conversation found at:
https://github.com/microsoft/PromptCraft-Robotics/blob/main/examples/manipulation/manipulation_zeroshot.md
C.2. Controlling multiple robot form factors from a single prompt
Full conversation found at:
https://github.com/microsoft/PromptCraft-Robotics/blob/main/examples/multiple_robots/multiple_robots.md
3.4 Reasoning and common-sense robotics tasks
我们让ChatGPT回答简单的逻辑推理问题,以及基本的机器人问题,如附录d所示。我们观察到ChatGPT提供了丰富的常识和逻辑推理能力基础,在此基础上可以构建更高级的机器人能力。这种逻辑基础允许用户更自然地与模型交互,而不是必须从头开始提示或定义每个概念。此外,ChatGPT对基本机器人概念(如控制、相机几何形状和物理形状因素)的开箱即出的理解使其成为可推广和用户友好的机器人管道的绝佳选择。
4. PromptCraft, a collaborative tool for LLM + Robotics research
提示是在大型语言模型(LLMs)中生成所需行为的关键组件。在LLMs与机器人的交集中,提示工程尤其具有挑战性,因为缺乏全面和可访问的资源来提供积极(和消极)交互的示例。为了解决这一差距,我们引入了PromptCraft,这是一个协作开源平台,供研究人员分享提示策略的示例,并在样本机器人环境中测试他们的算法。
PromptCraft是一个基于github的平台,允许研究人员分享不同机器人类别中的即时工程策略示例,如导航、抓取和操作。用户可以提交他们的示例并对其他人的提交进行评分,我们希望这将为与LLMs合作的研究人员创建一个社区驱动的资源。提示和对话的提交主要基于文本,但我们鼓励用户分享描述机器人行为的视频和图像,特别是在现实世界的部署场景中。
除了提供一个分享提示示例的平台外,PromptCraft还提供了一个带有ChatGPT包装器的AirSim[16]环境,供研究人员在受控的模拟设置中对提示和算法进行原型化。我们欢迎新的测试环境的贡献,以扩大研究人员可以测试其算法的场景范围。
通过Promptcraft,我们的目标是支持快速工程的实证科学,并使研究人员能够推动该领域的发展。
https://github.com/microsoft/PromptCraft-Robotics
5. Conclusions and Future Work
我们提出了一个将ChatGPT用于机器人应用程序的框架。该框架需要设计和实现一个用于机器人控制的api库,该api库适用于ChatGPT的提示工程。我们讨论了创建此类api的设计原则和提示策略,这些策略可用于通过ChatGPT为机器人应用程序生成代码。建议的框架允许用户在循环中通过一系列方法(包括模拟和手动检查)测试、验证和验证生成的代码。我们演示了该框架如何用于多种应用,从简单的常识性机器人知识任务一直到空中机器人、操作和视觉导航的部署。
我们相信,这项工作只展示了在机器人领域运行的大型语言模型的交集中可能实现的一小部分。我们不仅希望激励其他研究人员采取这些下一步,而且还希望帮助他们使用PromptCraft协作工具取得成果。
我们强调,这些工具不应该完全控制机器人管道,特别是对于关键的安全应用。考虑到LLM最终产生错误响应的倾向,在机器人上执行代码之前,在人工监督下确保代码的解决方案质量和安全性是相当重要的。我们希望几项研究工作能够遵循适当的方法,为LLM在机器人领域的运行正确地设计、构建和创建测试、验证和验证管道。
我们在这项工作中展示的大多数示例都演示了开放的感知-动作循环,其中ChatGPT生成代码来解决任务,之后没有向模型提供反馈。考虑到闭环控制在感知-动作循环中的重要性,我们希望未来在这一领域的研究能够探索如何正确使用ChatGPT的能力以文本或特殊目的模式的形式接收任务反馈。
请注意,本文主要是在ChatGPT的帮助下完成的,并由作者提供提示。模型的输出经过了彻底的修改和调整,我们注意到LLM的使用可以显著地加快写作过程,我们建议有兴趣的读者使用它们。