今年 3 月,我在红杉资本的 AI Ascent 大会上谈到了代理的三个局限性:规划、用户体验和记忆。你可以在这里观看那次演讲。在这篇文章中,我将深入探讨代理的规划问题。
如果你问任何使用 LLM 构建代理的开发者,他或她可能会说,代理无法很好地进行规划和推理,是导致代理可靠性下降的一个主要问题。对于代理来说,规划意味着什么?人们目前是如何克服这个缺陷的?规划和推理的未来(我们对未来的最佳猜测)会是什么样的?我们将在下面介绍所有这些内容。
规划和推理到底是什么意思?
代理的规划和推理涉及 LLM 思考采取哪些行动的能力。这包括短期和长期步骤。LLM 会评估所有可用信息,然后决定:我需要采取哪些步骤,以及现在应该采取的第一个步骤是什么?
大多数情况下,开发者会使用函数调用(也称为工具调用)让 LLM 选择要采取的行动。函数调用是2023 年 6 月 OpenAI 首次添加到 LLM API 的功能,然后在 2023 年底/2024 年初由其他人添加。使用函数调用,你可以提供不同函数的 JSON 模式,并让 LLM 输出与其中一个(或多个)模式匹配的对象。有关如何执行此操作的更多信息,请参阅我们的指南在这里。
函数调用用于让代理选择作为立即行动要做什么。但是,为了成功完成一项复杂的任务,你通常需要按顺序采取许多行动。这种长期规划和推理对于 LLM 来说是一项更艰巨的任务,原因有几个。首先,LLM 必须考虑更长的时间范围目标,然后才能回到需要采取的短期行动。其次,随着代理采取的行动越来越多,这些行动的结果会反馈给 LLM;这会导致上下文窗口不断增长,这会导致 LLM“分心”并导致性能下降。
与 LLM 世界中的大多数事情一样,很难准确衡量当前模型在规划和推理方面的表现。有一些合理的基准,例如伯克利函数调用排行榜,用于评估函数调用。我们已经对评估多步骤应用程序做了一些研究。但是,了解这一点的最佳方法是为你的特定问题建立一个评估集,并尝试自己进行评估。
目前有哪些方法可以改善代理的规划能力?
改善规划最简单的方法是确保 LLM 拥有进行合理推理/规划所需的所有信息。这听起来可能很简单,但很多时候传递给 LLM 的提示 simply does not contain enough information for the LLM to make a reasonable decision. 添加检索步骤或澄清提示说明可以轻松地进行改进。这就是为什么实际查看数据并了解 LLM 实际看到的内容至关重要的原因。
之后,我建议你尝试更改应用程序的认知架构。我所说的“认知架构”是指应用程序用来进行推理的数据工程逻辑。有两种类型的认知架构可以帮助你改善推理能力:通用认知架构和领域特定认知架构。
通用认知架构与领域特定认知架构
通用认知架构试图在通用情况下实现更好的推理能力。它们可以应用于任何任务。一个很好的例子是“计划和解决”架构。这篇论文探讨了一种架构,首先制定计划,然后执行计划中的每个步骤。另一个通用架构是 Reflexion 架构。这篇论文探讨了在代理完成任务后添加一个显式的“反思”步骤,以反思它是否正确完成任务。
尽管这些想法取得了进步,但它们通常过于笼统,无法在生产中被代理实际应用。相反,我们看到人们正在构建具有领域特定认知架构的代理。这通常表现为领域特定的分类/路由步骤、领域特定的验证步骤。规划和反思的一些通用思想可以应用于此,但它们通常是以领域特定的方式应用的。
举个具体的例子,让我们来看看AlphaCodium 论文。通过使用他们称之为“流程工程”(另一种谈论认知架构的方式),该论文取得了最先进的性能。请参见下面他们使用的流程图。

该流程对他们试图解决的问题非常具体。他们告诉代理要按步骤进行——先想出测试,然后想出解决方案,然后迭代更多测试,等等。这种认知架构高度特定于领域——例如,它无法帮助你写论文。
为什么领域特定认知架构如此有用?
我喜欢用两种方式来思考这个问题。
第一种方式:你可以将这看作是另一种向代理传达它应该做什么的方法。你可以在提示说明中传达指令,也可以在代码中硬编码特定的转换。两种方法都有效!代码是传达你想要发生的事情的绝佳方式。
第二种方式:这实际上是将规划责任从 LLM 转移到了我们工程师身上。我们实际上是在说:“不用担心规划,LLM,我会帮你做!”当然,我们并没有完全从 LLM 中去除规划,因为我们仍然要求 LLM 在某些情况下进行规划。
例如,让我们回到上面的 AlphaCodium 示例。流程中的步骤实际上是我们为 LLM 制定的计划!我们告诉它先写测试,然后写代码,然后运行测试,等等。这可能是作者认为编写软件的最佳计划。如果他们正在规划如何解决问题,他们会这样做。他们没有在提示中告诉 LLM 做这些事情——因为 LLM 可能忽略它、不理解它、没有所有细节——而是通过构建领域特定认知架构来告诉系统去做。
我们正在使用LangGraph来简化构建这些定制认知架构的过程。LangGraph 的一个重要关注点是可控性。我们设计 LangGraph 具有非常低级且高度可控的特性——这是因为我们发现,这种可控性水平对于创建可靠的定制认知架构是 100% 必要的。
规划和推理的未来会是什么样子?
LLM 空间一直在快速变化和发展,我们在构建应用程序(尤其是构建工具)时要牢记这一点。
我目前的看法是,通用推理将越来越被模型层吸收。模型将变得越来越智能,无论是通过规模扩展还是研究突破——反对这一点似乎是愚蠢的。模型也将变得更快、更便宜,因此向它们传递大量上下文将变得越来越可行。
但是,我相信,无论模型变得多么强大,你都需要以某种形式告诉代理它应该做什么。因此,我相信提示和定制架构将长期存在。对于简单的任务,提示可能就足够了。对于更复杂的任务,你可能希望将行为逻辑写入代码中。代码优先方法可能更快、更可靠、更易于调试,并且通常更容易/更合乎逻辑地表达。
我最近参加了播客,与红杉资本的 Sonya 和 Pat 讨论了这个话题。他们画了一张很棒的图,展示了提示、认知架构和模型的作用/重要性随着时间的推移是如何演变的。

因此,虽然 LLM 的规划和推理能力肯定会提高,但我们也坚信,如果你正在构建一个特定于任务的代理,那么你需要构建一个定制的认知架构。这就是我们对LangGraph的未来如此看好的原因。