跳转到内容

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。

  1. 工作记忆:当前任务正在用的信息(目标、观察、草稿、中间结论)。类比:灶台上那几张小票,做完就清,不该和菜谱柜混放。

  2. 长期记忆:向量库、日志、知识库,或模型参数里已有知识。类比:菜谱柜——跨班次还能翻;向量库只是其中一种柜子实现。

  3. 动作空间:外部 API,也包括检索/写入记忆、总结状态。类比:刀工与打电话都是「动作」,但权限与可回滚性完全不同。

  4. 决策过程:何时思考、行动、观察、停止。类比:厨师长派活,而不是让炉火自己决定今晚卖什么。

  5. LLM 只是循环中的组件:把一切复杂性压进一次 prompt,通常得到脆弱系统。调用模型是一步,不是整个厨房。

三块之间要有清晰接口:记忆读写要可审计,动作要可回滚或可沙箱,决策要有可观测的选择理由。缺接口时,出了问题只能整锅重煮。

任务:整理三篇论文差异。

working = {goal: "diff 3 papers", read: [], open_q: ["方法差在哪"]}
long_term = {notes: "...", glossary: "..."} # 跨任务可复用
# 读完一篇:append(working.read, paper_id)
# 不要把整篇 PDF 原文塞进长期库;只沉淀方法与术语

小票只留本轮状态;菜谱柜只留可复用方法。混放会导致上下文膨胀、下次任务被旧噪声拖垮。

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 的决策层,只是把部分决策交给人。

  1. 把 memory 当成向量库同义词——向量库只是长期记忆的一种实现,不等于完整记忆系统。
  2. 动作空间过大——工具一多(经验上裸列表 >10 个且无分组/检索),agent 易在无关动作里迷路。
  3. 没有退出条件——缺 max_steps / token 预算时,循环空转、成本上升。
  4. 把 reflection 当万能修复——无可验证反馈时,反思可能只是把错说圆。
  5. 内外动作同权——写草稿和调支付 API 风险完全不同,不该同一权限层。

适用

  • 读 agent 论文时对齐术语(记忆 / 动作 / 决策分别是什么)
  • 做 agent 架构评审:某模块说不清属于哪一类,边界可能混乱
  • 设计客服 / 代码 / 研究 agent 的产品模块边界

不适用

  • 当某个框架的 API 手册(论文是概念框架,不是库文档)
  • 工具极少、单轮问答就够的场景(上完整 agent 循环是过度设计)
  • 需要强事务 / 强权限的操作系统级控制(CoALA 不提供实现细则)

真正落地还要处理权限、成本、可观测性和失败恢复。量化上可先定三条硬门槛:max_steps、单任务 token/美元预算、外部动作是否需确认——再谈换模型。

  • 早期 AI 用生产系统(if-then 规则)描述智能行为。
  • Soar 等认知架构讨论人类如何记忆、推理、行动。
  • LLM 爆发后,新 agent 看起来全新,但 CoALA 指出:它们常常是在用神经语言模型替换过去的符号规则。
  • 旧问题并没有消失:系统仍要决定记什么、怎么行动、如何选择下一步。
  • 这也是论文标题里 “Cognitive Architectures” 的含义——把 LLM Agent 接回更早的认知科学传统。
  1. Agent 能力来自系统结构,不只是底层模型;先画记忆/动作/决策,再堆 prompt。
  2. 记忆决定跨步骤,动作决定能否改世界,决策决定能否稳定推进。
  3. 评估与排障要分层:检索错、工具错、规划错、生成错,日志里要分开看状态、动作和原因。
  4. 先定退出条件与权限边界,再增加工具数量;工具多而无结构,往往比模型弱更致命。

读完这篇,下次看到「我们做了个 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 科学家会不会把坏点子当好点子