一、写在前面
本文是2023.10.02发表在同名公众号「陌北有棵树」上的一篇文章,个人观点是基础理论的学习现在仍是有必要的,所以搬运过来。
关于AI Agents的研究,最近有两篇综述性文章值得关注,可以说是涵盖了目前AI Agents的所有研究成果,对于对此领域感兴趣的人来讲,可以说是喜大普奔,往后需要哪个细分方向的资料,按图索骥就好。
其中一篇是来自复旦大学自然语言处理团队(FudanNLP)的关于 LLM-based Agents 综述论文 《The Rise and Potential of Large Language Model Based Agents: A Survey》 (https://arxiv.org/pdf/2309.07864.pdf)
另一篇是来自人大高瓴人工智能学院的基于 LLM-based Agents的综述论文《A Survey on Large Language Model based Autonomous Agents》(https://arxiv.org/pdf/2308.11432.pdf)
这两篇文章都很长,一篇86页,引用了673篇文献;一篇35页,引用了187篇文献,所以在读的时候就遇到了一个问题,信息太多就近乎于没有信息,如果没有自己的逻辑框架,就会迷失在这两篇长长的文献里。
我的想法是这样,虽然Agents的最终目标是通向AGI,虽然Andrej Karpathy(OpenAI联合创始人)在采访中说需要回到神经科学领域去获取一些关于AI Agent启示。但我想,最终总是要落到系统工程上面来。
计算机或许是目前最复杂的系统设计之一了,而且他的理论模型「图灵机」的基本思想是用机械操作来模拟人们用纸笔进行数学运算的过程。所以是否可以从计算机的体系机构设计上,来寻找一些灵感。就像是当年图灵提出了通用图灵机的理论模型,但最终落地的是冯诺依曼设计的架构体系一样。Agent应该是一套完备的系统设计,复杂程度可能不低于计算机系统。
所以 「Agent vs 计算机系统」「多Agents vs 分布式集群」是不是会有一些概念和抽象可以借鉴呢?
本轮技术变革的核心在于,基于Transformer架构的LLM的技术突破,而这轮理论突破的上限,可能也就在于通过继续增加参数和训练数据,能够继续释放的Transformer的潜力还有多少。所以这在理论层面,再一次跨越式跃迁的奇点还需要多久其实很难预测,或许科学家的脚步暂时停一停也无妨,该工程师继续上场了。
二、单Agent VS 计算机系统
首先,对于LLM-based Agent的架构组成,上述的两篇综述论文,以及之前OpenAI应用研究主管Lilian Weng的文章,都已经提供了架构设计图。
【1】FudanNLP综述论文中LLM-based Agent概念框架图
【2】高瓴人工智能学院综述论文中LLM-based Agent架构图
【3】Lilian Weng文章中LLM-based Agent架构图
这个和传统的Agent模型也保持了一致,在《人工智能:现代方法》这本书中,给出了Agent的工作流程,基于这个流程,我们可以将Agent定义为从感知序列到动作的映射。在这本书中对此的阐述是:
对于每个可能的感知序列,给定感知序列提供的证据和智能体所拥有的任何先验知识,理性智能体应该选择一个期望最大化其性能度量的动作。
说完了Agent系统的架构,再回过头温习一遍计算机系统。
以下是计算机系统中的一些概念与抽象,描述来自《深入理解计算机系统》
「CPU」是解释/执行存储在主存中指令的引擎。
「主存」是在CPU执行程序时,存放程序和程序处理的数据的存储设备。
「IO设备」是系统与外部的联系通道。
「高级语言程序」到「可执行文件」,需要经过预处理器,编译器,汇编器,连接器四个步骤
操作系统是应用程序和硬件之间的媒介
「文件」是对IO设备的抽象。
「虚拟内存」是对主存和磁盘的抽象。
「进程」是对处理器、主存、IO设备的抽象。
![](https://i-blog.csdnimg.cn/blog_migrate/d02794ad101a8fc6669c33d42f6c0e41.jpeg)
三、一些关于Agent System的脑洞
继续沿着上面的思路,
「感知模块」可以类比为「IO设备」,只是模态进行了扩充。
「记忆模块」可以类比为「主存和磁盘」,磁盘是长时记忆、主存是短时记忆、后面可继续根据需要设计「多级高速缓存(Cache)」
「行动模块」可以类比「中央处理器(CPU)」,做的事情就是类似CPU,取指令、执行、取指令、执行…
「操作系统」的本质是对资源、程序的虚拟化,用于更高效的执行指令、利用资源。我觉得目前可能有比较简单的调度系统,还谈不上是OS的级别,但操作系统的演进也不是一蹴而就的,从批处理操作系统、分时操作系统、实时操作系统…一步步迭代演化。当Agent系统复杂到一定程度后,操作系统中的一些抽象模型,是一定会有其借鉴意义的。
「Planning模块」该映射到哪里?
在计算机系统里,高级语言程序需要转换成二进制可执行文件才能被处理,这个转换过程需要经过预处理器,编译器,汇编器,连接器四个步骤。
我现在没有想清楚的是,这个过程是应该定义到CPU的模块里,还是编译器的模块里?
所以这个「Planning」模块一直是我觉得最值得研究的,目前的所有研究成果,都几乎没有脱离基于LLM的「Prompt Engineering」
按照Agent的目的划分,可以分为面向任务的Agent(助手场景)、面向生命周期的Agent(类似于斯坦福小镇,社会模拟)
按照Planning的特性划分,可以划分为「单路径推理 vs 多路径推理」「接受外部环境反馈 vs 不接受外部环境反馈」…
论文 | 标签 | 简要描述 |
---|---|---|
《Chain of Thought Prompting Elicits Reasoning in Large Language Models》 | 单路径推理、不接收反馈 | CoT(思维链):将解决复杂问题的推理步骤输入到提示中。这些步骤作为例子,启发llm循序渐进地计划和行动。在该方法中,规划是根据提示中示例的启发来创建的。 |
《Self-Consistency Improves Chain of Thought Reasoning in Language Models》 | 多路径推理、不接收反馈、树形结构推理步骤 | 首先利用CoT生成各种推理路径和相应的答案。随后,选择频率最高的答案作为最终输出 |
《Tree of thoughts: Deliberate problem solving with large language models》 | 多路径推理、不接收反馈、树形结构推理步骤 | 树中的每个节点代表一个“思想”,这对应于一个中间推理步骤。这些中间步骤的选择是基于对LLMs的评估。使用广度优先搜索(BFS)或深度优先搜索(DFS)策略生成最终规划。与CoT-SC一起生成所有规划步骤相比,ToT需要为每个推理步骤查询llm。 |
《SwiftSage: A Generative Agent with Fast and Slow Thinking for Complex Interactive Tasks》 | 单路径推理、不接收反馈 | 首先得到一个小型模型,然后将其与 LLM 进行融合。这样,便可以利用大量数据对小型模型进行微调,使其具备环境和任务相关的知识,并仅在需要时调用大型模型进行高阶推理 |
《Reasoning with Language Model is Planning with World Model》 | 多路径推理、树形结构推理步骤 | RAP 将 LLM 重新定位为既扮演世界模型又进行推理的角色,并结合了蒙托卡罗树搜索算法,在庞大的的推理空间中进行搜索。在推理过程中,LLM(作为推理者)在 LLM(作为世界模型)和任务特定奖励的指导下逐步构建推理树,并在广度与深度之间取得适当的平衡,从而有效地获得高奖励推理路径。 |
《Planning with Large Language Models via Corrective Re-prompting》 | 单路径推理、不接收反馈 | 在生成计划之前检查每个步骤是否满足必要的先决条件。如果不能满足,它会引入一个先决条件错误信息,并提示LLM重新生成计划。 |
《ReWOO: Decoupling Reasoning from Observations for Efficient Augmented Language Models》 | 单路径推理、不接收反馈、递归推理 | 一种将规划与外部观察分离的范式,智能体首先独立生成规划并获得观察结果,然后将它们组合在一起以得出最终结果 |
《Voyager: An Open-Ended Embodied Agent with Large Language Models》 | 接收环境反馈 | 通过结合程序执行的中间进度、执行误差和自验证结果三种环境反馈来制定计划。这些信号可以帮助智能体为下一步行动做出更好的计划。 |
「Planning模块」只能映射到编译器?这个想法听起来就太不sexy,毕竟这是最重要的“大脑”,但是CPU需要完全明确的指令,模糊是不被允许的。这个「Planning模块」如何才能通用且明晰?又让人不得不陷入沉思。抽象能力的确是工程师最为重要的能力了。是不是应该从冯诺依曼的体系结构中抽离出来,回到图灵机。
图灵机思想的价值所在是因为它虽然结构简单,但却可以描述任何人类能够完成的逻辑推理和计算过程,换句话说,图灵机的计算能力是人类能够完成的所有计算的全集,只要一个问题是可判定的,它的计算过程可以被符号和算法所表达出来,它就可以使用图灵机来完成计算。我仿佛回到当年读书的时候,被那门《可计算性与计算复杂性》课程支配的恐惧迎面袭来😂😂
路漫漫其修远兮,值得吾辈上下求索…