Agent四大范式
发布时间:2024-11-15 01:22:08点击:
什么是智能体Agent
Autonomous agents 又被称为智能体Agent。能够通过感知周围环境、进行规划以及执行动作来完成既定任务。在这些能力中,规划尤为重要,它涉及到复杂的理解、推理和决策制定。
大语言模型出现以前,我们一般通过规则的方法,或者强化学习的方法来实现。但是这两种方法各有弊端:
近几年,大语言模型的兴起因此了智能体应用这个领域的巨大变化。大语言模型在逻辑推理、工具应用、策略规划、指令遵循等方面都有非常不错的表现,这使得大家开始意识到,将大语言模型作为Agent应用的核心认知系统,可以极大的提高智能体的规划能力。
而且最近,吴恩达一直在吹Agent的风划重点 | 吴恩达:Agent模式将在不久的将来超过下一代模型,也确实,越来越多的人发现,模型训练成本高昂,还不如用Agent的方法来实现更加智能的应用体。
这篇文章中,作者将Agent应用的能力分为五个主要类别:任务分解、多方案选择、外部模块辅助规划、反思与优化、记忆增强规划。
• 任务分解是指借助LLM将任务拆解为若干个子任务,并依次对每个子任务进行规划。
• 多方案选择是指大型语言模型深入“思考”,针对特定任务提出多种可能的方案。接着,利用针对性的任务搜索机制,从中挑选一个最合适的方案来实施。
• 外部模块辅助规划。该策略专门设计用于引入外部规划器,以增强规划过程的效率和计划的可行性,同时大型语言模型主要负责将任务规范化。
• 反思与优化。这种策略着重于通过自我反思和细节完善来增强规划能力。它激励大型语言模型Agent应用在遭遇失败后进行深入反思,并据此优化规划方案。
• 记忆增强规划。该策略通过引入一个附加的记忆组件来提升规划能力,该组件中存储了各种宝贵信息,包括基本常识、历史经验、领域专业知识等。在进行规划时,这些信息会被调取出来,充当辅助提示,以增强规划的效果。
这五大研究方向并非相互独立,而是相互关联,往往需要同时运用多种技术手段。
任务分解
在现实世界中,环境往往充满了复杂性和变化,因此通过一次规划来解决复杂任务往往比较困难。所以将复杂任务简化是一个非常有效的办法,有点类似于“分而治之”的策略(如下图)。任务分解一般包括两个环节:
• 将复杂任务拆解为多个子任务,称为分解阶段
• 为子任务指定规划,这个阶段被称为子规划阶段
目前,一般有两种组合方式:
• 1.先分解后规划(Decomposition-First Methods)
• 2.边分解边规划(Interleaved Decomposition Methods)
先分解后规划(Decomposition-First Methods)
先分解后规划策略是先把任务拆解为子任务,然后再为每个子任务指定子规划。包括 HuggingGPT、Plan-and-Solve、ProgPrompt等典型方法都是用的这种方法进行规划。
• HuggingGPT整合Huggingface Hub的多种多模态模型,打造出一个能够应对多模态任务的智能代理。该代理擅长处理如图像生成、分类、物体识别、视频注释、语音转文本等任务。LLM在此过程中充当指挥官,负责解析人类输入的任务、挑选合适的模型并产出最终答复。最为关键的初阶段任务拆解中,HuggingGPT明确指导LLM将接到的任务细化为一系列子任务,并明确任务间的依赖性。
• Plan-and-Solve 改进了Few Shot COT方法,将其原始的“让我们一步步来思考”转变为“首先制定计划”和“执行计划”的两步提示指令。这种COT方法在数学、常识及符号推理方面均有所提升。
•ProgPrompt 则将自然语言描述的任务转译为编程问题,通过代码定义代理的动作空间和环境中的对象,每个动作都明确为一个函数,每个对象则作为一个变量。这样,任务规划便自然转化为生成函数的过程。执行任务时,代理会先创建一个以函数调用来体现的计划,随后逐步实施。
边分解边规划(Interleaved Decomposition Methods)
边分解边规划方法是指任务分解和子任务规划交错进行。包括思维链、ReAct、PAL、PoT等方法都是用的这种策略。
• CoT展示了LLM在少样本学习上的能力。它通过几个构建的路径引导LLM对复杂问题进行推理,利用LLM的推理能力进行任务拆解。Few Shot CoT 通过“让我们一步步思考”这一神奇指令,激活了LLM的Few Shot COT功能。
• ReAct与CoT不同,它将推理与规划分开处理,在推理(思考步骤)与规划(行动步骤)之间进行切换,显著提升了规划能力。视觉ChatGPT采用ReAct机制,将LLM作为代理的大脑,结合一系列视觉模型,赋予代理图像处理的能力。
• PAL 通过发挥LLM的编码专长,优化了CoT,在推理过程中引导LLM生成代码,并最终通过代码解释器(如Python)执行代码以得到答案,有效助力代理解决数学和符号推理难题。
• PoT将推理过程彻底编程化,作者还运用了针对代码数据训练的CodeX模型,增强了解决数学和财务问题的效能。
利弊
先分解后规划的优势在于,能够在子任务与原任务之间联系更加紧密,所以可以降低任务遗漏和幻觉的风险。但是,由于子任务在最初就被固定下来,缺乏灵活调整的机制,任何一步的失误都可能会导致整体的失败。
边分解边规划的策略,可以根据环境反馈来调整分解策略,增强应对错误得能力。但是在处理复杂任务时,如果过程太长,可能会导致LLM产生幻觉,让后续的子任务和子规划偏离既定目标。
此外,任务分解带来了额外的时间和计算成本。
而且,对于一些被拆分的子任务太多的高复杂度任务而言,规划过程会受到LLM上下文长度的限制,从而导致规划路径偏离原有路径。
多方案选择
鉴于任务本身的复杂性及大型语言模型(LLM)内在的不确定性,LLM-Agent为特定任务制定的计划可能千差万别。尽管LLM具备强大的推理能力,但单独生成的计划可能并非最优,甚至不可执行。更自然的方法是采用多计划选择,该过程包括两个主要步骤:多计划生成和最优计划挑选。
多方案生成
多计划生成的目的在于产生一系列计划路径,形成候选计划集。常见的方法有:
• 通过在解码过程中调整采样策略,比如温度参数、top-k参数,来获取不同的多个推理路径。
• 思维树(ToT)包括两种生成计划策略,一种是与前述的采样策略参数调整一致,另一种是指导LLm通过提示词中的少量示例来生成不同的规划。
• 思维图(GoT)引入思维转换的概念,对ToT进行了扩展,支持任意思维的聚合。
• LLM-MCTS 和RAP 则将LLM作为蒙特卡洛树搜索(MCTS)中的启发式策略函数,通过多次调用获取多种可能的行动方案。
如何在多个方案中选择最佳策略也有多种方法:
• 自洽性策略通过简单的多数投票法来确定最受欢迎的计划作为最佳选择。
• 思维树(ToT)利用其树状结构,支持包括广度优先搜索(BFS)和深度优先搜索(DFS)在内的树状搜索算法。在决定扩展哪个节点时,ToT借助大型语言模型Agent应用(LLM)来评估多种可能的行动,并从中挑选出最佳选项。
• LLMMCTS 和RAP 也使用树状结构辅助进行多计划搜索,但它们采用的是蒙特卡洛树搜索(MCTS)算法。
外部模块辅助规划
尽管大型语言模型(LLMs)在推理和任务分解方面表现出色,但在面对如数学问题求解或生成合法行动等具有复杂约束的环境时,仍面临挑战。为应对这些挑战,研究人员采取了将LLMs与外部规划器相结合的多种方法,这些方法大致可分为符号规划器和神经规划器两大类。
符号规划器
• LLM+P 通过整合基于PDDL的符号规划器,提升了LLMs的规划效率。研究者利用LLM的语义解析和编码能力,将问题转化为文本语言提示,输入至LLM。这样,LLM便能将环境内的行为和特定任务转化为PDDL语言格式。在获得正式化描述后,研究者使用Fast-Downward 求解器来执行规划。
• 在LLM+P的基础上,LLM-DP专为动态交互环境设计,它在接收环境反馈后,将信息形式化为PDDL语言,并利用BFS 求解器来生成计划。
• LLM+PDDL 同样采用PDDL语言来形式化任务,并增加了手动验证步骤,以检查LLM生成的PDDL模型中可能的问题。在规划过程中,研究者建议使用LLM生成的计划作为初始启发式解,以加快局部搜索规划器(如LPG)的搜索速度。
• LLM+ASP [Yang et al., 2023b]将LLM描述的自然语言问题转化为原子事实,将任务转化为答案集编程(ASP)问题,然后使用ASP求解器CLINGO来生成计划。
神经规划器
神经规划器,这类深度学习模型通过强化学习或模仿学习在收集的规划数据上进行训练,能够在特定领域内实现高效的规划。以DRRN 为例,它通过强化学习方法将规划过程视作马尔可夫决策过程,培养出一个策略网络来构建深度决策模型。决策变换器(DT)则让变换器模型能够模仿规划数据中的人类决策行为。
神经规划器虽然在部分领域使用了更小的参数获得较高的规划效率,但是经常会遇到数据不足、泛化能力有限的情况。所以为了提高规划能力,研究者一般吧Agent应用和轻量级神经规划器结合的方式。
• CALM 就是这种结合的早期尝试,它将语言模型与基于强化学习的神经规划器结合起来。语言模型负责处理文本形式的环境信息,并基于这些信息生成一系列候选行动。随后,DRRN策略网络对这些候选行动进行重新排序,以选出最优的行动方案。
• SwiftSage 鉴了认知心理学中的双系统理论,将规划过程划分为慢速思考和快速思考两个部分。慢速思考负责复杂的推理和理性决策,而快速思考则依赖于长期训练形成的直觉反应。研究者们利用通过模仿学习训练的DT模型作为快速思考模型,以快速生成计划。当计划执行中出现错误,暗示问题较为复杂时,系统会切换到慢速思考模式,此时LLM会基于当前状态进行深入的推理和规划。这种快速与慢速思考相结合的方法,在提高效率方面显示出了显著的效果。
反思与优化(Reflection and Refinement)
反思和优化是规划过程中不可或缺的两大支柱,在提升模型Agent应用的容错和纠错能力上有很大作用。由于大语言模型的幻觉特点,已经在处理复杂问题时的局限性,Agent应用在做任务规划时,往往会陷入思维旋涡。通过回顾和总结经验,可以使得Agent在后续的尝试中纠正错误,打破循环。
• Self-refine:是通过迭代生成、反馈、精炼,使得大语言模型每次生成计划后,都能提供反馈,根据反馈进行调整。
• Reflexion:则是在ReAct的基础上增加评估器,用来评估行动轨迹,在发现错误后进行自我反思,从而纠正错误。
•CRITIC:则是利用外部工具,比如知识库、搜索引擎来验证LLM生成的行动,然后借助外部知识进行自我纠错,减少事实性错误。 Agent四大范式 | CRITIC:吴恩达力推Agent设计范式
• InteRecAgent 采用了ReChain机制来进行自我纠错,LLM在此过程中评估交互推荐代理生成的响应和工具使用计划,总结错误反馈,并决定是否需要重新开始规划。
• LEMA 则先收集错误的规划样本,随后利用更高级的GPT-4进行修正,这些经过修正的样本用于微调LLM-Agent,显著提高了LLaMA模型在不同规模上的性能。
记忆增强规划
大语言模型Agent应用在记忆方面主要有两种方法来增强规划能力:基于检索增强生成(RAG)的方法和基于 嵌入式记忆(Embodied Memory,这里我翻译成嵌入式记忆可能更合理,有更好的翻译也欢迎大家指正。)。
RAG记忆
RAG现在也是很火的一种LLM应用技术框架,是指通过信息检索的方式辅助文本生成,可以为LLM提供最新的知识更新。存储的内容形式多种多样,包括文本、表格、知识图谱等。
这里针对RAG不多讲,下次争取找几篇RAG的综述跟大家一起读一读。
嵌入式记忆
所谓嵌入式记忆,是相对RAG将知识存储在外部系统而言,嵌入式记忆是将知识通过Finetune的方式把知识存储在大模型里面,嵌入到模型参数里面。从头开始训练一个模型成本巨大,所以一般采用PEFT的技术来进行微调,比如:LoRA、QLoRA、P-tuning等。
CALM通过训练一个GPT2模型,可以完成一些规划任务,并且还有比较好的泛化能力。AgentTuning 将不同任务的规划轨迹整合成对话形式,对LLaMA模型进行微调,显著提升了在未见规划任务上的性能表现。
Agent应用的局限性
虽然在吴恩达最近的观点中,Agent应用有潜力成为未来AGI的通用技术路线,但是现有的Agent应用还有很多问题和局限性。
• 幻觉现象。在规划过程中,LLM常常出现幻觉,导致规划不合理,对任务提示不忠实,或无法遵循复杂指令。比如,计划中可能包含了与环境中不存在的物品进行交互的行动。虽然通过精心设计的提示可以缓解这些问题,但是理论上并不能完全消除幻觉带来的问题。
• 生成计划的可行性。基于统计学习的LLM通过海量数据优化下一个词的出现概率,与符号化人工智能相比,这种方法在遵循复杂约束时存在挑战,特别是在处理LLM训练期间不常遇到的约束。因此,LLM生成的计划可能在没有充分考虑先决条件的情况下缺乏可行性。将LLM与符号化规划模型结合,而不改变LLM本身,是一个充满希望的研究方向。
• 生成计划的效率。高效地生成计划是规划中的关键议题。然而,现有的LLM代理在规划时,往往只基于LLM输出的生成计划进行贪婪选择,忽略了计划的效率。未来的研究可能需要引入额外的效率评估模块,与LLM协同工作,以制定更高效的计划。
• 多模态环境反馈的处理。LLM最初旨在处理文本输入,但现实世界的环境反馈往往是多模态的,包括图像、音频等,这些内容在自然语言中难以表达。因此,LLM代理在处理这类情境时存在局限。未来的研究可能需要考虑整合多模态大型模型的发展,并重新考虑相关的规划策略。
• 细致的评估方法。当前的基准测试主要依赖于任务的最终完成状态,缺少对每一步的细致评估。此外,环境反馈通常是规则驱动的、过于简化的,与现实世界情境有较大差异。一个可能的研究方向是利用像LLM这样的高智能模型来设计更加真实的评估环境。
例如,生成代理将人类代理的日常经验以文本形式存储,并基于当前情境的相关性和时效性来检索记忆。MemoryBank、TiM和RecMind等系统则利用文本编码模型将记忆编码成向量,并建立索引结构,以便检索。在检索时,当前状态的描述作为查询条件,用于从记忆库中检索记忆。不同系统在记忆更新方式上有所区别:MemGPT借鉴了计算机架构中的多级存储概念,将LLM的上下文视为RAM,而将额外的存储结构视作磁盘,LLM可以自主决定是否检索历史记忆或将当前上下文存储起来。REMEMBER系统则采用Q值表来存储历史记忆,每条记录包含环境、任务、动作和Q值,以便在检索时根据环境和任务的相似性来生成计划Arxiv。
通往 AGI 的神秘代码
if like_this_article():do_action('点赞')do_action('再看')add_wx_friend('iamxxn886')if like_all_arxiv_articles():go_to_link('https://github.com/HuggingAGI/HuggingArxiv')star_github_repo(
本文转载自,作者: