What is a "cognitive architecture"?

什么是“认知架构”?

我们“In the Loop”系列的第二部分,重点介绍认知架构的含义。

3 分钟阅读

更新:一些读者指出,“认知架构”一词在神经科学和计算认知科学中有着悠久的历史。根据维基百科的定义,“认知架构既指关于人类心智结构的理论,也指此类理论的计算实现”。该定义(以及与之相关的研究和文章)比我在此尝试提供的任何定义都更全面,本文应被视为我过去一年中在构建和协助构建 LLM 驱动的应用程序的经验与该研究领域的映射。

在过去的六个月里,我经常使用(并且将来可能还会更多地使用)一个短语:“认知架构”。这是我从 Flo Crivello 那里听到的一个术语——他应该为此术语的提出而受到所有赞誉,我认为这是一个绝妙的术语。那么,我到底是什么意思呢?

我所说的认知架构是指你的系统如何思考——换句话说,是指那些接受用户输入并执行操作或生成响应的代码/提示/LLM 调用流。

我喜欢“认知”这个词,因为自主系统依赖于使用 LLM 来推理应该做什么。

我喜欢“架构”这个词,因为这些自主系统仍然涉及大量的工程工作,类似于传统的系统架构。

将自主性级别映射到认知架构

如果我们回顾一下这张幻灯片(最初来自 我的 TED 演讲),其中展示了 LLM 应用中不同级别的自主性,我们可以看到不同认知架构的例子。

首先是纯代码——一切都是硬编码的。这甚至算不上是认知架构。

接下来是单个 LLM 调用。在调用之前和/或之后进行一些数据预处理,但单个 LLM 调用构成了应用程序的大部分。简单的聊天机器人可能属于此类。

接下来是 LLM 调用链。这个序列可以是将问题分解成不同的步骤,或者仅仅服务于不同的目的。更复杂的 RAG 管道属于此类:使用第一个 LLM 调用生成搜索查询,然后使用第二个 LLM 调用生成答案。

在此之后,是路由器。在此之前,你知道应用程序将采取的所有步骤提前。现在,你不再需要了。LLM 决定采取哪些行动。这会增加一点随机性和不可预测性。

下一个级别是我称之为状态机的。这是将 LLM 进行路由与循环结合起来。这甚至更不可预测,因为通过将路由器与循环结合,系统(理论上)可以调用无限次数的 LLM 调用。

最后一个自主性级别是我称之为代理,或者说是“自主代理”的级别。对于状态机,仍然存在对可以采取的操作以及该操作之后执行的流程的限制。对于自主代理,这些限制被消除了。系统本身开始决定可以采取哪些步骤以及指令是什么:这可以通过更新用于驱动系统的提示、工具或代码来完成。

选择认知架构

当我谈论“选择认知架构”时,我的意思是选择你想采用的这些架构中的哪一个。这些架构没有严格的“优劣”之分——它们都为不同的任务提供了各自的目的。

在构建 LLM 应用程序时,你可能会想以与试验提示词的频率相同地试验不同的认知架构。我们正在构建 LangChainLangGraph 来实现这一点。我们过去一年的大部分开发工作都集中在构建低级、高度可控的编排框架(LCEL 和 LangGraph)。

这与早期 LangChain 专注于易于使用的现成链有所不同。这些链对于入门非常有用,但很难自定义和试验。这在早期是可以的,因为每个人都只是想开始,但随着该领域的成熟,其设计很快就达到了极限。

我对我们在过去一年中为使 LangChain 和 LangGraph 更具灵活性和可定制性所做的更改感到非常自豪。如果你只通过高级包装器使用过 LangChain,请查看低级部分。它们更具可定制性,并且能真正让你控制应用程序的认知架构。

如果你正在构建直接的链和检索流,请查看 PythonJavaScript 中的 LangChain。对于更复杂的代理工作流程,请尝试 PythonJavaScript 中的 LangGraph。

© . This site is unofficial and not affiliated with LangChain, Inc.