摘要
本文介绍了一项有关使用OpenAI的ChatGPT以用于机器人技术应用的实验研究。我们概述了一个策略,该策略结合了提示工程的设计原理并创建了高级函数库,该函数库可以适应不同的机器人任务,模拟器和形态。我们主要关注对不同提示工程技术,以及执行各种类型机器人任务有效性的评估。除了特定任务的提示函数的使用以及通过对话进行闭环推理外,我们还探索了ChatGPT进行自由对话,解析XML标签和生成代码的能力。我们的研究涵盖了机器人技术领域内的一系列任务,从基本的逻辑,几何和数学推理,再到复杂的领域,例如空中导航,操控和实体智能体。我们表明,ChatGPT可以有效地解决大量的此类任务,同时允许用户通过自然语言指令与之进行交互。除这些研究外,我们还引入了一种名为PromptCraft的开源研究工具,该工具包含一个平台,其中研究员可以在其中协作上传并投票能够促进机器人应用的良好样例,同时还包含了用ChatGPT集成的机器人模拟器,使得用户更容易使用基于ChatGPT的机器人技术。
1.介绍
自然语言处理(NLP)的快速发展导致了大型语言模型(LLM)的发展,例如BERT,GPT-3和Codex,它们正在彻底改变各种应用场景。这些模型在各种任务中取得了显着的结果,例如文本生成,机器翻译和代码生成等。这些模型家族的最新成员是OpenAI ChatGPT,这是一种预训练的文本生成模型,使用人类反馈进行了微调。与以前仅在单个提示(任务)下运行的模型不同,ChatGPT通过对话提供了特别令人印象深刻的交互技巧,将文本生成与代码生成相结合。我们本文的目标是研究ChatGPT的能力以及如何推广到机器人技术领域。
与纯文本应用不同,机器人系统需要深入理解现实世界的物理规则,环境上下文同时具备执行物理行为的能力。一个生成式机器人模型需要具有强大的常识知识和复杂的世界模型,并且能够与用户交互以解释和执行物理命令,并且对现实世界进行感知。这些挑战超出了语言模型的原始范围,因为它们不仅需要理解给定文本的含义,而且还需将意图转化为具备物理动作的逻辑序列。
近年来,将语言模型纳入机器人系统系统中已经有不同的尝试。这些努力主要集中在使用语言字符嵌入模型,LLM特征以及用于特定形式或场景的多模态模型。应用范围从视觉语言导航,基于语言的人机交互和视觉语言操作控制。但是,尽管在机器人技术中使用LLM具有潜在优势,但大多数现有方法都受到刚性范围和有限的函数集的限制,或者由于其开环特性而不允许从用户反馈中进行流体交互和行为纠正。
当使用具有高级智能体计划或代码生成任务时,诸如GPT-3,LaMDA和Codex之类的模型在zero-shot机器人场景中表现出希望。这些早期的演示激发了我们调查ChatGPT作为机器人领域的潜在用途更广泛的工具,因为它结合了自然语言和代码生成模型的优势以及对话的灵活性。ChatGPT参与自由形式的对话和捕获长上下文的能力使用户可以以更自然的方式与模型进行互动,并具有灵活的行为纠正。
在本文中,我们旨在证明ChatGPT用于机器人技术应用的潜力。我们概述了一个关键概念,即构建一个高级函数库,该概念可以解锁ChatGPT解决机器人应用程序的能力。考虑到机器人技术是一个多元化的领域,存在多种平台,场景和工具,因此存在各种各样的库和API。我们没有要求LLM输出特定平台或函数库的代码,这可能涉及广泛的微调,而是创建一个简单的高级函数库,然后通过改函数库将其链接到后端实际选择的平台以及API。因此,我们允许ChatGPT从自然对话中解析用户意图,并将其转换为高级函数调用的逻辑链。我们还概述了一些及提示工程指南,以帮助ChatGPT解决机器人技术任务。
我们的研究表明,ChatGPT能够以zero-shot的方式解决各种与机器人相关的任务,同时适应多种形式,并允许通过对话进行闭环推理。此外,我们旨在展示当前的模型限制,并提供有关如何克服它们的想法。 我们的主要贡献如下:
- 我们演示了将ChatGPT应用于机器人任务的管道。该管道涉及多种提示技术,例如自由形式的自然语言对话,代码提示,XML标签和闭环推理。我们还展示了用户如何利用高级函数库,以允许模型可以快速解析人类意图并生成解决问题的代码;
- 我们引入了一个协作开源平台PromptCraft,研究人员可以在这里共同工作,以提供在LLM和机器人环境联合工作的正例(和负例)提示策略的示例。提示工程是一门基本的经验科学,我们希望为研究人员提供一个简单的界面,以作为一个社区进行知识贡献。我们的目标是提供不同的环境,用户可以测试他们的提示,并欢迎新的贡献;
- 我们发布了一个模拟工具,该工具与Microsoft AirSim结合使用,并集成了ChatGPT。 AirSim-ChatGPT 模拟包含用于无人机导航的示例环境,并旨在成为研究人员探索ChatGPT如何启用机器人方案的起点。
通过这项工作,我们希望为未来融合LLM和机器人技术的研究开辟新的机会和途径。我们认为,我们的发现将激发和指导在这个领域的进一步研究,为开发新的创新机器人系统系统铺平了道路,这些系统可以以自然,直观的方式与人类互动。有关更多详细信息,我们鼓励读者在项目网页中查看我们实验的详细视频。
2.Robotics with ChatGPT
提示LLM以进行机器人技术控制具有一些挑战,例如对问题提供完整而准确的描述,确定正确的可用的函数调用和API集合,并使用特殊参数改变答案结构。为了有效利用ChatGPT进行机器人技术应用,我们构建了由以下步骤组成的管道:
- 首先,我们定义一个高级机器人函数库。该库可以包含特定的场景,并应将其映射到机器人平台的实际实现,并用ChatGPT可以理解的描述进行命名;
- 接下来,我们为ChatGPT构建提示,该提示描述了目标,同时还包含了库中允许调用的高级函数。该提示还可以包含有关约束的信息,或者ChatGPT应该如何构建其响应;
- 用户处于循环中,通过直接分析或通过仿真来评估ChatGPT的代码输出,并为ChatGPT提供有关输出代码质量和安全性的反馈;
- 在迭代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)之类的函数可以内部调用运动规划和避障pipeline,以使用底层电机命令驱动无人机。在提示中列出这些的高级函数集合允许ChatGPT创建行为基础的逻辑序列,并泛化到不同场景和平台。
根据上下文,我们希望能够解释API的功能,并在需要时将其分解为具有清晰输入和输出的子组件,类似于代码文档。在图3中,我们提供了一个很好的API提示策略的示例,以用于家庭烹饪机器人场景。所提出的策略允许ChatGPT根据机器人实际上可以执行任务的命令来推理任务的顺序和内容。相比之下,我们推荐有兴趣的读者阅读附录A.1,以了解当没有给出API指南的情况下,ChatGPT是如何推理的,这将导致无限答案文本,或者是附录A.2,是一个未具体指定API的示例,这导致函数调用参数出现hallucinations。
我们注意到,与经典symbolic AI中需要对象和函数之间具有严格的预定义关系,这种脆性结构不同,LLM能够在处理特定相关问题时完全定义新函数和概念。该函数在处理机器人技术应用时赋予了LLM的灵活性和鲁棒性。图4显示了ChatGPT如何在需要解决问题的情况下创建新的高级概念,甚至是低级代码,甚至可以融合现有的API。循环中的用户可以利用此能力作为设计策略,并且在当前的函数不足以求解手头的任务时,可以在LLM的帮助下迭代定义新的API。
2.2 Clear description of the task details in the prompt
通过对所需的机器人任务及其上下文提供清晰简洁的描述,ChatGPT可以产生更准确的响应。除了机器人API以外,良好的上下文描述应包含:
- 约束和要求:指定与任务相关的约束或要求。例如,如果任务涉及移动目标,则可以指定要移动的目标的重量,大小和形状。
- 当前状态:描述机器人系统的当前状态。例如,如果任务是拾取一个目标,则可以描述机器人和目标的当前位置和方向。
- 目标和物体:陈述任务的目标和物体。如果任务要组装一个拼图,则可以指定需要组装的零件数量以及所需的完成时间。
- 解决方案示例:说明如何解决类似任务以作为一种指导LLM提出解决策略的手段。例如,如果任务涉及与用户的交互,我们可以描述一个示例,即机器人什么时候以及如何使用用户的输入的示例(见图5)。请注意,启动也可以引入偏见,因此我们应该提供各种示例,并避免过度规定的语言。
即使是设计良好的提示,也可能没有包含问题所需的所有必要信息,或者在某些情况下,ChatGPT无法以zero-shot的方式生成正确的响应。在这些情况下,我们发现用户可以采取的简单有效的策略是在聊天格式中发送其他说明来描述问题,并使其自身纠正。依靠GPT-3或Codex模型的先前方法要求用户重新设计输入提示并从头开始生成新的输出。但是,ChatGPT的对话能力是一种令人惊讶的有效校正工具。第3.2节和补充视频显示了用户和ChatGPT之间交互行为的示例。
2.3 Special arguments to bias the answer’s structure
可以使用不同的提示方法来迫使模型的输出遵守某些特定模式。例如,用户可能希望自动解析ChatGPT的输出,以便在其他脚本中使用它以实时执行。如图3所示,一个简单的策略是直接要求ChatGPT以特定语言(例如Python,C ++)生成代码。通常以下是自由格式的文本段落,然后是代码块。可以通过要求模型使用XML标签来帮助我们自动解析输出,从而产生更结构化的响应,如图5所示。
在其他设置中,用户可能希望迫使模型按照列表模式输出答案,而不是代码或自由形式的文本。附录A.3显示了这种方法的示例,其中用户提示的最后一行用于指导模型的输出。
3.ChatGPT abilities for solving robotics problems
在本节中,我们将更深入地研究ChatGPT解决机器人问题的能力。具体而言,我们研究了ChatGPT在处理各种机器人技术相关的任务时的表现,从简单的时空推理问题一直到现实世界中的空中智能体和操纵部署。我们强调了在这些实验中观察到的几种有趣的能力。
尽管ChatGPT的能力令人印象深刻,但实际部署安全考虑不应被忽略,尤其是在物理机器人部署的情况下。如图2所示,我们发现有必要在循环上让人类为ChatGPT产生意外行为的情况下进行监视和干预。此外,模拟器的使用可能特别有助于在现实世界中部署之前评估模型的性能。我们强调,将ChatGPT用于机器人技术不是一个完全自动化的过程,而是充当增强人类能力的工具。
我们在附录B中为本节中的问题提供了所有初始提示。为了简洁起见,我们仅包括每个任务中的简短摘录。完整的对话可以在以下git库中找到:https://github.com/microsoft/PromptCraft-Robotics。