A Survey of Large Language Models
- 前言
- 6 UTILIZATION
- 6.1 In-Context Learning
- 6.1.1 提示公式
- 6.1.2 演示设计
- 6.1.3 底层机制
- 6.2 Chain-of-Thought Prompting
- 6.2.1 CoT的上下文学习
- 6.2.2 关于CoT的进一步讨论
- 6.3 Planning for Complex Task Solving
- 6.3.1 整体架构
- 6.3.2 计划生成
- 6.3.3 反馈获取
- 6.3.4 计划优化
前言
随着人工智能和机器学习领域的迅速发展,语言模型已经从简单的词袋模型(Bag-of-Words)和N-gram模型演变为更为复杂和强大的神经网络模型。在这一进程中,大型语言模型(LLM)尤为引人注目,它们不仅在自然语言处理(NLP)任务中表现出色,而且在各种跨领域应用中也展示了惊人的潜力。从生成文本和对话系统到更为复杂的任务,如文本摘要、机器翻译和情感分析,LLM正在逐渐改变我们与数字世界的互动方式。
然而,随着模型规模的增加,也出现了一系列挑战和问题,包括但不限于计算复杂性、数据偏见以及模型可解释性。因此,对这些模型进行全面而深入的了解变得至关重要。
本博客旨在提供一个全面的大型语言模型综述,探讨其工作原理、应用范围、优点与局限,以及未来的发展趋势。无论您是该领域的研究者、开发者,还是对人工智能有广泛兴趣的读者,这篇综述都将为您提供宝贵的洞见。
本系列文章内容大部分来自论文《A Survey of Large Language Models》,旨在使读者对大模型系列有一个比较程序化的认识。
论文地址:https://arxiv.org/abs/2303.18223
6 UTILIZATION
在预训练或适应性调整后,使用大型语言模型(LLMs)的主要方法之一是设计适当的提示策略以解决各种任务。一个典型的提示方法是“上下文学习”(In-context Learning)[50, 55],它以自然语言文本的形式构建任务描述和/或示范。此外,还可以采用“思维链提示”(Chain-of-Thought Prompting)[33]来通过在提示中涉及一系列中间推理步骤来增强上下文学习。更进一步,为了解决复杂任务,已经提出了“规划”(Planning)[357],该方法首先将它们分解为更小的子任务,然后生成一个行动计划,以逐一解决这些子任务。我们在表9中总结了这些提示方法的代表性工作。接下来,我们将详细阐述这三种技术的细节。
表 9:典型的 LLM 使用方法及其在 ICL、CoT 和规划中的关键点。请注意,关键点仅突出最重要的技术贡献。
6.1 In-Context Learning
作为一种特殊的提示形式,在GPT-3 [55] 中首次提出了上下文学习(ICL),这已经成为利用LLM的典型方法之一。
6.1.1 提示公式
正如[55]中所述,ICL使用格式化的自然语言提示,包括任务描述和/或一些任务示例作为演示。图12展示了ICL的示意图。首先,从任务数据集中选择一些示例作为演示,然后按特定顺序将它们组合成具有特殊设计模板的自然语言提示。最后,测试实例被附加到演示中,作为LLM生成输出的输入。基于任务演示,LLM可以识别并执行新任务,无需明确的梯度更新。形式上,让 D k = f ( x 1 , y 1 ) , . . . , f ( x k , y k ) D_k = {f(x_1, y_1), ...,f(x_k, y_k)} Dk=f(x1,y1),...,f(xk,yk)表示一组带有k个示例的演示,其中 f ( x k , y k ) f(x_k, y_k) f(xk,yk)是将第k个任务示例转化为自然语言提示的提示函数。给定任务描述I,演示 D k D_k Dk和新的输入查询 x k + 1 x_{k+1} xk+1,从LLM生成的输出 y k + 1 ˆ y^ˆ_{k+1} yk+1ˆ的预测可以如下公式化:
图 12:上下文学习 (ICL) 和思维链 (CoT) 提示的比较图示。ICL 通过自然语言描述、多个演示和测试查询来提示 LLM,而 CoT 提示涉及提示中的一系列中间推理步骤。
在这个公式中,实际答案 y k + 1 y_{k+1} yk+1被留空,由LLM进行预测。由于ICL的性能在很大程度上依赖于演示,因此在提示中正确设计它们非常重要。根据方程(9)中的构建过程,我们关注提示中格式化演示的三个主要方面,包括如何选择组成演示的示例,如何使用函数f(·)将每个示例格式化为提示,并合理安排演示的顺序。
ICL的全面审查已经在调查论文[50]中进行了介绍,我们建议读者参考它以获得更一般、更详细的讨论。与这份综述相比,我们特别关注两个主要方面,即将ICL应用于LLM的讨论,即演示设计和ICL的基本机制。此外,ICL与指令调整(在第5.1节中讨论)密切相关,因为两者都利用自然语言来格式化任务或实例。然而,指令调整需要对LLM进行微调以适应,而ICL只是用于提示LLM以进行利用。此外,指令调整可以增强LLM执行目标任务的ICL能力,特别是在零样本设置下(仅使用任务描述)[64]。
6.1.2 演示设计
一些研究已经表明,ICL的有效性受到演示设计的高度影响[350, 370, 371]。在第6.1.1节的讨论之后,我们将从三个主要方面介绍ICL的演示设计,即演示选择、格式和顺序。
演示选择
ICL的性能在不同的演示示例下往往具有较大的方差[345],因此选择能够有效利用LLM的ICL能力的示例子集非常重要。有两种主要的演示选择方法,即启发式方法和基于LLM的方法:
• 启发式方法。由于其简单性和低成本,现有的工作广泛采用启发式方法来选择演示。一些研究采用基于k-NN的检索器来选择与查询语义相关的示例[345, 372]。然而,它们为每个示例单独执行选择,而不是将示例集作为一个整体进行评估。为了解决这个问题,提出了基于多样性的选择策略,以选择特定任务的最具代表性的示例集[373, 374]。此外,在[375]中,在选择演示时同时考虑了相关性和多样性。
• 基于LLM的方法。另一种方法是利用LLM来选择演示。例如,LLM可以被用来直接衡量每个示例的信息量,根据添加示例后的性能增益来衡量[376]。此外,EPR [346] 提出了一个两阶段的检索方法,首先通过无监督方法(例如BM25)召回相似的示例,然后使用密集的检索器(由LLM标记的正负示例训练)对它们进行排名。作为另一种替代方法,演示选择的任务可以被制定成一个强化学习问题,其中LLM充当奖励函数,为训练策略模型提供反馈[377]。由于LLM在文本注释方面表现出色[378],一些最近的研究将LLM本身作为演示生成器而不需要人工干预[379]。
总结一下,正如[380]中讨论的那样,ICL中选择的演示示例应该包含足够的关于要解决的任务的信息,并与测试查询相关,对于上述两种选择方法都是如此。
演示格式
在选择任务示例之后,下一步是将它们集成并格式化为LLM的自然语言提示。一个直接的方法是使用相应的输入-输出对来实例化预定义的模板[36]。为了构建更具信息性的模板,最近的研究考虑添加任务描述[64]或使用思维链提示增强LLM的推理能力[33]。例如,在[264]中,作者收集了一个由人类编写的任务描述的大规模数据集。通过使用这个数据集进行调优,可以提高对已知任务的性能,并且LLM在某种程度上也可以推广到未知任务。为了降低注释成本,[129]提出了一种半自动化方法,通过使用由人类编写的任务描述组成的种子集来引导LLM生成新任务的任务描述。由于手动为不同任务注释演示格式的成本很高,一些工作也研究如何自动生成高质量的演示格式。作为两种代表性方法,Auto-CoT [352] 利用LLM进行零样本提示“让我们一步一步地思考”以生成中间推理步骤,而least-to-most提示 [357] 首先查询LLM以执行问题分解,然后基于先前解决的问题的中间答案使用LLM顺序解决子问题。
演示顺序
LLM有时候会受到新近偏见的影响,即它们倾向于重复接近演示末尾的答案[371]。因此,合理安排演示(即任务示例)的顺序非常重要。早期的工作提出了一些启发式方法来快速找到一个好的顺序。例如,可以根据示例在嵌入空间中与查询的相似度直接组织演示:越相似,越靠近末尾。此外,全局和局部熵度量可以用来评分不同的演示顺序[350]。为了整合更多的任务信息,一些最近的研究提出了最小化压缩和传输任务标签所需的码长,受信息理论启发[381]。然而,这些方法需要额外的带标签数据作为验证集来评估特定演示顺序的性能。为了消除这种需求,[350]的作者建议从LLM本身中抽样验证数据。
6.1.3 底层机制
在预训练后,LLM可以展示出令人感兴趣的ICL能力,而无需进行更新。接下来,我们讨论LLM的ICL能力的两个关键问题,即“预训练如何影响ICL能力”和“LLM在推理过程中如何执行ICL”。
预训练如何影响ICL?
ICL首次在GPT-3 [55]中提出,已经证明,ICL能力随着模型规模的增大变得更加显著。此外,一些研究发现,小规模的PLM也可以通过在特别设计的训练任务上进行持续预训练[382]或微调[383]来展示强大的ICL能力,这些训练任务通常在训练过程中在输入中包含了额外的任务示例。这表明训练任务的设计是影响LLM的ICL能力的重要因素。除了训练任务,最近的研究还调查了ICL与预训练语料库之间的关系[380, 384]。例如,ICL可以在理论上解释为在展现长距离连贯性的文档上进行的预训练的产物[380]。此外,另一项研究[384]在理论上分析了当扩展参数和数据时,基于下一个词预测的LLM可以通过从语言数据中存在的组合结构(例如,单词和短语如何组合成更大的语言单位,如句子)中学习ICL的能力。
LLM如何执行ICL?
在推理阶段,研究人员关注分析ICL能力如何基于给定的演示运作,因为没有涉及明确的学习或更新。根据[385]中的讨论,LLM利用演示有两种主要方式:任务识别和任务学习。
• 任务识别。在第一种方式中,LLM从演示中识别任务,并利用从预训练中获得的先验知识来解决新的测试任务。已经提出了一个可能大致正确(PAC)的框架[386]来评估ICL的可学习性。它假设在预训练数据中存在一个表示任务的潜变量,LLM已被证明能够从演示中捕获这个变量,使它们能够在ICL中识别任务。此外,ICL被解释为任务识别的观点得到了几项实证研究的支持[370, 387]。例如,观察到将演示的输入或标签替换为从输入或标签空间中随机抽样的随机值并不会严重损害LLM的性能,表明LLM主要是从演示中识别目标任务而不是从中学习[370, 385]。类似地,即使提示模板不相关或具有误导性,LLM也可以表现出不错的性能[387]。
• 任务学习。在第二种方式中,LLM只通过演示来学习预训练阶段看不见的新任务。特别地,任务学习主要从梯度下降的角度进行分析,并被视为隐式微调[60, 388]。然后,ICL可以如下解释:通过前向计算,LLM生成关于演示的元梯度,并通过注意机制隐式执行梯度下降。实验还表明,LLM中的某些注意头部能够执行与任务无关的原子操作(例如,复制和前缀匹配),这与ICL的能力密切相关[389]。此外,一些研究将ICL抽象为算法学习过程[390]。例如,[390]中的作者发现,LLM在预训练期间本质上通过其参数编码了隐式模型。通过ICL提供的示例,LLM可以执行学习算法,如梯度下降,或者直接计算封闭形式的解来更新这些模型。在这个解释框架下,已经证明LLM可以有效地学习简单的线性函数,甚至一些复杂的函数,如决策树[390]。
正如最近一项研究所讨论的[385],LLM在ICL中展示了任务识别和任务学习的能力,但这两种能力似乎在不同的模型规模下表现出来。如实验[385]所示,任务识别的能力更容易获得,即使只有350M参数的小型LM也可以展示出这种能力,而任务学习只能在至少具有66B参数的LLM中出现。另一项研究[391]也通过特别设计的实验支持了这一发现。他们在实验中设置了标签翻转和语义无关的任务,这需要在进行ICL时进行任务学习。结果表明,小型LLM倾向于忽略标签,主要依赖其先验知识来完成任务,而LLM具有超越其先验知识的能力,可以从演示中获得新知识,从而取得更好的结果。此外,为了提高任务学习能力,Meta-In-Context Learning [392]提出在提示中包含多个相关任务,而不仅仅是一个单一任务。此外,Symbol Tuning [393]通过使用语义无关的标签(例如,情感分析中的foo/bar而不是正面/负面)在演示中微调LLM,迫使LLM从演示中学习任务而不是依赖先验知识。
6.2 Chain-of-Thought Prompting
Chain-of-Thought(CoT)[33]是一种改进的提示策略,旨在提高LLMs在复杂推理任务上的性能,如算术推理[394]、常识推理[395]和符号推理[33]。与ICL中简单地构建输入-输出对作为提示不同,CoT将可以导致最终输出的中间推理步骤纳入提示中。接下来,我们将详细说明如何在ICL中使用CoT,并讨论CoT提示何时以及为什么有效。
6.2.1 CoT的上下文学习
通常情况下,CoT可以在两种主要设置中与ICL一起使用,即少样本学习和零样本学习,如下所介绍。
Few-shot CoT.
少样本 CoT 是 ICL 的一种特殊情况,通过将每个演示 ⟨输入, 输出⟩ 扩展为 ⟨输入, CoT, 输出⟩ 来融入 CoT 推理步骤。要应用这一策略,我们接下来讨论两个关键问题,即如何设计合适的 CoT 提示以及如何利用生成的 CoT 来得出最终答案。
• CoT 提示设计。设计有效引发LLMs的复杂推理能力的合适CoT提示至关重要。直接的方法是使用多样的CoT(即每个问题的多个推理路径),可以有效增强其性能[355]。另一个直观的想法是,具有更复杂推理路径的提示更有可能引发LLMs的推理能力[351],这可以导致生成正确答案的更高准确性。然而,所有这些方法都依赖于注释的CoT数据集,这限制了它们在实践中的使用。为了克服这一限制,Auto-CoT [352] 提出了使用Zero-shot-CoT [396](在下文的“零样本 CoT”中详细介绍)通过特殊提示LLMs来生成CoT推理路径,从而消除了手工努力。为了提高性能,Auto-CoT进一步将训练集中的问题分成不同的簇,并选择最接近每个簇的质心的问题,这应该很好地代表了训练集中的问题。尽管少样本CoT可以被看作是ICL的一种特殊提示案例,但与ICL中的标准提示相比,演示的排序似乎影响相对较小:重新排序演示在大多数任务中只导致性能变化不到2% [33]。
• 增强 CoT 策略。除了丰富上下文信息,CoT 提示还提供了更多在给定问题的情况下推断答案的选项。现有研究主要集中在生成多个推理路径,并尝试在派生的答案中找到共识[354, 356]。例如,提出了一种新的解码策略,称为自一致性 [354],用于在生成CoT和最终答案时。它首先生成几个推理路径,然后对所有答案进行集成(例如,在这些路径之间通过投票选择最一致的答案)。自一致性大幅提高了CoT推理的性能,甚至可以改善一些任务,其中CoT提示通常比标准提示更差(例如,封闭书籍问题回答和自然语言推理)。此外,[356] 中的作者将自一致性策略扩展为更通用的集成框架(扩展到提示的集成),并发现多样的推理路径是提高CoT推理性能的关键。上述方法可以轻松集成到CoT提示中,以增强性能而无需额外培训。相反,其他研究则训练评分模型来衡量生成的推理路径的可靠性[355],或者持续培训LLMs,以改善其性能,并生成自己的推理路径[397]。
Zero-shot CoT
与少样本 CoT 不同,零样本 CoT 不包括在提示中人工注释的任务演示。相反,它直接生成推理步骤,然后使用生成的 CoT 推导答案。零样本 CoT 首次在[396]中提出,其中首先通过“让我们逐步思考”来提示LLM生成推理步骤,然后通过“因此,答案是”来推导最终答案。他们发现,当模型规模超过一定大小时,这种策略显著提高性能,但对小规模模型不有效,表现出显著的新兴能力模式。为了在更多任务上发挥 CoT 能力,Flan-T5 和 Flan-PaLM [64] 进一步对 CoT 注释进行了指令调整,从而提高了在未见任务上的零样本性能。
6.2.2 关于CoT的进一步讨论
在这一部分,我们讨论了与 CoT 相关的两个基本问题,即“CoT 何时适用于LLMs”和“LLMs为什么能够执行CoT推理”。
CoT 何时适用于LLMs?
由于 CoT 是一种新兴能力[31],它只对足够大的模型产生积极影响(通常包含10B或更多的参数[33]),而对小模型无效。此外,由于 CoT 通过中间推理步骤增强了标准提示,因此它主要适用于需要逐步推理的任务[33],例如算术推理、常识推理和符号推理。而对于不依赖于复杂推理的其他任务,CoT 可能导致比标准提示更差的性能[356],例如来自GLUE的MNLI-m/mm、SST-2和QQP。有趣的是,似乎只有当标准提示产生糟糕的结果时,CoT 提示带来的性能提升才可能显著[33]。
LLMs为什么能够执行CoT推理?
作为第二个问题,我们讨论了CoT的底层机制,涉及以下两个方面。
• CoT 能力的来源。关于 CoT 能力的来源,广泛的假设是它可以归因于对代码的训练,因为在其上训练的模型显示出强大的推理能力[47, 398]。直观地说,代码数据以算法逻辑和编程流程进行了良好的组织,这可能对提高LLMs的推理性能有用。然而,这一假设仍然缺乏公开报道的去除实验(在有和没有代码训练的情况下)。此外,调整指令似乎不是获得CoT能力的关键原因,因为经验证明,在非CoT数据上进行的指令调整不会提高针对保留的CoT基准的性能[64]。
• 提示组件的效果。CoT提示与标准提示的主要区别在于在最终答案之前纳入了推理路径。因此,一些研究人员研究了推理路径中不同组件的影响。具体来说,最近的一项研究确定了CoT提示中的三个关键组件,即符号(例如,算术推理中的数值数量)、模式(例如,算术推理中的方程式)和文本(即,不是符号或模式的其余标记)[399]。结果显示,后两个部分(即,模式和文本)对模型性能至关重要,去除其中任何一个都会导致性能大幅下降。然而,符号和模式的正确性似乎不那么关键。此外,文本和模式之间存在一种共生关系:文本帮助LLMs生成有用的模式,而模式则帮助LLMs理解任务并生成有助于解决任务的文本[399]。
总之,CoT提示提供了一种通用但灵活的方法,用于引发LLMs的推理能力。还有一些初步尝试将这一技术扩展到解决多模态[400]和多语言任务[401]。
6.3 Planning for Complex Task Solving
使用ICL和CoT的提示是一种概念上简单但通用的方法,用于解决各种任务。然而,这种方法在处理复杂任务,如数学推理[402]和多跳问题回答[403]时遇到了困难。作为一种增强的方法,基于提示的规划已被提出,用于将复杂任务拆分为较小的子任务,并生成行动计划来完成任务。
6.3.1 整体架构
在这一部分,我们首先制定了LLMs解决复杂任务的一般规划范式,如图13所示。
图 13:LLM 用于解决复杂任务的基于提示的规划公式的图示。
在这一范式中,通常包括三个组成部分:任务规划器、计划执行器和环境。具体来说,任务规划器由LLMs扮演,旨在生成解决目标任务的整个计划。计划可以以各种形式呈现,例如自然语言形式的动作序列[357]或以编程语言编写的可执行程序[361]。基于LLMs的任务规划器可以通过记忆机制进行增强,用于计划的存储和检索,这有助于处理长期任务。然后,计划执行器负责执行计划中的动作。它可以由文本任务的模型(例如LLMs)[359]或编码任务的工具(例如代码解释器)[368]来实现。此外,环境是指计划执行器执行动作的地方,可以根据具体任务进行不同设置,例如LLM本身[404]或像Minecraft[405]这样的外部虚拟世界。它提供关于动作执行结果的反馈给任务规划器,可以采用自然语言[368]或来自其他多模态信号的形式[364]。
为了解决复杂任务,任务规划器首先需要清楚地理解任务目标,并根据LLMs的推理生成一个合理的计划(参见第6.3.2节)。然后,计划执行器根据计划在环境中执行动作,而环境将为任务规划器产生反馈(参见第6.3.3节)。任务规划器可以进一步将从环境中获得的反馈纳入其初始计划以进行改进,并迭代执行上述过程以获得更好的任务解决方案(参见第6.3.4节)。
接下来,我们将介绍基于规划的任务解决中的三个关键步骤。
6.3.2 计划生成
计划生成侧重于通过提示LLMs直接生成动作序列。根据生成计划的格式,现有的工作可以分为两组:基于文本和基于代码的方法。
基于文本的方法
LLMs以自然语言形式生成计划是直接的。在这种方法中,LLMs被提示生成一系列动作,供计划执行器执行并解决复杂任务。例如,Plan-and-Solve [359] 在提示中添加明确的指令,如“制定一个计划”,以以零样本方式直接提示LLMs进行规划,而Selfplanning [406] 和 DECOMP [358] 在提示中添加演示以指导LLMs通过ICL制定计划。沿着这种方式,一些工作在规划时进一步考虑了在计划时纳入额外的工具或模型。例如,ToolFormer [71] 首先使用LLMs对预训练语料库进行了潜在API调用的注释,然后在其上进行了微调,以便LLMs可以学习何时以及如何调用API,并在生成过程中纳入API返回的结果。HuggingGPT [362] 引入了HuggingFace可用的模型,并将LLMs视为控制器,根据其描述选择合适的模型并将其结果汇总为最终解决方案。
基于代码的方法
尽管基于文本的方法听起来很直观,但它们无法保证计划的忠实执行,这可能导致即使计划是合理的,也会失败。为了解决这个问题,提出了基于代码的方法,以生成以编程语言(例如Python或PDDL)形式的可执行代码的更可验证的计划。这样,首先提示LLMs生成程序,然后利用确定性求解器来执行它。例如,Faithful CoT [360] 和 PAL [361] 将推理任务分解为两个阶段:在第一阶段,LLMs在查询的条件下生成计划;在第二阶段,确定性求解器执行计划以得出最终答案。此外,基于代码的方法也可以以类似的方式应用于具有身体的代理。例如,PROGPROMPT [407] 和LLM+P [408] 首先利用LLMs生成以Python函数或PDDL文件形式的计划,然后利用虚拟代理或经典计划器根据基于代码的计划解决问题。
6.3.3 反馈获取
在执行生成的计划之后,环境将产生反馈信号,供基于LLMs的任务规划器使用,以便对其初始计划进行改进以获得更好的结果。在现有工作中,通常有两种来自环境的反馈来源,取决于它们与基于LLMs的任务规划器的关系:内部反馈(即LLM本身)和外部反馈(例如工具或虚拟世界)。
内部反馈
LLM本身可以被用作反馈提供者。一个直接的方式是通过提示直接评估生成的计划的质量。例如,RAP [365] 通过评估每个候选计划能够导致任务成功的可能性来进行评估,而Tree of Thoughts [404] 则提出通过进行计划之间的比较来对计划进行投票。此外,LLMs可以基于计划执行器的中间结果提供反馈。例如,Reflexion [368] 利用LLMs将稀疏的结果信号(例如成功或失败)转化为具体的基于文本的反馈(例如,“你应该推荐用户在查询中提到的喜剧,而不是恐怖电影”),并将此反馈存储在长期记忆中以供将来的规划使用。
外部反馈
除了LLMs,外部对象也可以提供反馈信号。例如,在编程任务中广泛使用代码解释器以提供实时错误消息[368],在多模态任务中可以使用模型如稳定扩散 [409] 以提供视觉感知[364],而像Minecraft这样的虚拟世界可以提供沉浸式体验[405]。此外,一些工作(例如生成式代理[410])探讨了在模拟环境中的多代理协作,其中每个代理不仅从与环境的互动中接收反馈,还从与其他代理的交流中接收反馈。
6.3.4 计划优化
通过从环境获取反馈信息,任务规划器可以相应地优化其当前计划,并迭代地进行“规划-执行-优化”循环以获得更好的结果。在这一部分中,我们总结了现有工作中的三种主要的优化方法。
推理
来自环境的反馈数据可能不直接适合LLMs用于计划优化,例如,包含不相关的信息或采用非语言形式。为了解决这个问题,一些工作添加了显式的推理过程,以从反馈中提取关键信息[366, 367]。例如,React [367] 通过演示提示LLMs生成反馈上的推理追踪。它已经广泛用于自主代理项目,例如AutoGPT47,可以自动推理观察到的反馈以修改解决各种用户请求的初始计划。然而,这些方法通常固定了推理和规划的顺序。为了支持在两个过程之间灵活切换以获得更好的性能,ChatCoT [366] 进一步将工具增强的推理过程统一为LLM-based任务规划器和基于工具的环境之间的多轮对话。
回溯
早期的方法主要考虑前向规划,同时保持现有计划,因此可能导致基于短期评估的局部最优计划。为了解决这个问题,Tree of Thoughts [404] 允许使用广度优先和深度优先搜索等搜索算法进行回溯以进行全局规划。它通过回溯到初始计划中的上一个状态并选择下一个未探索的动作来逐步完善计划。此外,一些研究[364, 411] 利用反馈信号来修改整个计划。例如,DEPS [411] 根据反馈信号选择更好的计划,而TIP [364] 在提示中添加反馈信号,以供基于LLMs的规划器修订初始计划中的每个步骤。
记忆化
为了处理长期任务,除了通过ICL利用LLMs的短期记忆外,使用长期记忆来辅助计划优化已经成为一个关键方法。例如,Reflexion [368] 将自我反思的反馈存储到内存中,以便可以检索以进行计划优化。Generative Agents [410] 设计了内存流机制作为代理的核心组件,用于行动规划和反思。此外,提出了技能库机制 [363, 405] 来存储成功的计划,这些计划可以被重用和合成为新任务的复杂计划。为了实现长期记忆机制,可以使用工具如向量数据库(例如milvus [412])将计划或反馈编码成高维向量,以便进行大规模的高效存储和检索。MemoryBank [413] 进一步提出了记忆更新机制,以允许根据Ebbinghaus遗忘曲线理论进行记忆遗忘和强化。