Auto-GPT是什么?

在五一长假前的那段时间,GPT相关技能里最火的便是Auto-GPT和AgentGPT了,它们能够让GPT得到你的指令后,循环执行,不断地运算直到得到适宜的答案,而且它具有拜访网络的才能。

比较于咱们自己直接运用GPT,Auto-GPT/AgentGPT的特色在于它能够做更多的事情,比方官方视频中演示的google查找,乃至订机票酒店等。

实现你自己的AgentGPT —— Langchain Agent

主张读者先自行了解一下Auto-GPT/AgentGPT的效果,本文着重的是技能上的分析。

Auto-GPT是怎样做到的?

Auto-GPT技能上的立异点有两个值得一说,这两点同样也是AgentGPT的立异点,此处以AutoGPT为例。

立异点1 —— 指令

AutoGPT“指令”其实只是一种由人类编写的程序函数,但它是供给给GPT调用的。比方谷歌查找指令、文件操作指令、python执行指令等。

每个指令需求包括以下内容:功能描述、输入格式、输出格式。有了这些内容,GPT就知道它能够如何调用这些人类编写的函数,然后“获得”了网络拜访才能和核算才能。

立异点2 —— 让GPT考虑过程

你向Auto-GPT宣布指令后,它会让GPT不要马上给出答案,而是去分化使命,考虑达到你的指令需求进行哪些过程。

这样能够让GPT给出一个正确的思路,然后再依据这个思路给出答案,准确率会提高十分多。

所以在吴恩达发布的GPT prompt教程里其实就有说到这个技巧:给GPT考虑的时间

它考虑的“思路”并不是无依无据的,它是靠你供给给它的“指令”来考虑的。在你供给了给AutoGPT足够的“指令”之后,它能较为准确地考虑出得出答案的过程,然后调用你供给给它的“指令”,更得心应手地完结使命,比方前面说到的google查找事例。

Auto-GPT有什么问题?

虽然Auto-GPT看起来很厉害,但在实践运用中,人们发现它存在一些问题。比方,它可能会卡住,或许在一个已经有解使命中不断循环求解,或许花费超出预期的token运用量。这些问题的本源在于Auto-GPT的指令列表并不包括完结某些使命所需求的才能,或许呈现错觉,误以为某个指令可用,所以在不断调用中进入死循环。

在实践工作中,假如AI东西有这些特点,基本上意味着这个东西是不可用的。它会呈现这样的问题首要是因为它所具有的“指令”不行,无法用于完结你交给他的使命。

所以实践应用中,咱们有必要依据详细场景给GPT添加更多的“指令”,乃至自己打造一个新的类AutoGPT东西以切合咱们实在的运用场景。

Auto-GPT的原理及其替代品

Auto-GPT的底层原理并不复杂,它是依托prompt完成的。prompt engineering本身便是有必要开源且十分简略被仿照的技能。因而,假如咱们想自己定制相似AutoGPT的效果,其实是比较简略的。

而且,Auto-GPT的这个做法也并不是他创始,相似的做法在AgentGPT里有,在chatgpt-retrive-plugin里也能看得到相似的影子(gpt-plugin的plugin说明便是这套机制)。

所以从头打造Auto-GPT并不是一件有担负的事。笔者之前介绍向量索引的文章里说到的LangChain,也供给了相似Auto-GPT思路的才能 —— Tools和Agent。根据LangChain的封装打造相似Auto-GPT的才能,更为简略和明晰。

完成相似效果

假如想要完成相似Auto-GPT的效果,能够运用LangChain-Tools和LangChain-Agent。

LangChain-Tool

Langchain里名为Tool的概念,和AutoGPT的“指令”是如出一辙的效果。咱们能够在它的文档上找到示例,比方Calculator核算器东西。

实现你自己的AgentGPT —— Langchain Agent

从代码里能够看出,一个Tool由名字,描述,和一个人工编写的函数组成(在Calculator的比方里,它借用expr-eval这个第三方包编写了核算函数)十分简略。

LangChain-Agent

有了Tool之后,接下来就需求让GPT能运用这些Tool了。这个便是LangChain的Agent的效果。Agent本身并不需求咱们太关注完成细节,咱们只需求按照文档运用即可。

实现你自己的AgentGPT —— Langchain Agent

tools数组中加上自己编写的Tool,就能够了。需求留意的是,假如你用的是davinci系列模型则运用无chat-的版本。

运用示例

拆分用户的提问

假如你想要用向量数据库完成GPT机器人,你可能会遇到这样的问题:假如用户在一句话里提出了几个问题,比方:

上一届世界杯是在哪年进行的?中国足球夺冠了吗?

假如你直接用向量查找这个问题,数据库会优先匹配既包括世界杯举办年,又包括中国足球夺冠信息的内容。这时候很简略就会得到匹配度较低的参考资料,GPT也无法答复出正确的答案。

但实践上,咱们的预期其实是将它作为两个独立的问题进行。先匹配世界杯举办年,答复第一个问题,再匹配国足夺冠,答复第二个问题。这种需求,我将其称之为问题拆分,就很合适经过自己编写的Agent完结。

咱们需求编写三个Tool,第一个,用于问题的拆分。

实现你自己的AgentGPT —— Langchain Agent

第二个Tool,则是负责向量查找(向量查找的代码简化了)

实现你自己的AgentGPT —— Langchain Agent

再按照相似方法写一个Tool,负责得出最终的答案就能够了

将这几个Tool结合起来,创建一个Agent,就得到了一个有问题拆分才能的聊天机器人。

完成GPT分工的可能性

这个比方中,能够看到一点:咱们能够将一个GPT包装成Tool,给另一个GPT运用。 也便是说,咱们完全能够经过Tool和Agent,完成多个GPT的分工合作,削减它们的context token数的压力。然后让咱们的整个体系能处理的总token增多。同时也有可能让一些功能性的大模型快速加入到生产中。(比方对中文更友好的大模型,token数约束更宽的模型等)

总之,经过Tool/Agent的模式,咱们能看到根据大模型技能完成更大的体系的可能性。