二、如何为智能体进行规划

大模型LLM应用开发:手把手教你设计 Agent 用户交互(二)如何为智能体进行规划_ai

在三月份的 Sequoia AI Ascent 大会上,我提到了智能体的三大限制:规划、用户体验(UX)和记忆。你可以在此观看演讲:https://www.youtube.com/watch?v=pBBe1pk8hf4

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

1、什么是规划和推理?

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

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

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

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

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

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

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

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

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

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

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

以 AlphaCodium 论文(https://www.qodo.ai/products/alphacodium/)为例,它通过使用「流程工程」(认知架构的另一种说法)实现了当前最先进的性能。下图展示了他们所使用的流程。

大模型LLM应用开发:手把手教你设计 Agent 用户交互(二)如何为智能体进行规划_AI大模型_02

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

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

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

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

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

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

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

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

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

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

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

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

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

大模型LLM应用开发:手把手教你设计 Agent 用户交互(二)如何为智能体进行规划_人工智能_03

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