在前面两篇博文中已经粗略介绍了增强语言模型和Tool Learning,本篇文章看四篇代表性的自动化框架,HuggingGPT、AutoGPT、WebGPT、WebCPM。
- Augmented Language Models(增强语言模型)
- Toolformer and Tool Learning(LLMs如何使用工具)
HuggingGPT
HuggingGPT是tool learning中tool-augmented learning的一类,具体来说,它是一个以LLMs为控制器来管理来自Huggingface社区中诸多小模型的框架,其中用户的自然语言请求将视为一个通用接口,再经过LLMs的解析和规划后,再根据Huggingface小模型工具的描述进行模型选择,执行完每个小模块的任务后,再对结果进行处理和返回给用户。
如上图所示,其执行步骤分为4步:
- Task Planning。任务规划,其利用ChatGPT分析用户的请求,并将用户请求分解为一系列可解决的子任务。不过复杂的请求往往涉及多个任务,还需要确定这些任务的依赖关系和执行顺序,因此HuggingGPT 在其提示设计中采用了基于规范的指令和基于演示的解析,如下图所示,对于输入的"Look at /exp1.jpg, Can you tell me how many objects in the picture?",模型最终得到两个子任务。
[{"task": "image-to-text",
"id": 0, "dep": [-1],
"args": {"image": "/exp1.jpg"}},
{"task": "object-detection",
"id": 0, "dep": [-1],
"args": {"image": "/exp1.jpg" }}]
- Model selection。模型选择,根据分解后的子任务和对模型描述的理解(描述包括模型功能、体系架构、支持的语言和域、许可等信息),由ChatGPT选择托管在Hugging Face上的各类专家小模型。如下图所示,模型的选择会首先根据任务召回一些可以做当前子任务的模型,然后下载量选择前K名的模型作为候选,然后将其作为prompt上下文输入给ChatGPT进行选择。
- Task execution。任务执行,调用并执行每个专家小模型,并将结果返回给ChatGPT。
- Response generation。响应生成,HuggingGPT先将前三个阶段(任务规划、模型选择和任务执行)的所有信息整合成一个简洁的摘要,包括计划任务列表、模型选择和推理结果。然后使用ChatGPT整合所有小模型的预测结果并返回给用户。如下图所示。
由于HuggingGPT可以调用在社区中的所有模型“工具”,因此它也可以执行多模态任务。不过HuggingGPT的主要缺点有:
- 效率问题。HuggingGPT的每一阶段都需要与LLMs交互,导致效率低下。
- 上下文长度。LLMs最大tokens数量有限。
- 系统稳定性。一是LLMs的预测和输出错误;二是小专家模型的不可控和错误。
paper:HuggingGPT: Solving AI Tasks with ChatGPT and its Friends in HuggingFace
arxiv:https://arxiv.org/abs/2303.17580
code:https://huggingface.co/spaces/microsoft/HuggingGPT
code(半平替代码,chatGLM+百度小模型):https://github.com/SolarWindRider/All-In-One
AutoGPT
作为github在短短时间内就破20w星的开源项目,AutoGPT实在太火了。AutoGPT也是一个拆解任务并执行的模型,和HuggingGPT很像,但更加强大。其不需要强制性人类输入(无人值守),能更加自动地为自己分配目标,利用互联网和其他工具在自动循环中完成任务,甚至还可以利用数据库/文件管理短期和长期记忆、使用搜索引擎和浏览网页、语音输出等,它更加通用更加智能。
AutoGPT主要有以下特点:
- 基于GPT-4。使用 OpenAI 的 GPT-4 作为系统的核心,负责完成任务,根据完成的结果生成新任务,并实时确定任务的优先级。
- 基于Pinecone。Pinecone是一个矢量搜索平台,为高维矢量数据提供高效的搜索和存储能力。在AutoGPT的系统中, Pinecone 被用来存储和检索与任务相关的数据,例如任务描述、约束和结果。
- 基于 LangChain。 LangChain 框架允许AI 代理具有数据感知能力并与其环境交互,从而产生更强大和差异化的系统。
- 任务管理。系统将维护一个任务列表,其由双端队列表示,用于管理任务和确定任务的优先级。系统根据完成的结果自动创建新任务,并相应地重新排列任务列表的优先级。
具体来说,来自GPT4绘画的执行原理图如上,AutoGPT共包括以下几步:
- provide objective & task。提出问题,设定一个目标。
- complete task。拆解主任务,并维护一个优先级task queue。
- send task result。执行task queue中最优先的任务,然后得到结果。如果有必要,这个结果会被存在Pinecone中。
- add new tasks。当一个任务执行完成后,根据完成任务的结果会生成新的子任务,并确保这些新任务不与现有任务重叠。同时,系统会根据生成的新任务及其优先级重新确定任务列表的优先级,并使用 GPT-4 协助确定优先级。
AutoGPT可以执行的一些操作如下所示,搜索引擎、网页浏览都支持:
Google Search: "google", args: "input": "<search>"
Browse Website: "browse_website", args: "url": "<url>", "question": "<what_you_want_to_find_on_website>"
Start GPT Agent: "start_agent", args: "name": "<name>", "task": "<short_task_desc>", "prompt": "<prompt>"
Message GPT Agent: "message_agent", args: "key": "<key>", "message": "<message>"
List GPT Agents: "list_agents", args: ""
Delete GPT Agent: "delete_agent", args: "key": "<key>"
Write to file: "write_to_file", args: "file": "<file>", "text": "<text>"
Read file: "read_file", args: "file": "<file>"
Append to file: "append_to_file", args: "file": "<file>", "text": "<text>"
Delete file: "delete_file", args: "file": "<file>"
Search Files: "search_files", args: "directory": "<directory>"
Evaluate Code: "evaluate_code", args: "code": "<full_code_string>"
Get Improved Code: "improve_code", args: "suggestions": "<list_of_suggestions>", "code": "<full_code_string>"
Write Tests: "write_tests", args: "code": "<full_code_string>", "focus": "<list_of_focus_areas>"
Execute Python File: "execute_python_file", args: "file": "<file>"
Task Complete (Shutdown): "task_complete", args: "reason": "<reason>"
Generate Image: "generate_image", args: "prompt": "<prompt>"
Do Nothing: "do_nothing", args: ""
prompt setting如下所示,包括执行任务的规范(constraints)、可用的资源(resources)、和效果评估与反思(performance_evaluations)。
constraints: [
'~4000 word limit for short term memory. Your short term memory is short, so immediately save important information to files.',
'If you are unsure how you previously did something or want to recall past events, thinking about similar events will help you remember.',
'No user assistance',
'Exclusively use the commands listed below e.g. command_name'
]
resources: [
'Internet access for searches and information gathering.', #互联网搜索
'Long Term memory management.', #长期记忆管理
'GPT-3.5 powered Agents for delegation of simple tasks.', #GPT-3.5
'File output.' #文件输出
]
performance_evaluations: [
'Continuously review and analyze your actions to ensure you are performing to the best of your abilities.', # 分析自己的行为,确认尽到最大努力
'Constructively self-criticize your big-picture behavior constantly.', # 从大局自我反思
'Reflect on past decisions and strategies to refine your approach.', # 反思过去的决定和策略,优化方法
'Every command has a cost, so be smart and efficient. Aim to complete tasks in the least number of steps.', # 每个命令都有成本,所以要聪明而高效,要以最少的步骤完成任务
'Write all code to a file.' #将所有代码写入文件
]
github:https://github.com/Significant-Gravitas/Auto-GPT
WebGPT
OpenAI出品,基于GPT-3来模仿人类浏览网页的行为(点击、滑动滚轮等),通过搜索信息得到答案.解决的场景是长文本开放问答(Long-form Question Answering, LFQA),这个任务相比于传统机器阅读理解或文本问答,它在给出答案时,不只根据单篇段落或者文档,而是需要在某个文档集合甚至整个web中快速且准确地寻找答案(检索),并需要有信息整合能力以生成长段落(整合)。
但目前LFQA 最大的问题在于它只能从原始问题出发,并不是一个交互式的体系,对比人类是可以通过实时搜索来筛选出高质量信息的。特别是对于复杂问题,还会拆分子任务依次搜索等等,因此一个可以交互搜索的模型至关重要。因此WebGPT旨在通过模仿人类浏览网页的行为进行信息搜索和整理,以完成复杂的问题。训练环境基于微软的Bing搜索,数据基于ELI5(Explain Like I’m Five),界面如下所示,
模型模仿人类的行为主要有如下图所示的:启动Bing API、点击链接进行跳转、滑动滚轮、做标记等等,通过这种方式,模型从网页中收集段落,然后使用这些段落来撰写答案。
训练方法跟OpenAI一系列作品的InstructGPT、ChatGPT类型,使用人类反馈+RLHF进行学习。具体来说,WebGPT基于GPT-3主要有760M、13B和175B三种版本的模型,训练方式跟InstructGPT、ChatGPT的思路是一致的,名字稍有不同。
- Behavior cloning (BC) ,行为克隆。使用监督学习进行微调,其中人类指令将作为标签。
- Reward modeling (RM) ,奖励建模。基于BC模型训练一个奖励模型,表示某个行为优于另一个行为的概率。
- Reinforcement learning (RL) ,强化学习。仍然使用PPO算法对BC模型进行微调。
- Rejection sampling (best-of-n),拒绝采样。RM优化的替代方法,该步骤会直接从BC模型或RL模型中抽样固定数量的答案(4、16或64),然后由RM选出打分最高的结果。
paper:https://cdn.openai.com/WebGPT.pdf
WebCPM
WebCPM是清华基于BMTools的模型,与上一篇博文的Tool Learning作者是同一批人,也是首个基于交互式网页搜索的中文问答开源框架,虽然思路上和WebGPT很像,但它开源了[旺柴]。
解决的场景跟WebGPT一样,是长文本开放问答(Long-form Question Answering, LFQA),目前解决 LFQA 的方法一般采用检索 - 综合方式,主要包括信息检索(从搜索引擎中收集相关信息)和信息综合(将收集到的信息进行整合以生成答案)两个核心环节。但它们是非交互式的方法,无法像人类一样通过多轮收集、筛选来搜索更多样的信息。加上WebGPT的相关细节并未完全公开,因此完全开源的WebCPM仍然是很有价值的。
其界面如下所示,动作和WebGPT类似,包括搜索必应、返回、浏览页面,滑动页面,标注等等。
模型框架如下图,仍然包括搜索(Question and Facts)和整合模块(Answer),其中包括四个小模块。
- Action Prediction Module(灰色)。搜索行为预测,即决定要执行具体的什么行为动作,执行10个动作的多分类即可。
- Query Generation Module(蓝色)。查询语句生成,生成用于bing搜索的 Q ( t + 1 ) Q_(t+1) Q(t+1)。
- Fact Extraction Module(紫色)。支持事实摘要,通过浏览网页Quote出相关的信息。
- Synthesis Model(绿色)。根据收集到的信息生成连贯的答案。
以论文中的例子可以详细理解这一过程。
paper:https://arxiv.org/abs/2305.06849
code:https://github.com/thunlp/WebCPM