Cognitive Architectures for Language Agents

2309.02427

Abstract#

近期研究通过外部资源 (如互联网) 和内部控制流程 (如 prompt 链) 增强了 LLM 处理需要基础 (grounding) 或推理的任务的能力, 但尚缺乏一个有效框架组织现有 LLM 并规划未来的发展. 本文借鉴了认知科学和符号人工智能的丰富历史, 提出了语言代理认知架构 CoALA, 它描述了一个带有模块化记忆组件, 能与内在记忆和外部环境交互的结构化动作空间, 和一个通用的用于选择行动的决策过程的语言智能体. CoALA 将今天的语言智能体置于 AI 更广泛的历史背景下, 并勾勒出一条通往基于语言的通用智能的道路.

Introduction#

语言智能体联系起了 LLM 有限的知识和推理能力与内在记忆和外部环境, 最早的智能体使用 LLM 直接选择或生成动作, 更近期的智能体还使用它们进行推理, 规划和管理长期记忆以改善决策. 最新一代认知的语言智能体使用非常复杂的内部过程, 而现在的独立工作使用自定义术语描述这些过程, 使比较, 分析和发展不同智能体变得非常困难.

为了建立一个能够组织起这些工作的框架, 作者借鉴了计算机和 AI 历史中的两个概念:产生式系统认知架构. 产生式系统通过迭代地应用规则产出一系列结果. 最初作为字符串处理系统, 随后被 AI 社区用于定义能处理复杂, 分层结构的系统, 并被纳入到认知架构中.

作者提出, 正如产生式系统指示了修改字符串的可能方式, LLM 也定义了一种文本变化或增加的分布. 这进一步表明, 结合产生式系统的认知架构控制可能同样适用于将 LLM 转化为语言代理.

因此, 作者提出了认知架构语言智能体 CoALA, 这是一个用于描述和设计通用语言智能体的概念框架. 它将智能体按照三个关键维度进行组织:

  • 信息存储, 包括工作记忆和长期记忆
  • 动作空间, 分为内部动作和外部动作
  • 决策过程, 结构是一个包括计划和执行的交互式循环

通过这三个概念记忆, 动作和决策, 这个框架可以清楚地表达现有的代理, 并确定开发新代理的方向.

Background#

用于操作字符串的产生式系统#

直观上, 产生式系统包括一系列规则, 每条规则指定一个前提和一个动作, 当满足前提时, 可以采取对应动作. 这个概念来自描述计算的极限的努力. Post 提出了用这些术语思考任意逻辑系统的想法, 其中将公式表达为字符串, 其结论被作为生产规则 (如同一个字符串「产生」另一个字符串).

这样的公式化随后被证明和一个简单的字符串重写系统等价, 在这样的系统中, 我们用如下形式的规则

XYZXWZX \, Y \, Z \rightarrow X \, W \, Z

以表示字符串 XYZXYZ 可以被重写为 XWZXWZ. 虽然这看起来像废话, 但字符串重写在形式语言理论中扮演着重要角色, 以 Chomsky 的短语结构语法的形式出现.

控制流: 从字符串到算法#

一个产生式系统本身只描述了从一个起点可以生成的字符集合, 但如果我们施加控制流以决定执行哪些生产, 它们可以用来指定算法. 例如, 以下算法通过把写成笔画 | 的数字转换成 QRQ*R 的形式来执行带余除法, 其中 QQ 表示商, RR 表示余数.

*||||| \rightarrow |* \\ * \xrightarrow{\bullet} * \\ \rightarrow *

例如, 给定输入 11, 结果为 *||||||||||| \rightarrow |*|||||| \rightarrow ||*| \xrightarrow{\bullet} ||*|, 即 11 除以 5 等于 2 余 1. 可以证明 Markov 算法是图灵完备的.

认知架构: 从算法到智能体#

产生式系统超越了字符串重写, 被推广到逻辑运算: 可以与智能体目标和世界状态进行验证的前提, 和可以在前提满足时采取的行动. Allen Newell 和 Herbert Simon 给出了如下例子:

(\mbox{temperature} > 70^{\circ})\wedge (\mbox{temperature} < 72^{\circ}) \rightarrow \mbox{stop}\\ \mbox{temperature} < 32^{\circ} \rightarrow \mbox{call for repairs; turn on electric heater} \\ (\mbox{temperature} < 70^{\circ}) \wedge \mbox{(furnace off)} \rightarrow \mbox{turn on furnace}\\ (\mbox{temperature} > 72^{\circ}) \wedge \mbox{(furnace on)} \rightarrow \mbox{turn off furnace}

此后, 产生式系统被人工智能社区采用. 人工智能研究人员定义了模仿人类认知的「认知架构」, 通过显式地实现感知, 记忆, 计划等过程实现灵活, 理性, 实时的行为, 实现了从心理学建模到机器人学的应用.

一个典型例子是 Soar. Soar 将产生式存储在长期记忆中, 并根据它们的前提条件有多符合工作记忆执行它们. 这些产生式指定了哪些行为可以修改工作记忆和长期记忆. 以下是对 Soar 的简要介绍.

记忆: 工作记忆反映了智能体的目前情况, 存储了智能体最近的感知输入, 目标和中间推理产生的结果. 长期记忆分为三类:

  • 程序记忆存储产生式系统本身, 一个可以应用于工作记忆以决定智能体行为的规则集合
  • 语义记忆存储关于世界的事实
  • 情景记忆记录智能体最近的行动序列

基础: Soar 可以在模拟中或现实世界的机器人系统中实现. 在具身情境中, 各种传感器将感知流输入到工作记忆, 以供智能体进行决策. Soar 智能体也可以配备执行器, 允许其通过语言进行物理操作和交互性学习.

决策: Soar 实现了一个决策循环以评估产生式系统并应用最合适的一个. 每个决策循环中, 所存储的产生式前提和当前工作记忆进行核对, 在提案和评估阶段, 使用一系列产生式生成一系列可能的行为并排序, 随后选择最佳行动. 随后使用另一组产生式执行行动.

学习: Soar 支持多种学习模式. 新信息可以存储在长期记忆中, 并在需要决策时检索到工作记忆, 行动也可以被修改. 可以使用强化学习以提升效果好的行动的权重. 最显著的是, Soar 可以将新的产生式写入其程序记忆, 有效更新其源代码.

过去的几十年内, 认知架构在人工智能社区中似乎热度有所下降, 这反映了此类系统涉及的两个挑战:

  • 它们仅限于可以用逻辑词描述的领域
  • 它们需要大量预先制定的规则才能运行

而 LLM 似乎非常适合应对这些挑战. 它们可以在任意文本上运行, 且不要求用户指定产生式规则, 而是在语料库上进行预训练以学习产生式规则的分布. 基于此, 研究人员已经开始在认知架构中使用 LLM, 而本文选择引入认知架构的原则指导基于 LLM 的智能体的设计.

LLM 与产生式系统的联系#

LLM 作为概率产生式系统#

产生式系统定义了可以从起点出发生成的字符串集合, 并将这个步骤分解为一系列的字符串重写操作. LLM 同样定义了一个对字符串 (即 LLM 的 prompt) 的扩展和修改的可能集合.

我们可以将一个完成一段文本的任务表述为一个产生式. 如果 XX 是 prompt, YY 是续写, 我们可以把这个产生式表述为 XXYX \rightarrow X \,\, Y. 如果希望允许多个可能的续写, 则对一个 YiY_i 的集合有 XXYiX \rightarrow X \,\, Y_i . LLM 将对这些续写中的每一个分配一个概率, 从这个角度来看, LLM 定义了一个概率分布 P(YiX)P (Y_i|X), 用于在给定输入 XX 时选择一个产生式, 从而得到一个可能的续写. 因此, LLM 可以被视为一个概率产生式系统, 每次调用时产生一个可能的续写.

这种形式与传统产生式相比, 缺点在于 LLM 的固有不透明性, 使得分析或控制其行为变得具有挑战性. 即使如此, 它们的规模和预训练仍然提供了巨大优势.

Prompt 工程作为控制流#

LLM 的权重定义了一种对补全内容的优先级排序, 由此产生的概率分布可以被解释为一种针对特定任务的产生式优先级, 即一种简单的控制流.

早期关于小样本学习和 prompt 工程的研究发现, 通过对输入的字符串进行预处理, 可以提升 LLM 给出产生式的质量.

向认知语言智能体迈进#

语言智能体不仅仅根据预定义的 prompt 链工作, 而是把 LLM 放进外部环境的反馈循环中. 这些方法将多模态输入转换为文本并传递给 LLM, 然后解析 LLM 的输出以决定下一步动作. 早期智能体直接将 LLM 相连; 随后的工作使用了更复杂的智能体, 让 LLM 在执行动作前进行中间推理; 最新的智能体结合了更复杂的学习策略, 例如通过反思情景记忆生成新的推理, 或修改它们的程序性记忆, 通过以往经验适应未来行为.

这些认知语言智能体运用了复杂的, 基于 LLM 的推理与学习能力. 作者认为, 认知架构不仅能用于构建产生式系统与智能体内部状态和外部环境的交互, 同样有助于设计基于 LLM 的认知智能体. 在本文的剩余部分, 作者将利用这一视角来梳理现有方法, 并指出前景广阔的研究方向.

Results#

CoALA 将 LLM 定义为更大的认知架构的核心组件, 在一个结构化, 分为内外两个部分的动作空间中行动.

  • 外部动作通过基础(grounding) 与外部环境交互, 如控制机器人, 与人类交流等.
  • 内部动作与内在记忆交互, 可以进一步分为:
    • 检索: 读取长期记忆
    • 推理: 使用 LLM 更新短期工作记忆
    • 学习: 写入长期记忆

语言智能体遵循一个循环, 通过决策选择动作. 循环中, 智能体使用推理和检索动作进行规划, 这个规划子过程会选择一个 grounding 以影响外部世界, 或选择一个学习行动以改变长期记忆. CoALA 的决策循环就像一个程序的 main 函数, 没有返回值, 循环运行, 接受新的感知输入并调用不同的动作作为相应.

CoALA 利用了记忆, grounding, 学习, 决策等关键概念, 而 LLM 的引入增加了「推理」动作, 可以灵活地生成新知识和启发式方法, 取代了手工写入的传统认知架构; 让文字成为了实际上的内在表示, 简化了智能体的记忆模块; 视觉 LLM 可以将感知数据直接翻译为文本, 简化了 grounding.

记忆#

LLM 不会持久化信息, 但语言智能体可以在内部存储和维护信息. 在 CoALA 框架下, 记忆模块主要包括以下几种:

  • 工作记忆为当前决策周期保存活跃且易获取的信息, 这些信息以符号变量的形式存在, 包括感知输入, 活跃知识, 从前一个决策周期传递过来的其他核心信息. 旧工作鼓励 LLM 生成中间推理步骤, 将 LLM 自身的上下文作为一种工作记忆. CoALA 框架中的工作记忆概念更为通用, 它是一种能在多次 LLM 调用间持久存在的数据结构, 每次调用的输入是从工作记忆的一个子集合成的. LLM 的输出被解析回其他变量, 存储回工作记忆并用于执行响应动作.
  • 情景记忆存储先前决策周期的经验, 在决策周期的规划阶段, 可以被检索到工作记忆中以支持推理. 智能体也可以将新的经验从工作记忆写入情景记忆, 作为一种学习形式.
  • 语义记忆存储智能体关于世界和自身的知识, 大部分情况下是只读的, 但语言智能体也可以选择将新知识写入语义记忆.
  • 程序记忆包括存储在权重中的隐性知识和写在智能体代码中的显性知识, 后者可以进一步分为执行动作的程序和实现决策本身的程序. 程序记忆必须由设计者初始化, 且一般情况下不会修改.

Grounding 动作#

该过程执行外部动作, 并将环境反馈作为文本处理到工作记忆中. 外部环境一般分为物理环境, 对话和数字环境三种.

检索动作#

检索过程从长期记忆中读取信息到工作记忆. 在语言智能体中, 自适应和与上下文相关的回忆机制仍未得到充分研究.

推理动作#

推理使语言智能体能够处理工作记忆中的内容以生成新信息. 推理既从工作记忆读取, 也向工作记忆写入, 可以用于支持学习或决策制定.

学习动作#

学习是通过向长期记忆写入信息发生的, 包括以下过程.

  • 用经验更新情景记忆
  • 用知识更新语义记忆
  • 更新程序性记忆 (LLM 参数)
  • 更新程序性记忆 (智能体代码), 包括更新推理过程, grounding 过程, 检索过程, 学习/决策过程

决策制定#

CoALA 将决策制定的顶层过程结构化为决策周期. 每个决策周期包括规划阶段和执行阶段.

规划期间阶段包括提出候选动作, 评估候选动作并分配价值, 选择动作三个步骤.

Conclusion#

CoALA 提供了一组独特, 具有互补性, 可行的启示.

模块化智能体#

智能体应当是结构化和模块化的, 一个用于语言智能体的框架将整合技术投入并提高兼容性.

智能体设计#

CoALA 基于三个不同概念定义智能体:

  • 内部记忆
  • 可能的内部和外部动作
  • 基于这些动作的决策过程

因此在设计智能体时, 应当采取以下步骤:

  • 确定所需记忆模块
  • 定义智能体的内部动作空间
  • 定义决策过程

结构化推理#

CoALA 建议采用更结构化的推理过程更新工作记忆变量. 例如, LangChain 和 LlamaIndex 这样的提示框架可以用于定义更高级的推理步骤序列, 减少每次 LLM 调用的推理负担和低级 prompt 工程的工作.

学习#

重要的未来方向包括:

  • 修改智能体代码进行元学习
  • 新的学习形式, 包括为特定推理子任务微调更小的模型, 删除不需要的记忆, 研究多种学习形式间的交互等

动作空间#

CoALA 主张定义一个清晰且适合任务的, 包含内部动作和外部动作的动作空间, 这将有助于系统化并指导智能体设计.

需要注意的方面包括动作空间的规模和安全性问题.

决策制定#

这是语言智能体最令人兴奋的未来方向之一. 目前大多数工作仍局限于提出单个动作.

  • 混合基于语言的推理和基于代码的规划可能提供两全其美的效果, 未来工作可以整合二者.
  • 将经典的规划和树搜索方案扩展到具有 grounding 和长期记忆的复杂任务中.
  • 通过元推理提高效率.
  • 校准和对齐, 避免幻觉等.

Discussion#

推理应该是纯语言的还是多模态的?

智能体与环境的边界在哪里?

物理环境的智能体与数字环境的智能体的哪些差异值得关注?

智能体如何持续自主地学习?

更强大的大语言模型将如何改变智能体设计?