你对AI agent的初步理解

你对AI agent的理解的是什么 ?

我凭理解首先回答的就是工具调用,而工具调用就是调用api,之后就想不到非常明显的差别

然后我的回答跟小林这篇文章(https://xiaolinnote.com/ai/agent/1_whatisagent.html)是十分像,确实仅凭借理解和印象,最长用和最容易看出区别的只有工具调用,其他就想不到了。

大模型 的局限性

  • 无上下文记忆,普通api调用为单轮对话,网页版LLM被内部官网维护,自动塞入历史对话,造成 "记忆"假象,本质已经算是agent范畴

  • **无工具调用,**大模型无法调用工具-知识冻结

  • **无持续状态:**这里算是比较书面的表达,用人话讲:持续状态指的是已有信息的获取,这里容易想成上下文记忆,下面专门说说区别在哪

持续状态与上下文记忆

从上面的表达来讲,二者没有很大区别,我提一个问题就明白了,如果让ai查数据,但是数据十分庞大,如果按照上下文记忆的方式,直接把历史对话作为prompt一部分重新加入,上下文窗口容量直接爆炸,那解决方案就是把数据存入向量数据库,只在系统提示词中写入数据主题内容,模型需要改内容的时候输出调用指令,查询数据库,返回数据,再输入,可以发现这其实是Rag的过程,所以持续状态比较理解的一个例子是查数据库,返回数据生成。

持续状态可以简单的理解成数据的持续状态,专指当对数据有需要的时候才调用,这与上下文记忆有本质的区别,一个按需读取,一个留存在对话框中反复输入。

其实说到这,还可以继续深入,我们可以发现一个问题:无论何种方式都无法绕开输入prompt调用LLM,因为LLM只能单轮对话,所以无论何种方式,最终想让LLM得到数据,都只能通过输入prompt来完成。那么现在有个问题**:如果是大篇文章,我们还可以用RAG进行摘要,利用索引找到所需部分,降低prompt内容,但是如果是** 数据分析 呢,要求必须分析所有的数据,但是数据十分庞大一次性输入必然对话框超量,那如何解决 AI的读书和数据分析

Agent 的优势

一、工具调用(Tool Use)

工具大概分为:API调用,联网查询,本地代码,数据库,搜索

工具调用原理:用 json 格式定义工具,内容包含如下

复制代码

tools = [ { "name":, # 工具名称 "description":, #工具内容描述 "parameters":{ "type":, "properties":{ }, "required": } } ]

从代码可以看出,对于大模型来讲,他是通过了解json格式的代码理解工具,他会根据 description中的描述来决定是否使用,然后返回 name

那么当 大模型 返回所需要的工具的时候,谁来实现工具调用呢?

当模型想调用某个工具的时候,此时会有他的 name,这个名字就如同函数一样,当我们想使用的时候,就直接调用函数名,这里也是同理,只不过调用工具的代码直接封装进 LangChain 里面

二、记忆力机制

从原理出发,这个实现就十分简单了,首先,大模型本身只能单次对话这是铁定的定理,因为他本质是语言推测模型,根据训练数据推测数据,并非我们说的理解语义,只不过训练的成果接近理解的程度,按照这个定理,我们要想他具备记忆力的对话模式,最笨的方法就是每次都将对话内容重新和新问题一起发送,而这就是记忆机制。

从开发的角度,我们具备调用LLM------api的能力,只需要将每次的返回内容用公共变量维护即可,每次调用前,都可以将这个公共变量拼接当前问题然后调用API实现,从而达成了记忆机制。

那么在理解实现记忆机制的基础上,就明白了为什么会有上下文容量限制的原因:每次都是复制之前所有的对话历史,但是单次调用API的内容容量是有限,所以上下文窗口的概念就出现了

这里补充一点,也是后续补上的,上面实现的记忆机制其实**短期的记忆机制,**专指单轮对话中的所有对话内容成为短期记忆,有短期记忆就有长期记忆,我们举个例子,如果我想让agent记住用户的对话风格以及一些对话爱好,我的实现的路径只能是每次在对话的开头声明我的对话风格和爱好,这是什么麻烦的,我希望每轮对话不需要写这些,他能够长期的记住,如何实现

长期记忆 的实现原理,这里的实现方式用向量数据存储,以摘要的方式存储在系统提示词当中,明确提示词中会标明对话开始的时候需要按照摘要去查询对应的对话风格并加载,而这里的查询就是查询向量数据库,其实这个过程就是RAG。

总的来说,记忆机制是智能体区别大模型的最明显区别之一,永远都要将智能体作为一个开发项目去看待,而大模型只是一个普通的API调用,那么我要想实现记忆机制,我有一个广阔的开发空间,也就是我可以脱离大模型,在自己的代码框里去获取API的有用信息,或者传导特定信息,这样可塑性就很多。

三、多步推理和自我纠错

看小林的描述,看第二遍才发现其实说的就是两种范式,ReAct 和 Plan-Execute-RePlan,

  • 前者的含义是,边思考边执行,从开发角度,如何实现思考,也就是反思功能 呢?实际上,我们会对不同环节设计不同的系统提示词,然后流程就是问问题LLM,返回数据,提取数据,将结果和最初问题有一起再次问LLM,只不过第一次是让他解决问题,第二次是让他检查问题,根据检查结果手动在代码框中规定接下来的流程,而实现的方式就是之前所说的"对不同环节设计不同的系统提示词",这样就实现了反思功能,这个功能其实在LangChain创建agent的时候就会自带ReAct范式,其实也可以说成框架,举个生动的例子,调用API报错该怎么办,这时候反思错误原因在哪,可能是参数不对,可能是名字打错遗漏,然后再重新调用。

  • 而后者就是多步推理的实现,多步推理,其实就是首次思考的时候就计划好步骤,然后按照步骤执行,这就是Plan-Execute-RePlan,从字面意思上就可以理解,先规划,根据规划生成的步骤开始执行,根据执行的结果判断是否符合预期或者需要继续执行等,从而实现多步推理。