大模型的记忆功能实现方式较为复杂,不同的模型可能有所不同。
OpenAI 的模型中,大模型 LLM 扮演了“大脑”的角色,其记忆功能可能通过“Agent = LLM + 规划 + 记忆 + 工具使用”的基础架构来实现。但需要注意的是,对于 ChatGPT 这类模型,实际上其本质上并没有直接的记忆功能。它能理解之前的交流内容,是因为每次将之前的对话内容作为新的输入重新提供给模型。这种记忆功能并非由大型模型直接实现,而是通过在别处进行存储来达成。
如果对话内容过长,可能会影响模型的整体性能。解决这个问题的一个简单方法是启动另一个对话框。对于之前的数据,通常只能进行总结。
如果大家使用Kimi Chat来查询某个问题,你会发现它会在互联网上检索相关内容,并基于检索结果进行总结分析,最后给出结论。这其实是大模型利用「网页搜索」工具的一个典型例子,同时你也会看到PPT中介绍了非常多的不同领域类型的工具,它其实是为大模型在获取、处理、呈现信息上做额外的补充。PlanningAgent通过自行规划任务执行的工作流路径,面向于简单的或者一些线性流程的运行。比如下图中:Agent会先识别男孩的姿势,并可能找到一个姿势提取模型来识别姿势,在接下来要找到一个姿势图像模型来合成一个新的女孩图像,然后再使用图像理解文本的模型,并在最后使用语音合成输出,完成这个流程任务。Multiagent Collaboration吴恩达通过开源项目ChatDev进行举例,你可以让一个大语言模型扮演不同的角色,比如让一个Agent扮演公司CEO、产品经理、设计师、代码工程师或测试人员,这些Agent会相互协作,根据需求共同开发一个应用或者复杂程序。AI Agent基本框架OpenAI的研究主管Lilian Weng曾经写过一篇博客叫做《LLM Powered Autonomous Agents》,其中就很好的介绍了Agent的设计框架,她提出了“Agent=LLM+规划+记忆+工具使用”的基础架构,其中大模型LLM扮演了Agent的“大脑”。Planning(规划)主要包括子目标分解、反思与改进。将大型任务分解为较小可管理的子目标处理复杂的任务。而反思和改进指可以对过去的行动进行自我批评和自我反思,从错误中学习并改进未来的步骤,从而提高最终结果的质量。Memory(记忆)
我们使用Prompt的目的是为了解决问题。面对复杂问题时,建议将问题拆解,而不是过早地专注于Prompt的优化。这样做容易使我们过分专注于Prompt这一工具本身,从而忽视了问题的本质解决,偏离了核心。随着问题逐步解决,我们可能会意识到,最初对Prompt进行优化的理由实际上可能是错误的。[heading2]3.6、大模型的重点不是记忆也不应该有记忆[content]经过一段时间的使用后,我们可能会对大型模型有一些误解,比如认为它能记住我们之前的交流内容。从模型参数的加载方式就可见,实际上这些模型本质上并没有记忆功能。ChatGPT能理解我们的假象,仅仅是因为它每次将之前的对话内容作为新的输入重新提供给GPT。这种记忆功能并不是由大型模型直接实现的,而是通过在别处进行存储来达成。了解到模型是如何处理前面的Prompt后,我们也会发现它的局限性。我认为,这是因为推理过程本身有其复杂性。如果对话内容过长,可能会影响模型的整体性能。理论上,如果ChatGPT仅被一个人使用,这或许可行,因为用户可以接受较慢的响应速度。解决这个问题的一个简单方法是启动另一个对话框。对于之前的数据,我们没有太多选择,只能进行总结。这个总结可以由我们自己或者GPT来完成。显然,这并非我们期望的结果,因此出现了GPTs的概念。我认为,GPTs的作用在于不断进行总结,以避免上下文超出限制。这就引出了GPTs需要解决的问题,我将在后续讨论。接下来,我会分享我对于神经网络必要性的看法。
为了消除对AI的误解和无根据的信仰,这里介绍神经网络模型的工作原理,包括它的硬件和软件组成。从整体上看,我们可以简化理解模型为存储在电脑硬盘上的一系列文件。训练过程实际上是将互联网上的高质量数据转换为模型可以理解的格式,而转换后的数据基本上是对人类不可读的。在模型启动过程中,数据从硬盘加载到显卡中。这个过程类似于我们使用Word打开一个文档文件,其中Word程序将doc文件读入内存。显卡在处理某些任务上优于CPU,主要是因为它专注于执行浮点运算,而CPU负责执行更广泛的计算任务。显卡上的每个单元可能存放了不同的数据,这些数据可以简单理解为Python类实例中的参数。完成数据加载和实例化后,模型就可以接收外部请求了。我们需要理解的关键概念是,大模型的参数可以理解为类实例中的数据,这些参数是模型运行的基础。重要的是,大模型不会存储用户的数据,因此它不具备记忆功能。一旦系统启动,参数便固定下来,不再发生变化。