Agent的记忆实现和调用是提高Agent智能水平的关键。
大语言模型在过去几年中迅猛发展,已成为推动人工智能领域前进的核心力量。基于大型语言模型(LLM)的AI智能体,正逐渐成为实现大模型应用落地的关键途径。
AI Agent的认知架构正成为研究的热点领域。在我看来,AI Agent 认知架构不仅能够提高 Agent 的性能和效率,还能够增强其可扩展性和适应性,使其能够更好地应对不断变化的需求和环境。
为了深入探究这一问题,我们从人类的认知系统中汲取灵感,根据对行业前沿文章的研究,结合近期的实践,谈一谈关于Agent认知架构和记忆的实现内容,与大家分享。
今天的AI与人类相比较,在认知系统层面的差异具体体现在哪些方面?
人的大脑面对不同的任务会做出不同的反应。世界著名的认知心理学家、诺贝尔经济学奖得主Daniel Kahneman在《Thinking, Fast and Slow》中对人类的认知系统进行了两种定义分类:
系统 1:是一种响应迅速且自动化的推理过程。
系统 2:是慢速、深思熟虑的推理过程。
LLM的工作方式可以类比于人类认知系统中的系统1:过往的训练数据直接决定了模型擅长的领域,无论面对简单或者困难的问题,语言模型输出的速度不会有太大区别,这是LLM的本能。
和人类相比较,我们发现AI目前缺少的正是系统2的能力。而构建系统2,就是要让AI具有自己组织系统1的网络来构建新工具、解决复杂问题的能力。
这也就是AI Agent的概念,通过对环境的感知,完成不同的子任务,从而来实现更复杂的目标。
系统2通过语言推理、记忆调用、自我思考和规划,将复杂问题拆解成由系统1组成的流程单元,分别执行不同的任务从而达到目的。并在多次实践和运用中沉淀为“经验”数据提供给系统1去训练,从而让系统1获得新的能力。
图源来自:澜码科技
总的来说,系统 1 和系统 2 共同作用,影响着我们的思考、判断和决策过程。
那么,如何让每个智能体都拥有系统2的能力,使其能够调用长期记忆、计划和反思来解决复杂问题,实现从系统1到系统2的扩展呢?
我们认为现在有许多关于⼈类记忆的理论与体系都可以应⽤到Agent 上,从而让 Agent 模仿⼈脑的思考,例如下文所提到的CoALA框架。
在《Cognitive Architectures for Language Agents》论文中,作者结合生产系统提出了一个概念性的框架CoALA(具有认知架构的Agent),基于LLM设计出Agent系统的各种使用方法提升信息处理、推理、自主学习和决策能力。
图源来自:《Cognitive Architectures for Language Agents》
Agents 的认知架构包含多个关键要素,如感知、学习、推理和决策等。
结合CoALA框架,我们按照信息的内容,将信息组织进Agent的多个记忆模块,包括短期工作记忆和三种长期记忆:情景记忆、语义记忆和程序记忆。
图源来自:澜码科技
短期记忆:
长期记忆:
这些记忆组件共同构成了CoALA框架下Agent的记忆系统,使得Agent能够存储信息、进行推理、做出决策,并从经验中学习。
工作记忆在Agent的决策过程中起着关键作用,它与LLM、推理、检索等动作紧密配合,不断更新和处理信息,以支持Agent在不同情景下做出合适的决策和行动。
长期记忆主要是通过学习动作(Learning Action)将信息写入不同的长期记忆模块中来实现的,其中不同记忆类型学习机制不同:
以上这些信息会在Agent需要使用的时候,根据内容重新检索,并存入工作记忆中。
在我们的实践中,以销售管理场景举例,当销售询问线索挖掘Agent,“历史上是否有类似成功签单案例”时,Agent会根据当前客户画像检索情景记忆中类似客户的签单项目,为销售提供商机建议和指导。这就是一个调用情景记忆,并存入工作记忆的过程。
图源来自:澜码科技
Agent的记忆是如何实现的?首先,我们先定义一个概念,我们把Agent不断通过跟环境的进行交互、拿到反馈、做出动作,直到目标实现,这样一个不断迭代的过程称之为“Trial”。
用a表示Agent做出的动作,用o表示Agent做出动作后环境的反馈,则一个Trial可以表示为:
该定义来自于《A Survey on the Memory Mechanism of Large Language Model based Agents》
我们将Agent 的记忆按照来源不同分为三大类:
图源来自:澜码科技
比如,我们设计一个Agent,目标是辅助分析销售线索是否有效,这里Agent可以通过和用户对话、理解用户意图、收集信息并做出反馈,最后得出该线索是否为有效线索的结论,即完成了Agent的目标。在这样的一轮对话中,上下文、用户输入和Agent的输出信息为该Trial内的信息;而当用户询问到是否有类似项目时,Agent会去跨Trial寻找相关成功和失败的案例以支持对目标的判断;用户如果询问该客户当前最新资讯等信息,Agent会分析意图并调用web search,与互联网进行交互从而获得外部实时的知识。
我们将Agent 的记忆按照类型不同分为两类:
1. ⽂本形式:⽂本形式的记忆显式地以⾃然语⾔的⽅式存储。
⽂本形式是当前主流的存储记忆的形式,它具有更强的可解释性,更容易实现,能更⾼效地读写。
⼀般有 4 种信息以⽂本的形式存储:完整的历史信息、最近的历史信息、⽤于检索的历史信息、外部知识。
该⽅法在上下⽂中记录所有历史信息,虽然可以存储⼤量信息,但要消耗⼤量计算资源、推理时间,超⻓的上下文也会影响 LLM 的准确性与稳定性。
只存储最近的信息能提升记忆的利⽤率,但在⻓期的任务中,该⽅法容易忽略⻓距离依赖的关键信息。
检索的⽅法基于内容的关联程度、重要程度来选取记忆信息,不依赖于时间,因此不会忽略⻓距离的重要信息。该⽅法⾮常依赖于检索策略的准确度与效率,且需要信息以统⼀的⽅式存储,不能直接应⽤于处理外部环境中多样的信息。
⼀些 Agent 通过调⽤⼯具来获取外部知识,如调⽤ Wikipedia、数学求解器等,能显著提升其能⼒。然⽽,外部知识的可信度不⼀定很⾼,且 Agent 需要消耗计算资源来学会使⽤并理解外部⼯具,调⽤API 也会产⽣隐私、数据安全等问题。
2. 参数形式:参数形式的记忆隐式地影响模型的⾏为。
微调能有效地将专业知识注⼊ LLM,但可能导致过拟合,使 LLM 遗忘原本的知识。微调需要⼤量的训练数据,以及计算资源和时间消耗。微调也不能很好地处理与环境的动态交互,因此主要被应⽤于离线任务。
知识编辑能修改特定的知识,并保持其他⽆关的信息不被影响。知识编辑适合⼩规模的记忆修改,它需要较⼩的计算资源,更适⽤于在线的任务。
综上,从有效性、效率和可解释性来说,两种记忆存储形式有如下优劣:
图源来自:澜码科技
根据不同的场景和应用,我们需要对文本形式和参数形式这两种类型的记忆进行权衡。文本记忆适用于需要回忆近期交互的任务,如对话和上下文特定的任务。例如,在Agent与用户进行对话时,需要回忆之前的对话内容来理解当前的语境,这时文本记忆就可以发挥作用。对于需要大量内存或成熟知识的任务,参数记忆可能是更好的选择。
通过对人类认知系统的深入理解,我们发现让Agent拥有类似于系统2的能力是至关重要的,这将使它们能够更好地解决复杂问题。
在未来的研究中,我们需要进一步探索如何让每个Agent都具备系统2的能力,使其能够充分调用长期记忆、进行计划和反思,从而更好地解决复杂问题,实现从系统1到系统2的扩展。同时,持续优化Agent的认知架构和记忆实现机制,也是提高Agent性能和智能水平的关键。
参考文献:
文章来源于“周健 澜码科技”
【开源免费】AutoGPT是一个允许用户创建和运行智能体的(AI Agents)项目。用户创建的智能体能够自动执行各种任务,从而让AI有步骤的去解决实际问题。
项目地址:https://github.com/Significant-Gravitas/AutoGPT
【开源免费】MetaGPT是一个“软件开发公司”的智能体项目,只需要输入一句话的老板需求,MetaGPT即可输出用户故事 / 竞品分析 / 需求 / 数据结构 / APIs / 文件等软件开发的相关内容。MetaGPT内置了各种AI角色,包括产品经理 / 架构师 / 项目经理 / 工程师,MetaGPT提供了一个精心调配的软件公司研发全过程的SOP。
项目地址:https://github.com/geekan/MetaGPT/blob/main/docs/README_CN.md
【开源免费】XTuner 是一个高效、灵活、全能的轻量化大模型微调工具库。它帮助开发者提供一个简单易用的平台,可以对大语言模型(LLM)和多模态图文模型(VLM)进行预训练和轻量级微调。XTuner 支持多种微调算法,如 QLoRA、LoRA 和全量参数微调。
项目地址:https://github.com/InternLM/xtuner