关于智能体、认知架构 、规划 • LangChain
本文是 LangChain 官方发布的关于 Agent 的系列文章,这里我将其汇总和翻译了一下 什么是智能体? “什么是智能体?” 我几乎每天都会被问到这个问题。在 LangChain,我们构建工具来帮助开发人员构建大语言模型 (LLM) 应用程序,尤其是那些作为推理引擎并与外部数据和计算源交互的应用程序。这类系统通常被称为“智能体”。 每个人对智能体的定义似乎都有些不同。我的定义可能比大多数人的更技术化: 智能体是使用 LLM 来决定应用程序控制流的系统。 即便在这里,我也不得不承认我的定义并不完美。人们常常认为智能体是高级的、自主的、类人的——但如果只是一个简单系统,其中大语言模型 (LLM) 在两条路径之间进行选择呢?这虽然符合我的技术定义,但并不符合大家对智能体能力的普遍认知。智能体到底是什么,确实很难准确定义! 这就是为什么我非常喜欢 Andrew Ng 上周的推文。在推文中,他建议“与其争论哪些工作应该包含或排除为真正的智能体,我们可以承认系统的智能行为有不同的程度。”就像自动驾驶汽车有不同的自动驾驶级别一样,我们也可以将智能体的能力视为一个光谱。我非常同意这个观点,我认为 Andrew 表达得很好。未来,当有人问我什么是智能体时,我会转而讨论什么是“智能行为”。 智能行为是什么意思? 去年我做了一个关于 LLM 系统的 TED 演讲,并使用下面的幻灯片来讨论 LLM 应用程序中存在的不同自主级别。 一个系统越“智能”,LLM 决定系统行为的程度就越高。 使用 LLM 将输入路由到特定下游工作流具有一定程度的“智能”行为。这会在上图的Router类别中。 如果你使用多个 LLM 进行多个路由步骤?这会介于Router和State Machine之间。 如果其中一个步骤是确定是否继续或结束——有效地允许系统在完成之前循环运行?这会属于State Machine。 如果系统正在构建工具,记住这些工具,然后在未来的步骤中使用它们?这类似于Voyager 论文中实现的,非常智能,属于更高的Autonomous Agent类别。 这些“智能”定义仍然非常技术化。我更喜欢“智能”的技术定义,因为我认为它在设计和描述 LLM 系统时很有用。 为什么“智能”是一个有用的概念? 与所有概念一样,值得问的是我们为什么需要“智能”这个概念。它有何帮助? 了解你的系统有多智能可以指导你在开发过程中的决策——包括构建、运行、与之交互、评估甚至监控它。 你的系统越智能,编排框架就越有帮助。如果你正在设计一个复杂的智能系统,拥有一个具有正确抽象概念的框架可以加速开发。这个框架应该对分支逻辑和循环有一流的支持。 你的系统越智能,运行就越困难。它会越来越复杂,某些任务将需要很长时间才能完成。这意味着你会希望将任务作为后台运行。这也意味着你希望有持久的执行能力来处理中途发生的任何错误。 你的系统越智能,你就越希望在运行时与它交互。你会希望能够观察内部发生的情况,因为所采取的确切步骤可能事先未知。你会希望能够在特定时间点修改智能体的状态或指令,如果它偏离了预定路径,可以将其拉回正轨。 你的系统越智能,你就越希望有一个为这些类型的应用程序构建的评估框架。你会希望多次运行评估,因为有大量随机性叠加。你会希望能够不仅测试最终输出,还测试中间步骤,以测试智能体的效率。 你的系统越智能,你就越希望有一个新型的监控框架。你会希望能够深入了解智能体所采取的所有步骤。你还会希望能够根据智能体所采取的步骤查询运行情况。 了解和利用系统中的智能能力光谱可以提高开发过程的效率和健壮性。 智能是新的 我经常思考的一个问题是,在这场热潮中,什么是真正新的。我们是否需要为人们构建的 LLM 应用程序提供新工具和新基础设施?还是以前的通用工具和基础设施就足够了? 对我来说,你的应用程序越智能,拥有新工具和基础设施就越关键。这正是促使我们构建LangGraph,一个帮助构建、运行和交互智能体的编排器,以及LangSmith,一个用于 LLM 应用程序的测试和可观测性平台。随着我们在智能光谱上不断前进,支持性工具的整个生态系统需要重新构想。 什么是“认知架构”? 更新:有几位读者指出,“认知架构”这个术语在神经科学和计算认知科学中有丰富的历史。根据维基百科的定义,“认知架构”既指关于人类心智结构的理论,也指这种理论的计算实现。这个定义(以及相关的研究和文章)比我在这里提供的定义更为全面。所以这篇博客应该被视为我在过去一年中构建和帮助构建基于大语言模型 (LLM) 应用程序的经验与这一研究领域的对照。 在过去的六个月里,我经常使用“认知架构”这个短语,而且以后可能会更多地使用。这是我第一次从 Flo Crivello 那里听到的术语——所有的功劳都归于他,我认为这是一个很棒的术语。那么我究竟指的是什么呢?...