ChatGPT于2022年11月30日由总部位于旧金山的OpenAI推出。
一转眼ChatGPT已经火了快一年了,不愧是AI界的新晋顶流。chatGPT引领各个大厂纷纷推出自己的大模型,但是这些大模型如果不投入应用就没多大意义了~所以大模型的下半场就轮到AIAgent了。
本文主要介绍我理解的AIAgent思路以及几个常用框架,如有理解不对,欢迎评论指出。
什么是AIAgent?
Agent可以理解为某种能自主理解、规划决策、执行复杂任务的智能体。
Agent = LLM Planning Feedback Tool use
我理解就是AIAgent不仅需要大脑(LLM)去理解问题,进行规划决策,还需要五官(Data)去获取信息,需要手脚(Tool)去行动处理问题。
所以,AIAgent可不仅仅只有LLM~
为什么AIAgent会出现?
对我们算法工程师,从技术来说,AIAgent是什么?或者我们能做什么?
还是先回到模型算法,对我而言,模型算法都是一个数学公式,输入-算法-输出。
如果任务是一个图片分类
如果是一个图片转文档任务
chatGPT出现后,他可以把很多函数自己完成。
所以爆火的ChatGPT其实也和CNN一样,甚至a b的本质一样,就是一个算法;但是这个算法表现惊人。
大家体验完ChatGPT后,直呼牛逼!但是,ChatGPT的调用量从去年12月至今年3月一直呈现高速增长态势,从今年4 月开始访问量增速明显放缓,在5 月、6 月期间甚至下降,因为大家发现他只是能进行问答意义没多大。。必须上落地到实际应用场景才有价值!所以AIAgent出现了~
AIAgent主流框架
下面我们一起整理下几个主流AIAgent框架的思路,你会发现和大家做事思路一样,毕竟,AIAgent作者是人。
1. 微软的Jarvis
LLM最令人惊叹的是什么?是他的理解能力和推理决策能力。
要将LLM落地,我们首先能想到的思路就是,利用好他的推理决策能力;
比如下面的步骤:
step1: 利用好LLM 的推理规划能力,对用户输入进行任务拆解;
step2: 利用LLM的决策能力,判断每个拆解的子任务,我们可以用什么方案解决(微软:最好还是用我们生态内的)
step3: 通过决策得出的推荐工具(API,model,插件)去解决每个问题
step4: 总结输出最终解决方案和结果给用户
巧了,微软的思路就是这样的:https://github.com/microsoft/JARVIS
stage1: 规划:对用户的问题拆分规划任务
Stage2:决策(模型选择):确定每个任务应该使用哪个模型或者工具进行处理
Stage3: 行动:根据stage2的结果进行任务执行
Stage4:总结并反馈结果
2 微软的promptFlow
但是我在使用jarvis时发现一些问题:
(1)LLM能够拆解的意图范围是固定的,huggingface上有哪些模型功能,他就有哪些task,是强绑定关系。
(2)模型选择,每个子任务的模型选择也是在模型候选表中的,chatGPT根据prompt去选择使用哪个模型。prompt的token巨长,附带每个任务类型的模型列表,以及每个模型的描述等信息。(token就是钱啊)
(3)外部工具植入比较困难,基本都是微软的生态
如何解决以上问题呢?
这里面我们可以把前两步和LLM的强依赖解绑,插入式接入LLM。
step1: 任务拆分,可以是人工拆分,也可以是LLM拆分,自定义~
反正从输入到输出就是一个任务流。我们只需要定义好每个步骤的输入和输出是什么。
step2: 每个task使用LLM去决策如何执行,也可以人工实现逻辑,也可以使用成熟插件,自定义~
step3:总结输出给用户
整个思路就是每个步骤都可控,输入,输出以及f(x)是什么都是我自己定义,我们通过评估使用LLM或者按传统思路实现逻辑,都很灵活。最好这个任务流可以可视化,方便我们理清思路。
巧了,微软就是这么做的:https://github.com/microsoft/promptflow
整个流程可视化,每个步骤自定义输入(包括prompt)输出就好,和上图的流程图类似,自定义工程流任务。
3. Langchain
Langchain也是AIAgenthttps://github.com/langchain-ai/langchain
langchain开发的初衷是让开发者能够快速的构建一个LLM原型应用,langchain很好的解决了这个问题,可以简单5行代码就能构建一个LLM应用。
大家对于Langchain第一个想到的图是不是:
我之前也记录过使用langchain打造自己的本地知识库,但这只是Langchain的一个组件的一个应用方向。。
Langchain主要组件有:
Models:模型,各个类型的模型集成,比如GPT-4
Prompts:提示,包括提示模版管理,优化和序列化
Memory:记忆,用来保存模型交互的上下文
Indexes:索引,用来结构化文档,外挂知识库就是索引的一个功能应用
Chains:链, 一系列组件工具的调用
Agents: 代理,决定模型采取哪些行动,应该选哪个工具,执行并观察流程
对于Langchain我们用的最多的就是利用他进行外挂知识库,但是这其实知识Indexes这个组件的应用而已,Langchain的功能远不止此;其中Chains的思路其实就是promptFlow;Agents里面的AgentAction就是Jarvis的思路。
这个大佬介绍了Langchain的各个组件以及组件支持的工具。
我个人觉得Langchain才是功能和工具最齐全的框架,但是Langchain功能太多,导致整个框架太重,极其不灵活;大家通常只用他的一个组件功能;但是用它整个框架只是去做一个知识库任务的话在修改代码时就会很痛苦,我个人是建议自己搭建项目框架,在实际应用时可以借鉴看Langchain在这个应用方面的流程和组件功能。
以上就是我个人对AIAgent的认识了~不知道什么时候agent能帮助人人都成超级个体。。。。
参考资料:
https://m.huxiu.com/article/1935893.html
我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!