Cognitive Architectures for Language Agents (CoALA)
待复核CoALA(Cognitive Architectures for Language Agents,Sumers et al., arXiv:2309.02427)是一张给 LLM Agent 画的地图,不是某个新 agent 产品。
日常类比:餐厅后厨。工作记忆像正在做的那几张小票;长期记忆像菜谱柜和过往翻车记录;动作是切菜、叫供应商、改菜单;决策是厨师长每轮喊「下一步做什么、何时停」。
它把语言 agent 拆成记忆、动作、决策三块,回答:LLM 怎么从文本补全器,变成能持续行动的系统。如果说 ReAct 像一种具体打法,CoALA 更像分析打法的语法。
作者不是发明单一新 agent,而是给 2023 前后爆炸增长的 agent 工作画共同坐标系:读不同论文时,不必每次重新学一套名字。
你可以把它当成「读论文用的检查清单」:新系统一出来,先标出它的记忆放哪、动作有哪些、决策怎么停,再决定要不要抄它的实现细节。
不理解 CoALA,下面这些事很难对齐:
- 为什么各家 agent 论文都在说 planning / memory / tool use / reflection,却对不上号
- 为什么「换更大模型」常常治不好 agent:失败可能在记忆写错、动作空间乱、决策无退出
- 为什么工程上要把 Agent 看成「LLM + 控制结构」,而不是「会聊天的模型」
- 为什么架构评审时要分别问:记什么、能做什么、怎么选下一步
CoALA 把失败点拆开,让调试更具体:是检索错、工具错、规划错,还是模型生成错。
对产品团队更直接的价值是:排期与分工可以按三块拆——记忆基建、工具/权限、决策与评测——而不是所有人一起调一句超级 prompt。
-
工作记忆:当前任务正在用的信息(目标、观察、草稿、中间结论)。类比:灶台上那几张小票,做完就清,不该和菜谱柜混放。
-
长期记忆:向量库、日志、知识库,或模型参数里已有知识。类比:菜谱柜——跨班次还能翻;向量库只是其中一种柜子实现。
-
动作空间:外部 API,也包括检索/写入记忆、总结状态。类比:刀工与打电话都是「动作」,但权限与可回滚性完全不同。
-
决策过程:何时思考、行动、观察、停止。类比:厨师长派活,而不是让炉火自己决定今晚卖什么。
-
LLM 只是循环中的组件:把一切复杂性压进一次 prompt,通常得到脆弱系统。调用模型是一步,不是整个厨房。
三块之间要有清晰接口:记忆读写要可审计,动作要可回滚或可沙箱,决策要有可观测的选择理由。缺接口时,出了问题只能整锅重煮。
案例 1:工作记忆 vs 长期记忆
Section titled “案例 1:工作记忆 vs 长期记忆”任务:整理三篇论文差异。
working = {goal: "diff 3 papers", read: [], open_q: ["方法差在哪"]}long_term = {notes: "...", glossary: "..."} # 跨任务可复用# 读完一篇:append(working.read, paper_id)# 不要把整篇 PDF 原文塞进长期库;只沉淀方法与术语小票只留本轮状态;菜谱柜只留可复用方法。混放会导致上下文膨胀、下次任务被旧噪声拖垮。
案例 2:决策循环选动作
Section titled “案例 2:决策循环选动作”for step in 1..max_steps: # 例如 max_steps=8,或 token 预算用尽 a = decide(working) # 检索 | 摘录 | 比较 | 写结论 | stop if a == stop or budget_exhausted: break obs = act(a) working = update(working, obs)缺资料→检索;资料够→比较;比较完→写结论。关键不是「模型一次答得多聪明」,而是系统能否把任务拆成可观察、可恢复、可继续的步骤。
案例 3:内部动作与外部动作分权
Section titled “案例 3:内部动作与外部动作分权”写 scratchpad、更新对比表格 = 内部动作(低风险,可随便试)。调用支付、删库、发邮件 = 外部动作(需确认、审计、沙箱)。
同一 tools[] 列表里若不分层,agent 可能在「整理摘要」时误触高风险 API。CoALA 提醒:动作空间要按风险分区,而不是按「模型能不能生成函数名」一锅端。
落地时还可以加一道「人类确认门」:外部动作默认 dry-run,只有白名单或人工批准才真正执行。这仍然符合 CoALA 的决策层,只是把部分决策交给人。
- 把 memory 当成向量库同义词——向量库只是长期记忆的一种实现,不等于完整记忆系统。
- 动作空间过大——工具一多(经验上裸列表 >10 个且无分组/检索),agent 易在无关动作里迷路。
- 没有退出条件——缺
max_steps/ token 预算时,循环空转、成本上升。 - 把 reflection 当万能修复——无可验证反馈时,反思可能只是把错说圆。
- 内外动作同权——写草稿和调支付 API 风险完全不同,不该同一权限层。
适用:
- 读 agent 论文时对齐术语(记忆 / 动作 / 决策分别是什么)
- 做 agent 架构评审:某模块说不清属于哪一类,边界可能混乱
- 设计客服 / 代码 / 研究 agent 的产品模块边界
不适用:
- 当某个框架的 API 手册(论文是概念框架,不是库文档)
- 工具极少、单轮问答就够的场景(上完整 agent 循环是过度设计)
- 需要强事务 / 强权限的操作系统级控制(CoALA 不提供实现细则)
真正落地还要处理权限、成本、可观测性和失败恢复。量化上可先定三条硬门槛:max_steps、单任务 token/美元预算、外部动作是否需确认——再谈换模型。
历史小故事(可跳过)
Section titled “历史小故事(可跳过)”- 早期 AI 用生产系统(if-then 规则)描述智能行为。
- Soar 等认知架构讨论人类如何记忆、推理、行动。
- LLM 爆发后,新 agent 看起来全新,但 CoALA 指出:它们常常是在用神经语言模型替换过去的符号规则。
- 旧问题并没有消失:系统仍要决定记什么、怎么行动、如何选择下一步。
- 这也是论文标题里 “Cognitive Architectures” 的含义——把 LLM Agent 接回更早的认知科学传统。
- Agent 能力来自系统结构,不只是底层模型;先画记忆/动作/决策,再堆 prompt。
- 记忆决定跨步骤,动作决定能否改世界,决策决定能否稳定推进。
- 评估与排障要分层:检索错、工具错、规划错、生成错,日志里要分开看状态、动作和原因。
- 先定退出条件与权限边界,再增加工具数量;工具多而无结构,往往比模型弱更致命。
读完这篇,下次看到「我们做了个 Agent」时,先问三句:记忆落在哪、动作边界是什么、决策何时停止。答不上来,多半还只是套了个聊天框。
- react-agent:reasoning 与 acting 交错,理解 agent loop 的经典入口。
- reflexion:经验记忆与自我反馈如何接入 agent。
- Toolformer:模型如何学会使用工具。
- voyager:Minecraft 场景下的长期技能库 agent。
- Soar:认知架构传统里的代表系统。
- react-agent —— ReAct:Thought/Action/Observation 交错,CoALA 地图上的一种具体打法
- reflexion —— 把反思轨迹写入记忆的 agent 回路
- voyager —— 开放世界里的技能库与长期记忆
- rag-lewis-2020 —— 检索作为长期记忆/外部知识的一种实现
- agentless —— 反 Agent 派对照:不一定要完整 agent 循环
- toolformer —— 工具使用如何进入模型训练/推理
- soundness-bench —— SoundnessBench — 判断 AI 科学家会不会把坏点子当好点子