为智能体进行规划 [译]

为智能体进行规划 [译]

这是我们“In the Loop”系列中的第四篇文章,我们在其中讨论了智能体规划的意义以及如何提升规划能力。

在三月份的Sequoia AI Ascent大会上,我提到了智能体的三大限制:规划、用户体验(UX)和记忆。你可以在此观看该演讲 这里。本文将深入探讨智能体规划问题。

如果你询问任何使用大语言模型(LLM)构建智能体的开发者,他们很可能会提到规划和推理能力的不足是影响智能体可靠性的一大问题。那么,规划对智能体意味着什么?人们目前是如何克服这一短板的?未来智能体的规划和推理能力可能会如何发展?我们将在下文中讨论这些问题。

什么是规划和推理?

智能体的规划和推理涉及LLM决定采取哪些行动的能力。这个过程包括短期和长期的步骤。LLM需要评估所有可用的信息,然后决定:我需要采取哪些步骤?当前我应该采取的第一步是什么?

大多数情况下,开发者使用函数调用(也称为工具调用)来让LLM选择行动。函数调用是OpenAI于2023年6月首次在LLM API中引入的功能,随后在2023年底和2024年初被其他平台采用。通过函数调用,你可以为不同的函数提供JSON架构,让LLM输出的对象匹配这些架构之一。有关更多信息,请参阅我们的函数调用指南

函数调用通常用于让智能体选择当前的即时行动。然而,成功完成复杂任务往往需要一系列连续的行动。这种长期规划和推理对LLM来说更具挑战,原因有以下几点。首先,LLM需要考虑一个长远的目标,但同时还必须跳回到当前的短期行动中。其次,随着智能体采取更多的行动,这些行动的结果会反馈给LLM,这会导致上下文窗口不断扩大,进而可能导致LLM分心,表现不佳。

正如LLM领域的许多事情一样,当前模型在规划和推理方面的表现难以准确衡量。有一些合理的基准测试,例如伯克利函数调用排行榜,用于评估函数调用能力。我们也进行了一些关于多步骤应用的研究。但是,要了解这方面表现的最佳方式是针对你的具体问题建立一个评估集,并自行进行评估

💡从经验来看,目前的规划和推理能力还没有达到处理现实任务所需的水平。

目前有哪些方法可以改善智能体的规划能力?

改善规划能力最简单的方式是确保LLM拥有进行合理推理和规划所需的所有信息。虽然这听起来很基础,但很多时候传递给LLM的提示中并没有包含足够的信息,导致它无法做出合理的决策。添加一个信息检索步骤,或者更加明确地说明提示中的指令,可以作为简单的改进措施。这也是为什么需要实际查看数据,看看LLM实际接收到的信息是什么。

接下来,我建议你尝试改变应用程序的认知架构。所谓“认知架构”,是指应用程序用于推理的数据处理逻辑。你可以选择两类认知架构来改善推理能力:通用认知架构和领域特定认知架构。

通用认知架构 vs. 领域特定认知架构

通用认知架构尝试在任意任务中提升推理能力。一个很好的例子是“规划与解决”架构。这篇论文探讨了一种架构,在这种架构中,首先制定一个计划,然后逐步执行计划中的每一步。另一个通用架构是Reflexion架构,这篇论文提出,在智能体完成任务后增加一个“反思”步骤,以评估任务执行得是否正确。

尽管这些想法展示了推理能力的提升,但它们往往过于通用,难以应用于生产环境中的智能体。相反,我们发现智能体通常使用领域特定的认知架构。这通常体现在领域特定的分类和路由步骤、验证步骤等方面。虽然某些通用的规划和反思理念在这里同样适用,但通常是以领域特定的方式应用。

AlphaCodium论文为例,它通过使用“流程工程”(认知架构的另一种说法)实现了当前最先进的性能。下图展示了他们所使用的流程。

该流程非常针对其要解决的问题。他们要求智能体按步骤进行操作——首先编写测试,然后编写解决方案,接着迭代更多的测试等。这个认知架构高度领域特定,并不会对写作任务产生帮助。

为什么领域特定的认知架构如此有用?

我喜欢从两个角度来解释这一点。

首先:你可以将其视为另一种向智能体传达其应执行任务的方式。你可以通过提示来传达指令,也可以通过代码明确规定具体的步骤。两种方式都是有效的!代码是传达预期行为的极佳方式

其次:这实际上是将规划责任从LLM转移到了我们这些工程师手中。我们基本上是在告诉LLM:“不用担心规划,我来替你做!”当然,我们并没有完全移除LLM的规划责任,因为在某些情况下我们仍要求它进行部分规划。

例如,回到上面的AlphaCodium例子。流程中的步骤基本上是我们替LLM进行的规划!我们告诉它先编写测试,然后写代码,再运行测试等。这实际上是作者认为编写软件的一个好计划。如果他们要为某个问题制定一个解决方案,可能也是以这种方式进行规划的。与其通过提示告诉LLM执行这些步骤——提示可能被忽略、误解或缺少细节——他们通过构建领域特定的认知架构向系统传达如何操作。

💡

我们看到,几乎所有生产环境中的高级“智能体”实际上都有非常领域特定且定制的认知架构。

我们通过LangGraph让构建这些定制认知架构变得更加容易。LangGraph的一个核心重点是可控性。我们设计了LangGraph,使其操作非常底层且高度可控——因为我们发现,要创建可靠的定制认知架构,100%的可控性是必须的。

规划和推理的未来会怎样?

LLM领域变化迅速,我们在构建应用程序时,尤其是在构建工具时,应该对此保持关注。

我目前的看法是,通用推理将越来越多地融入模型层。模型将变得越来越智能,无论是通过规模的扩大还是研究的突破——押注这一趋势似乎是不明智的。模型也会变得更快、更便宜,因此传递大量上下文信息给它们将变得更加可行。

然而,我相信,无论模型多么强大,你始终需要以某种形式向智能体传达其应执行的任务。因此,我认为提示和定制架构将继续存在。对于简单任务,提示可能就足够了;而对于复杂任务,可能需要通过代码来定义其行为。代码优先的方法可能更快、更可靠、更易于调试,并且在很多情况下表达起来更加简洁、合理。

我最近参加了一个podcast,与Sequoia的Sonya和Pat讨论了这个话题。他们绘制了一张很棒的图,展示了提示、认知架构和模型的角色和重要性如何随着时间推移而演变。

所以,尽管LLM的规划和推理能力将不断提升,我们依然坚信,如果你正在构建一个任务特定的智能体,定制认知架构将是必不可少的。这也是我们对LangGraph未来充满信心的原因。