CoALA - Cognitive Architectures for Language Agents · essay

18. CoALA:用认知架构统一理解 Language Agent

论文:Cognitive Architectures for Language Agents
本地原文:

![[papers/18-CoALA-2309.02427.pdf]]

论文定位与阅读路径

核心定位

CoALA 不是专门讲某个记忆算法,而是提出一个认知架构框架,用工作记忆、情景记忆、语义记忆、程序性记忆和动作空间来组织语言智能体。

如果你觉得 Agent 论文术语很乱,这篇就是一张架构蓝图。

原文结构导读

章节内容读法
AbstractLanguage Agent 缺少统一组织框架看 CoALA 的目标
1 Introduction为什么需要认知架构理解背景
2 Background从字符串到符号 AGI可略读,但能帮助理解
3 LM 与 production system语言模型和规则系统的连接抓住“推理循环”
4 CoALA Framework核心框架重点
5 Case Studies用框架分析现有 Agent重点
6 Actionable Insights可执行设计建议工程重点
7 Discussion讨论和限制了解边界
8 Conclusion总结回看架构

证据链阅读

证据点读什么工程判断
Framework 定义工作记忆、长期记忆、动作空间如何分层用来统一 Agent 模块名,减少术语混乱
Case Studies现有 Agent 能否被 CoALA 解释框架是否有解释力,而不是空分类
Actionable Insights作者给出哪些可执行设计建议哪些能直接变成工程 checklist
Discussion框架的边界和未解决问题不要把认知架构当成完整实现方案

方法框架与核心机制

CoALA 的核心图景

flowchart TD
    A["Environment"] --> B["Perception"]
    B --> C["Working Memory"]
    C --> D["Decision / Reasoning"]
    D --> E["Action"]
    E --> A
    C --> M["Long-term Memory"]
    M --> F["Episodic"]
    M --> G["Semantic"]
    M --> H["Procedural"]

这个框架的重点是:

  1. Agent 不只是 LLM 调 API。
  2. Agent 有记忆结构。
  3. Agent 有动作空间。
  4. Agent 在环境中循环感知、思考、行动。

四类记忆

CoALA 对你最重要的是这四类记忆:

记忆中文存什么Agent 例子
Working Memory工作记忆当前任务上下文当前计划、当前用户问题
Episodic Memory情景记忆过去发生的事件上次修 bug 的过程
Semantic Memory语义记忆稳定事实和概念Java、MCP、项目架构
Procedural Memory程序性记忆怎么做事运行测试、发 PR、排错步骤

这个分类非常实用。你以后设计 Agent Memory 时,不要只建一个 memory 表,要先问:

代码块TEXT · 1 行收起展开
这条记忆属于哪一类?

Working Memory:当前脑子里正在想什么

工作记忆就是当前任务的临时状态。

例子:

代码块TEXT · 4 行收起展开
用户现在要我拆解 Agent Memory 论文。
已经完成 1-10。
当前正在补 11-21。
需要更新 history 和 CodexRules。

工作记忆一般不一定永久保存,但它决定当前行动是否连贯。

Episodic Memory:发生过什么

情景记忆是“过去事件”。

例子:

代码块TEXT · 1 行收起展开
2026-07-05,用户 A 要求把 Agent Memory 论文 PDF 下载到 essay/papers,并逐篇精读。

它带时间、地点、参与者、过程,适合用于:

  1. 回忆历史任务。
  2. 复盘失败原因。
  3. 保持跨会话连续性。

Semantic Memory:稳定知识

语义记忆是“世界事实和概念”。

例子:

代码块TEXT · 2 行收起展开
MCP 是一种让模型接入工具、资源和上下文的协议。
RAG 包括索引、检索、重排、上下文构造。

它不像情景记忆那样强调“什么时候发生”,更强调概念关系。

Procedural Memory:怎么做

程序性记忆是技能。

例子:

代码块TEXT · 3 行收起展开
如何在 PowerShell 里检查 git 状态。
如何给 Obsidian 笔记生成 Mermaid 图。
如何跑 Java Maven 测试。

Voyager 的 skill library 就是程序性记忆的典型例子。

Action Space:Agent 能做什么

CoALA 不只讲 memory,还讲 action。

动作类型例子
外部动作调 API、读文件、运行命令
内部动作思考、规划、检索记忆
语言动作向用户提问、解释
工具动作调用 MCP 工具、搜索、编辑

一个 Agent 强不强,不只取决于 LLM,还取决于:

代码块TEXT · 1 行收起展开
它能看到什么 + 它记得什么 + 它能做什么 + 它如何选择动作。

Case Studies 怎么看

论文用 CoALA 去分析已有 Agent。你读这里时不用记所有案例,只要学会一招:

代码块TEXT · 5 行收起展开
看到一个 Agent 系统,就把它拆成:
Memory 是什么?
Action 是什么?
Decision 是什么?
Environment 是什么?

比如 MemGPT:

CoALA 维度MemGPT
Working Memory当前上下文
Episodic/Semantic外部记忆
Actionmemory tool call
DecisionLLM 决定何时读写

比如 Voyager:

CoALA 维度Voyager
Working Memory当前 Minecraft 状态
Episodic任务尝试历史
Procedural技能库
Action执行代码控制游戏

工程映射与实践启发

对工程设计的启发

如果你要做 Personal Knowledge Agent,可以按 CoALA 分模块:

代码块TEXT · 7 行收起展开
agent/
  working-memory/      当前任务状态
  episodic-memory/     历史任务和对话
  semantic-memory/     Obsidian 知识概念
  procedural-memory/   可复用技能和流程
  action/              工具调用
  policy/              决策与路由

这比一个大而全的 AgentService 更清楚。

概念校准

你自己学习时也有四类记忆:

  1. 工作记忆:现在这道题做到哪一步。
  2. 情景记忆:上次考试哪里错了。
  3. 语义记忆:操作系统里进程和线程的定义。
  4. 程序性记忆:怎么用公式解题,怎么写代码。

CoALA 只是把这个人类认知结构迁移到语言 Agent。

局限、对比与阅读检查

局限与边界

  1. 它是概念框架,不是直接可运行系统。
  2. 分类很清楚,但真实系统里记忆可能交叉。
  3. 没有解决具体检索、更新、遗忘算法。
  4. 工程实现还要处理权限、成本、失败恢复。

阅读检查清单

  1. CoALA 为什么是架构框架,不是单个算法。
  2. 四类记忆:working、episodic、semantic、procedural。
  3. Agent = memory + action + decision + environment。
  4. 如何用 CoALA 拆解 MemGPT、Voyager、Reflexion。
  5. 如何用它设计自己的 Agent 后端模块。

深度精读:CoALA 是 Agent 架构的“解剖图”

1. 为什么认知架构重要

没有架构时,Agent 很容易变成:

代码块TEXT · 1 行收起展开
一个大 prompt + 一堆工具 + 一些 if else

CoALA 的价值是把 Agent 拆成稳定概念:

代码块TEXT · 1 行收起展开
Memory + Action + Decision + Environment

这让你能分析任何 Agent,而不是被框架名字牵着走。

2. Working memory 是运行时状态,不是长期记忆

工作记忆保存当前任务状态:

代码块TEXT · 4 行收起展开
当前正在处理第几篇论文?
用户刚才的反馈是什么?
哪些文件已经写过?
下一步要做什么?

它类似程序里的 runtime state。丢了它,Agent 会“断片”。

3. Episodic memory 是历史事件

情景记忆关注“发生过什么”:

代码块TEXT · 3 行收起展开
2026-07-05 用户反馈论文笔记太浅。
之前已经下载了 21 篇论文 PDF。
A-MEM 的源链接曾经修正过。

它应该带时间、来源和上下文。没有这些,历史事件会变成模糊事实。

4. Semantic memory 是稳定知识

语义记忆关注“什么是什么”:

代码块TEXT · 3 行收起展开
MemGPT 把上下文管理类比操作系统。
Zep 使用时序知识图谱。
Reflexion 使用语言反思作为经验记忆。

它更像知识卡片,适合结构化和双链。

5. Procedural memory 是最容易被忽略的

程序性记忆关注“怎么做”:

代码块TEXT · 4 行收起展开
如何下载论文。
如何检查嵌入文件是否存在。
如何扩写论文精读笔记。
如何更新 history/CodexRules。

编程 Agent 想越用越顺手,procedural memory 非常关键。

6. Action 也要分类

CoALA 不只讲记忆。动作也要拆:

动作例子
External action读写文件、运行命令、调用 API
Internal action检索记忆、规划、反思
Communicative action向用户解释、提问

工具调用只是 external action 的一部分。规划和反思也是动作。

7. 用 CoALA 设计你的 Agent

代码块TEXT · 7 行收起展开
WorkingMemoryService:当前任务状态
EpisodicMemoryService:历史事件
SemanticMemoryService:概念知识
ProceduralMemoryService:技能流程
ActionExecutor:工具执行
PolicyEngine:决定下一步动作
TraceService:记录每次行动

这套拆分比一个 AgentService 清晰得多。

8. 判断一个 Agent 框架是否成熟

用 CoALA 问它:

  1. 工作记忆在哪里?
  2. 长期记忆有哪些类型?
  3. 技能如何保存?
  4. 工具调用如何审计?
  5. 失败后如何反思?
  6. 当前状态如何跨回合延续?

答不上来,就是 demo 级 Agent。

精读补强:CoALA 的证据链与工程判断

CoALA 的价值是架构分层。读它时不要纠结某个模块名字,而要看它怎样把 Agent 拆成可替换部件。

判断点原文证据工程含义
工作记忆当前任务临时信息如何组织对应运行时 context builder
长期记忆episodic、semantic、procedural 如何区分对应不同存储表和检索策略
行动空间工具、环境动作如何暴露对应 tool registry 和 permission gate
决策循环观察、推理、行动、更新如何闭环对应 Agent runtime 状态机

把 CoALA 用到工程里,最重要的是边界清楚:记忆模块不直接执行动作,工具模块不负责总结经验,规划模块不绕过权限。边界清楚,后续才能替换模型、检索器或工具实现。

论文精读主线:问题-方法-验证-局限-启发

1. 核心结论

CoALA 用认知架构把语言 Agent 拆成 working、episodic、semantic、procedural memory 和 action space,提供一张 Agent 系统解剖图。

本篇的阅读重心是:用认知架构区分 working、episodic、semantic、procedural memory 和 action space。读完后要能说清它改变的是 runtime、存储、检索、更新还是评测层;否则只是记住了论文名。

2. 问题背景

Agent 框架常把 prompt、工具、记忆、规划混在一起讲,导致系统边界不清。没有认知层分类,很难判断一个信息应该放在当前上下文、历史事件、稳定知识还是技能流程里。

把问题具体化为失败样例:所有状态都塞进一个 memory 模块,导致当前任务状态、历史事件、稳定知识和技能流程互相污染。用这个样例反推论文动机,比泛泛说“上下文不够”或“记忆不准”更有判断力。

3. 核心方法

CoALA 借认知科学分类,将 Agent 状态分为 working memory、episodic memory、semantic memory、procedural memory,并把 action space 作为 Agent 能做什么的边界。

flowchart TD
    I[当前输入] --> W[Working Memory]
    W --> E[Episodic Memory]
    W --> S[Semantic Memory]
    W --> P[Procedural Memory]
    W --> A[Action Space]
    A --> O[外部工具/环境]

方法部分按数据流读:运行时状态进入 working memory,事件进入 episodic,概念进入 semantic,技能进入 procedural,工具由 action space 约束。每一步都要能标出输入、输出、控制点和失败后该记录的日志。

4. 技术细节

Working memory 是运行时正在想的内容,不是长期记忆;episodic 是发生过什么;semantic 是稳定知识;procedural 是怎么做;action space 是能调用什么工具。这些边界直接对应工程模块。

代码块JAVA · 15 行收起展开
final class CoalaAgentArchitecture {
    private final WorkingMemory workingMemory; // 保存当前任务状态、临时目标和本轮上下文
    private final EpisodicMemory episodicMemory; // 保存历史事件、任务过程和对话片段
    private final SemanticMemory semanticMemory; // 保存稳定知识、概念和文档事实
    private final ProceduralMemory proceduralMemory; // 保存可复用技能、流程和工具使用方法

    MemoryResult handle(MemoryInput input) {
        // 1. 保存当前任务状态、临时目标和本轮上下文
        // 2. 保存历史事件、任务过程和对话片段
        // 3. 保存稳定知识、概念和文档事实
        // 4. 保存可复用技能、流程和工具使用方法
        // 输出中保留 traceId、sourceIds、decisionReason,方便复盘和回滚。
        return MemoryResult.withTrace(input.traceId());
    }
}

字段检查重点是 workingStateepisodeconceptprocedureactionSchema 分别对应不同存取规则。这些字段不是装饰,它们决定后续能否检索、审计、回滚、限权和做离线评测。

5. 实验验证

CoALA 更像架构框架,验证方式是看它能否解释多个 Agent case,并指导系统拆分。工程上可用它审查:一次失败是 working memory 丢状态,还是 episodic 没召回,还是 procedural 没技能。

实验阅读重点:用 CoALA 审查失败归因:是丢了当前状态,没召回历史,缺稳定知识,还是没有可执行技能。如果论文没有直接给出这层证据,复现时就要自己补机制级指标。

6. 局限与启发

分类清楚不等于实现自动可靠。启发是你的 Agent 目录和服务层可以按这四类记忆拆,而不是只建一个 memory 包。

迁移到你的项目时,结论是:你的代码包可以按这四类拆接口;不必一开始四套存储,但边界必须先清楚。先把边界做对,再追求更复杂的模型或更大的记忆规模。

7. 关键术语表

术语在论文里的意思工程落地时要看什么
Working memory当前工作上下文本轮 prompt、任务状态、临时变量
Episodic memory经历记忆历史事件和执行轨迹
Semantic memory语义知识笔记、文档、概念事实
Procedural memory程序性记忆技能、流程、工具使用方式

8. 复现难点

最常见错误是把所有长期内容叫 semantic memory,或者把技能也存成普通文本。procedural memory 必须能指导行动,最好可执行或可验证。working memory 必须有预算和清理策略。

复现入口应从失败集开始:把一个学习任务拆成四类记忆输入,检查回答失败时能定位到缺哪一类。只有先证明旧方案会坏,才知道新机制是否真的解决了问题。

9. 代码框架建议

包结构可按 memory/workingmemory/episodicmemory/semanticmemory/procedural 拆。每类都有自己的 write/read/update/eval,不共用一套模糊接口。

代码验收门槛:新增 memory 字段时必须标注属于哪类认知记忆;混不清的字段先不入库。这条门槛应写进测试或 trace 字段里,避免实现只停留在 demo。

10. 相关论文对比

CoALA 和 MIRIX 都强调分工;CoALA 是认知分类,MIRIX 是多模块系统实现。Voyager 属于 procedural memory,Generative Agents 偏 episodic + reflection,RAG 笔记库偏 semantic。

横向比较时抓这个角度:CoALA 是系统解剖图,MIRIX 是模块实现,Voyager 是 procedural memory 的典型例子。比较对象不是谁“更先进”,而是谁负责哪一层失败。

11. 批判性思考

CoALA 的价值是边界,不是算法。不要因为有四类记忆就机械实现四个复杂系统;应从任务失败出发,缺哪类补哪类。

批判边界:分类不是实现目标;如果任务只需要 semantic RAG,就不要为了完整性硬做四套复杂系统。这不是否定论文,而是把论文结论放回真实系统的成本、权限和恢复约束里。