总述

考虑到大型语言模型( large language models,LLMs )在语言理解、生成、交互和推理等方面表现出卓越的能力,我们主张LLMs可以作为控制器来管理现有的人工智能模型以解决复杂的人工智能任务

LLM缺陷:为什么我们需要Agent

  • 受限于文本生成的输入和输出形式,目前的LLMs缺乏处理视觉和语音等复杂信息的能力
  • 在现实场景中,一些复杂任务通常由多个子任务组成,因而需要多个模型的调度和协作,这也超出了语言模型的能力范围;
  • 零样本或少样本情况下仍然弱于一些专业模型(例如,微调模型)

可行思路:可以将ChatGPT(LLM)作为不同模型之间的桥梁,为不同的任务调度不同的模型。

Language as a generic interface for LLMs to collaborate with AI models
语言(智能化的提示词)作为LLMs与AI模型协作的通用接口

HuggingGPT的模型步骤

具体的步骤是:

  1. 任务规划:使用ChatGPT分析用户的请求,了解其意图,并将其拆解成可能的可解决任务。
  2. 模型选择:为了解决规划的任务,ChatGPT根据模型描述选择驻留在Hugged Face上的专家模型
  3. 任务执行:调用并执行每个选定的模型,并将结果返回给ChatGPT。
  4. 回答生成:使用ChatGPT融合所有模型的推理,生成回答返回给用户

分步骤拆解

第一步:任务规划

1.1 模型调用规范

对任务分类

通过形成一个指定的JSON模板——

1
[{"task": task, "id", task_id, "dep": dependency_task_ids, "args": {"text": text, "image": URL, "audio": URL, "video": URL}}]
  • dep 字段表示前一个任务的id,它产生了当前任务所依赖的新资源。
  • args 输入任务模型的参数——如文本、图像、音频、视频

1.2Demonstration-based Parsing

每个demonstration是一组在任务规划上的输入和输出,输入是用户的请求,输出是期望的任务序列

demonstration包含解析任务之间的依赖,有效帮助HuggingGPT理解任务之间的逻辑关系,并且决定执行顺序和资源依赖。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// 用户提问:首先生成e3 . jpg的HED图像,然后基于HED图像和文本"一个女孩在读一本书",创建一个新的图像作为响应
[
{
"task": "pose-detection",
"id": 0,
"dep": [
-1
],
"args": {
"im age": "e3.jpg"
}
},
{
"task": "pose-text-to-image",
"id": 1,
"dep": [
0
],
"args": {
"text": "a girl reading a book",
"image": "<resource>-0"
}
}
]

模型内置一系列task,通过训练能理解前后先序关系

第二步:模型选择

为解析后的任务列表中的每个任务选择最合适的模型

使用in-context task-model assignment动态选择模型

  • 首先根据任务类型筛选模型,以选择与当前任务相匹配的模型。
  • 选择前k个模型

第三步:模型调用

模型分类

HuggingGPT不能在任务规划阶段指定未来发生的任务。为了解决这个问题,我们使用一个唯一的符号<resource>来管理真实的资源依赖

  • 在任务规划阶段,如果有任务依赖于任务task_id,HuggingGPT就会把这个符号放在任务参数的相关资源子域中。
  • 在任务执行阶段,HuggingGPT动态地用这个预备任务产生的资源替代这个symbol。这个方法使得HuggingGPT能高效处理任务执行过程中的资源依赖性。

第四步:回答生成

以结构化的格式发送给LLM