|
继续介绍Agent系统中另一个核心组件:规划,Planning
去年的Agent综述文章《大模型智能体 LLMAgent》提到了: - ingFang SC", system-ui, -apple-system, "system-ui", "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;text-wrap: wrap;background-color: rgb(255, 255, 255);visibility: visible;">Agent是大模型与场景间价值传递桥梁
ingFang SC", system-ui, -apple-system, "system-ui", "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;text-wrap: wrap;background-color: rgb(255, 255, 255);visibility: visible;"> ingFang SC", system-ui, -apple-system, "system-ui", "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;text-wrap: wrap;background-color: rgb(255, 255, 255);visibility: visible;">重要性不言而喻。ingFang SC", system-ui, -apple-system, "system-ui", "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;text-wrap: wrap;background-color: rgb(255, 255, 255);">ingFang SC", system-ui, -apple-system, "system-ui", "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;text-wrap: wrap;background-color: rgb(255, 255, 255);"> ingFang SC", system-ui, -apple-system, "system-ui", "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;text-wrap: wrap;background-color: rgb(255, 255, 255);visibility: visible;">Agent系统由多个组件构成,规划、记忆和工具使用等ingFang SC", system-ui, -apple-system, "system-ui", "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;text-wrap: wrap;background-color: rgb(255, 255, 255);visibility: visible;">Agent=LLM+ Planning + Feedback + Tool use上次,文章《Agent技术解读:Memory记忆模块》中介绍了Memory记忆模块的基本构成、原理和实现方法,这次介绍下更核心的规划Planning模块。

(1)什么是Planning?
Planning 指 任务分解的典型实现方案是 CoT(Chain of thought)和 ToT(Tree of thoughts)。 一项复杂任务包括多个子步骤,智能体需要提前将任务分解,并进行规划。 规划模块分类
上面的解析简单,不够全面,有没有更加详细的分析?
【2024-2-5】中科大对Agent的Planning方法做了深入分析、归类和总结:
下面简要介绍下论文要点。
(2)Planning 古今对比 传统Planning工作主要依赖符号方法或强化学习方法, 比如 领域定义语言PDDL(Planning Domain Definition Language) 这类方法存在若干不足:
大型语言模型(LLM)标志着一个范式转变。LLM在多个领域取得了显著成功,在推理、工具使用、规划和指令跟随方面表现突出。 这种智能为将LLM作为代理的认知核心提供了另一种可能性,有潜力提高规划能力。 (3)LLM Planning方法
论文提出新颖的分类法,将现有 LLM-智能体规划方法分成了五大类:任务分解、多计划选择、外部模块辅助规划、反思与细化以及记忆增强规划。 任务分解: 把大蛋糕切成小块,让智能体一步步地解决。类似分治思想 多计划选择: 给智能体一个“选择轮”,生成多个计划,然后挑一个最好的来执行。类似召回、排序。 外部模块辅助规划: 借助外部规划器,有个军师在旁边出谋划策。类似强化学习的判官。 反思与细化: 执行计划过程中,能够停下来反思,然后改进计划。 记忆增强规划: 一个记忆面包,记住过去经验,为将来规划提供帮助。
这些方法并不孤立,相互交织,共同提升智能体的规划能力。 
表格对比各种方法 
(3.1) 任务分解
任务分解 (Task Decomposition) 两个关键步骤: “分解”: 将复杂任务分解成若干个子任务; “子计划”: 为每个子任务制定计划。
任务分解方法分为两类:

① 分解优先“分解优先” 把所有拼图碎片按颜色或形状分类,然后再逐个拼起来。 优点: 子任务与原任务之间的联系更强,减少了任务遗忘和幻想风险。 缺点: 如果某个步骤出错,可能会影响到整个任务的完成。 案例: “HuggingGPT” 和 “Plan-and-Solve”
案例 •HuggingGPT: LLM作为控制器,负责将人类输入的任务分解为子任务,选择模型,并生成最终响应。 •Plan-and-Solve: 将原始的“让我们逐步思考”转变为两步提示指令:“我们首先制定计划”和“我们执行计划”。 •ProgPrompt: 将自然语言描述的任务转化为编码问题,将每个动作形式化为函数,每个对象表示为变量。
② 交错分解“交错分解”: 一边分解任务,一边制定计划,边拼图边调整拼图碎片位置。
案例: 类似于ReAct, COT, POT都可以归类到这个范畴中。 •Chain-of-Thought(CoT): 通过构建轨迹指导LLM推理复杂问题,利用LLM的推理能力进行任务分解。 •Zero-shot CoT: 使用“让我们逐步思考”的指令,解锁LLM零样本推理能力。 •ReAct: 将推理和规划解耦,交替进行推理(思考步骤)和规划(行动步骤)。
CoT思维链(Chain of Thought, CoT) 是一种 prompt 方法,通过编写每步推理逻辑(推理链),解决复杂问题。 COT 已然成为「诱导模型推理」的标准提示技术,可以增强解决复杂任务时的模型性能。 具体可用 Zero-shot 和 Few-shot 的 COT Zero-shot COT 的实现分为两步: 第一步输入Let's think step by step得到推理链 第二步输入推理链+Therefore, the answer is得到最终答案 合并成一步:Let's work this out it a step by step to be sure we have the right answer
总结
尽管任务分解显著提高了智能体解决复杂任务能力,但挑战依然存在。 所以,任务分解给智能体的一本“任务攻略”,教它如何一步步解决问题。 未来的研究,或许能找到更高效、更可靠的任务分解方法,让智能体在面对复杂任务时更加游刃有余。
(3.2) 多计划选择
多规划选择 (Multi-Plan Selection) 由于任务复杂性和 LLM固有的不确定性,给定任务,LLM代理可能会生成多种不同的规划。 如何让机器像人类一样,面对复杂任务时,能够生成多种可能解决方案,并从中选择最优的计划呢? 这正是“多计划选择”(Multi-Plan Selection)要解决的问题。 智能Agent面对复杂问题,可能会生成多个计划。但是,这些计划可能各不相同,甚至有些可能根本不可行。 怎么办?多计划选择, 两个主要步骤:多计划生成和最优计划选择。 多计划选择理论上很美,却面临着一些挑战。 ①多计划生成头脑风暴阶段尽可能多地提出解决方案。 主流方法利用生成模型在解码过程中的不确定性,比如通过温度采样或top-k采样获得多个不同推理路径。 多规划生成涉及利用生成模型解码过程中的不确定性,通过不同采样策略来产生多个候选规划。 Self-consistency: 采用简单直觉,即复杂问题的解决方案很少是唯一的。通过温度采样、top-k采样等策略,获得多个不同的推理路径。
Tree-of-Thought(ToT) : 提出“采样”和“提议”两种策略来生成规划。LLM在解码过程中会采样多个规划,并通过少量示例提示生成各种规划。
Graph-of-Thought(GoT) : 在ToT的基础上增加了思想转换,支持任意思想聚合。
LLM-MCTS 和 RAP: 利用LLM作为启发式策略函数,通过蒙特卡洛树搜索(MCTS)算法来获取多个潜在动作。
② 最优计划选择最优计划选择阶段,Agent 从多个候选计划中选择一个最好。 候选规划中选择最优规划时,采用了多种启发式搜索算法, 比如 简单的多数投票策略,或者利用树结构来辅助多计划搜索 案例 Self-consistency: 使用简单的多数投票策略,将得票最多的规划视为最优选择。
Tree-of-Thought(ToT) : 支持树搜索算法,如广度优先搜索(BFS)和深度优先搜索(DFS),使用LLM评估多个动作并选择最优动作。
LLM-MCTS和RAP: 也用树结构辅助多规划搜索,但采用MCTS算法进行搜索。
LLM A: 利用经典的A算法协助LLM搜索,使用当前位置到目标位置的切比雪夫距离作为启发式成本函数来选择最优路径。
思考• 多规划选择的可扩展性显著优势在于提供广阔搜索空间中广泛探索潜在解决方案的能力。 • 然而,这种优势伴随着计算需求的增加,尤其是对于具有大量token计数或计算的模型,这在资源受限的情况下尤为重要。 • LLM 在规划评估中的作用引入了新的挑战,因为LLM在任务排名方面的表现仍在审查中,需要进一步验证和微调其在此特定情境下的能力。 • LLM 的随机性质为选择过程增加了随机性,可能影响所选规划的一致性和可靠性。
(3.3) 外部规划器
外部规划器辅助规划 (External Planner-Aided Planning) 语音助手解决问题时,常常面临一些复杂环境约束, 单纯的LLM可能就会有点力不从心 尽管LLM在推理和任务分解方面展现出了强大的能力,但在面对具有复杂约束的环境时,例如数学问题求解或生成可执行动作,仍然面临挑战。 根据引入的规划器类型,分为两类: External Planner-Aided Planning,整体略复杂,很少会用到 虽然, LLM 在推理和任务分解方面展现出了强大的能力,但在面对复杂约束的环境时,借助外部规划器的规划方法显得尤为重要。LLM在这里主要扮演辅助角色,其主要功能包括解析文本反馈,为规划提供额外的推理信息,特别是解决复杂问题时。 这种结合统计AI和LLM的方法,有望成为未来人工智能发展的主要趋势。 ① 基于符号符号规划器一直是自动规划领域的基石 基于明确的符号化模型 比如 PDDL 模型,用符号推理来找出从初始状态到目标状态的最优路径。 LLM+P通过结合基于PDDL的符号规划器,增强了LLM的规划能力,用LLM的语义理解能力和编码能力,把问题组织成文本语言提示输入LLM,然后利用Fast-Downward求解器进行规划。
如果环境动态交互式,LLM-DP接收到环境反馈后,将信息形式化为PDDL语言,然后用 BFS 求解器生成计划。 此外,LLM+PDDL也在用PDDL语言形式化任务,并且加入了手动验证步骤,以防LLM生成的PDDL模型出现问题。
符号规划器代表工作: •LLM+P: 通过结合基于PDDL的符号规划器,使用LLM将问题组织成PDDL语言格式,并利用Fast Downward solver进行规划。 •LLM-DP: 特别为动态交互环境设计,将环境反馈信息形式化为PDDL语言,并使用BFS solver生成规划。 •LLM+PDDL: 在LLM生成的PDDL模型中增加手动验证步骤,并提出使用LLM生成的规划作为局部搜索规划器的初始启发式解。 •LLM+ASP: 将自然语言描述的任务转换为ASP问题,然后使用ASP求解器CLINGO生成规划。
规划过程中,提出的计划可作为局部搜索规划器的初始启发式解,加快搜索进程。 ② 基于神经网络神经规划器是深度模型,通过强化学习或模仿学习技术在收集的规划数据上训练,表现出在特定领域内有效的规划能力。 问题复杂且少见时,这些小模型可能因训练数据不足而表现不佳。 有些研究将LLM与轻量级神经网络规划器结合起来,以进一步提升规划能力。 神经规划器代表工作: 思考• 这些策略中,LLM主要扮演支持角色,主要功能包括: 解析文本反馈并提供额外的推理信息以协助规划,特别是在解决复杂问题时。 • 传统符号AI系统在构建符号模型时复杂且依赖于人类专家,而LLM可以加速这一过程,有助于更快更优地建立符号模型。 • 符号系统优势包括理论完备性、稳定性和可解释性。将统计AI与LLM结合,有望成为未来人工智能发展的主要趋势。
(3.4) 自我反思
自我反思和自我修正(Reflection and Refinemen) 为什么要反思和修正? LLM 规划过程中可能会产生幻觉,或因为理解不足而陷入“思维循环” 这时候停下来回头看看,总结一下哪里出了问题,然后进行调整,就能更好地继续前进。 反思和总结失败有助于代理纠正错误并在后续尝试中打破循环
自我反思让自主智能体改进过去的行动决策、纠正之前的错误来迭代改进,在可以试错的现实任务中非常有用。 反馈和改进是规划过程中不可或缺的组成部分,增强了LLM Agent 规划的容错能力和错误纠正能力。 如何反思、修正? 案例 •Self-refine: 利用迭代过程,包括生成、反馈和精炼。在每次生成后,LLM为计划产生反馈,促进基于反馈的调整。 •Reflexion: 扩展ReAct方法,通过引入评估器来评估轨迹。LLM 检测到错误时生成自我反思,帮助纠正错误。 •CRITIC: 使用外部工具,如知识库和搜索引擎,验证LLM生成的动作。然后利用外部知识进行自我纠正,显著减少事实错误。 •InteRecAgent: 使用称为ReChain的自我纠正机制。LLM用于评估由交互推荐代理生成的响应和工具使用计划,总结错误反馈,并决定是否重新规划。 •LEMA: 首先收集错误的规划样本,然后使用更强大的GPT-4进行纠正。纠正后的样本随后用于微调LLM代理,从而在各种规模的LLaMA模型上实现显著的性能提升。
挑战 LLM通过自我反思和修正,不仅能够提高自身的容错能力和错误纠正能力,而且还能在复杂问题规划中表现得更加出色。 思考• 自我反思策略类似于强化学习的原则,其中代理作为决策者,环境反馈触发策略网络的更新。然而,与深度强化学习通过修改模型参数来更新不同,在LLM代理中,这种更新是通过LLM自身的自我反思来实现的,最终形成文本形式的反馈。 • 这些文本反馈可以作为长期和短期记忆,通过提示影响代理后续的规划输出。然而,目前还没有确凿的证据证明这种文本形式的更新最终能够使LLM代理达到特定目标。
(3.5) 记忆增强
记忆增强规划 (Memory-Augmented Planning) 记忆是提升规划能力的关键, 帮助代理从经验中学习并适应新情境。 通过记忆来增强 LLM-Agents 规划能力的方法:RAG记忆和参数记忆 ① RAG 记忆RAG,检索增强生成,用检索到的信息来增强LLM最新知识。 把过去的经验存储在记忆中,需要时检索出来。 RAG-based Memory(基于RAG的记忆): • 概念:使用检索增强生成(Retrieval-Augmented Generation,RAG)技术,将记忆以文本形式存储,并在需要时检索出来辅助规划。 • 方法:如MemoryBank、TiM和RecMind,通过文本编码模型将记忆编码为向量,并建立索引结构,以便在规划时检索与当前任务相关的经验。
这些记忆通常以文本、表格形式或知识图谱等形式存储。 案例 Generative Agents:以文本形式存储类似于人类的日常经验,并根据当前情况的相关性和新鲜度来检索记忆。
MemoryBank、TiM和RecMind:将每个记忆编码成向量,并使用索引结构(如FAISS库)来组织这些向量。检索时,使用当前状态的描述作为查询来检索记忆池中的记忆。区别在于更新记忆的方式不同。
MemGPT:借鉴了计算机架构中的多级存储概念,将LLM 上下文视为RAM,并将额外的存储结构视为磁盘。LLM 自主决定是检索历史记忆还是将当前上下文保存到存储中。
REMEMBER:将历史记忆以Q值表的形式存储,每个记录是一个包含环境、任务、动作和Q值的元组。在检索时,会同时检索正面和负面记忆,以便LLM根据环境和任务的相似性生成计划。
② 参数记忆参数记忆通过微调LLM,将 Agent历史经验样本嵌入到模型参数中。 Embodied Memory(体现记忆): 这些经验样本通常来自Agent与环境的交互,可能包括关于环境的常识知识、与任务相关的先验知识,以及成功或失败的经验。 虽然微调一个大参数的模型成本很高,但通过PEFT,可以通过只训练一小部分参数来降低成本并加快速度。 思考两种方法都有优势和局限性。 记忆更新方式: 总结
这部分内容详情参考上一篇文章:《Agent技术解读:Memory记忆模块》
(4)规划能力评估
如何评估 (Evaluation) 代理的规划能力? 几种主流基准测试方法: 交互式游戏环境(Interactive Gaming Environments): 基于文本的交互环境(Text-based interactive environments): 交互式检索环境(Interactive Retrieval Environments): 交互式编程环境(Interactive Programming Environments):
|