Agent 理论介绍
一句话介绍agent:一个能够自主完成给定任务的实体
广义的讲Agent可以是一段代码(比如完成计算任务),可以是自动驾驶汽车(完成自动驾驶功能),也可以是一只正在执行警情任务的警犬,可以是正在写代码的程序员,甚至可以是小米汽车工厂正在造车的员工们。可以发现这些agent都存在一些共性,比如都有任务task,都有动作action,还有环境environment。提到这些如果熟悉机器学习的话很容易会联想到强化学习,实际上强化学习里面也有agent的概念,而最早展示AI能力的AlphaGo就是强化学习能力的代表。
强化学习
强化学习实际就是利用奖惩机制完成某个任务的算法。以下面游戏为例子:
游戏要求给老鼠设计一条路线,保证老鼠迟到的蛋糕最多,条件是不会被猫吃掉而且步数不超过20步。强化学习首先让老鼠随机走一条路线,在这条路线中每走完一步都有一个奖惩系数,吃到蛋糕系数为正,被猫吃掉则为负,而每条路线之后都有一个奖励总和,这与吃到的蛋糕个数有关,经过多轮重复训练之后,老鼠就能找到一条奖励总和较高的路线,而当环境发生变化,也就是蛋糕和猫的位置发生了变化,老鼠能根据通过强化学习学到的模型作出较好的决策。
术语介绍:
在强化学习中,由agent和environment组成,agent通过感知environment可以知道自己的状态state(吃到蛋糕了还是被猫吃了,之后根据自己的state以及选择的策略policy执行某个动作action,执行完某个动作之后会有一个reward,之后agent会进入一个新的state,重复上述过程直到达到结束条件。模型需要学习的就是这个policy,而优化目标最大化整个reward之和。
在大语言模型出来之前,强化学习算法是实现agent效果最好算法之一,比如还有迁移学习算法,元学习等等。那么这些算法有什么缺点呢:
- 不同场景之间agent的能力迁移较差,换句话说针对不同的环境场景需要不同训练数据来训练
- 与人交互性差,人工干预能力较差
- 模型效果不稳定
大语言模型出现之后,Agent有哪些进展呢?。一句话概括就是大语言模型可以充当agent的大脑,也就是强化学习的策略policy,而且不需要学习。
LLM-based Agent核心组件
对于基于大语言模型的agent,它的核心组件有大脑brain,感知perception以及动作action。下面逐一进行介绍:
Perception:
这里的perception实际上就是agent的输入,这个输入可以是视频,图片或者文字,而这些输入可以由传感器获得,也可以人为获得然后输入例如截图,同样也可以将一个agent的输出传给另一个agent。agent接收到输入之后就需要利用LLM来进行逻辑推理得到输出。
Brain:LLMOps:
简单来讲,这里的brain就是大模型及其相关技术,包括开发,部署,维护等等。而对于agent而言,brain所起的作用就是决策推理的作用,也就是给一个输入能有一个合理的输出。对于传统的机器学习例如xgboost而言,当模型训练好了之后,直接把我们的输入给到模型,它就能给我们一个明确的输出,而对于大模型而言,由于模型训练是由大量以及各个方面的数据训练而成的,并非针对某一个具体的任务,当用于某个具体的任务的时候还需要进行模型适应下游任务。换句话说,当在某一任务下使用传统机器学习时,我们需要收集数据然后从头开始训练这个模型,而如果使用大模型来完成这个任务一般来说个人一般不会从头开始训练一个大模型,成本太大(使用 Tesla V100 云实例训练 OpenAI 的 GPT-3(具有 1750 亿个参数)需要 355 年和 460 万美元),我们一般要么使用开源大模型要么自费购买闭源大模型的api,然后使模型适应下游任务。
适应下游任务常用的有以下几种方法:
- Prompt Engineering:agent常用的方法,后面详细介绍
- Fine-tune:利用下游任务的数据重新训练大模型,成本比较高
- External data:类似建立知识向量壳库,避免幻觉出现,所谓幻觉就是模型生成的内容并非基于实际输入或现实情况,而是模型自身基于其学习到的知识和模式进行的一种“想象”或“创造”
- Embeddings:将大模型的输出作为中间层,在这个基础上后续进行其他操作
Prompt Engineering:提示工程
所谓提示工程其实就是一系列设计好的提示模板,只不过使用这些模板能让大模型的输出比较合理
前面说到大模型在agent充当的就是一个决策的角色,那么prompt engineering就是引导大模型进行逻辑推理得到合理的输出,现在常用的prompt模板方法有chain-of-thought(COT), chain-of-thought with self-consistency(COT-SC)以及tree-of-thoughts(TOT),如下图所示:
COT:
需要使用像右边这种带有推理过程的prompt进行few-shot训练
缺点:一旦出现错误就会沿着错误的标准运行,无法自我纠错
COT-SC
COT-SC的思想就是条条大路通罗马,采样不同的思维方法来推理,最后通过投票选出最终的答案,避免COT出现的错误推理。
常用的采样方法有top-p, top-k以及温度采样方法
缺点:只能回答一些具有精确答案的问题,对于开放性问题难以评估答案的好坏
TOT
TOT关键在于建立一个thought tree,建立这个tree需要一个thought生成器和thought评估器,而任务的解决方法使用BFS或者DFS算法,具体细节可见参考文献11
小结
上面介绍的这些提示工程方法的最终目的都是提高大模型的推理能力,那么对于agent而言有什么启示呢?简单来说就是通过设计一些巧妙的prompt模板可以指示LLM自主完成推理任务,以AutoGPT为例,这个项目规定了agent输入大模型的模板为:
大模型的输出模板为:
通过这样的prompt模板可以实现神奇的推理功能,至于为什么,论文也没有讲,只说了存在这么个现象。
Memory
前面我们提到为了保证LLM能够适应下游任务有一种方法就是External data,实际上这就是为LLM提供长期记忆。在agent中存在两种记忆:
- Short memory:短期记忆,也就是完成这一次任务的所有上下文,保留短期记忆能够保证LLM输出内容不至于天马行空,能够最大程度与任务相关
- Long memory:长期记忆,通过建立知识向量库,让LLM保持与时俱进的能力,实际上这也就是RAG技术,技术细节可见参考资料14
Action
LLM得到输出之后就需要agent将输出转化为action行动,一般来说这种action一般通过以下几种方式表现:
- 利用其他工具,例如计算器,
- 与其他的agent形成联动,这里就需要定义一个agent protocol,也就是agent之间的沟通语言
- 自定义action函数进行调用,例如读写文件功能
- 利用其他大模型,例如sd,这时候agent充当调度器,将任务分发给其他大模型实现,具体细节可见参考资料17
总结
一句话总结:将任务给到agent(文本形式),agent利用提示工程催使嵌入memory的LLM进行推理,并将推理结果利用tool执行action,将action后的结果重新作为输入的一部分,再次进行推理,反复重复这个过程直到任务完成。
LLM-based Agent 应用
Appagent:
该项目可以通过自主学习和模仿人类的点击和滑动手势,在手机上执行各种任务,这种操作和小爱同学人工助操作手机的区别在于小爱同学需要后端访问和函数调用,而agent则是通过类人操作,例如点击和滑动,换句话说小爱同学只能操控小米手机而不能操控苹果,华为等,而agent则是都能操控,具体可看参考资料16
参考资料
- 能否介绍一下强化学习(Reinforcement Learning),以及与监督学习的不同? - 知乎
- 什么是迁移学习 (Transfer Learning)?这个领域历史发展前景如何? - 知乎
- 一文通俗讲解什么是元学习(Meta-Learning) - 掘金
- 《综述:全新大语言模型驱动的Agent》——4.5万字详细解读复旦NLP和米哈游最新Agent Survey
- Intro to LLM Agents with Langchain: When RAG is Not Enough
- Multi-Agent System
- LLM-based Agents survey 基于大语言模型多智能代理简单综述及展望
- Understanding LLMOps: Large Language Model Operations
- Chain-of-Thought Prompting Elicits Reasoning in Large Language Models
- Self-Consistency Improves Chain of Thought Reasoning in Language Models
- Tree of Thoughts: Deliberate Problem Solving with Large Language Models
- 自然语言生成任务中的5种采样方法介绍和Pytorch代码实现-阿里云开发者社区
- Autogpt
- 大模型主流应用RAG的介绍——从架构到技术细节
- Agent Protocol Description - Agent Protocol
- GitHub - mnotgod96/AppAgent: AppAgent: Multimodal Agents as Smartphone Users, an LLM-based multimoda