系列名称:意图即承诺,智能体即社会——自主性的第一个可计算答案
篇号:11 / 共 11 篇 主题分类:历史记述 前置阅读:BDI 从理论到工程 · 意图编辑权 阅读时间:约 22 分钟
当 LLM 住进 BDI——Ciatto 2025 与强概念的当代补全
卡死的机器人,和一通迟到的电话
一个 BDI agent 一生中最安静的时刻,是它遇到一件计划库里没有的事。
在 第 2 篇 的复现实验里,我们让一个只装了 rescue_victim 计划的 agent 遇上 engine_broken 事件。t=1,事件进了队列,agent 没动;t=2,没动;t=3、t=4,还是没动。整整四个时间步纹丝不动。这不是 agent 偷懒,而是 AgentSpeak(L) 的语义本来如此:事件驱动,按计划规则匹配,找不到适用计划,事件被丢弃,agent 什么都不做。这个场面不是复现的瑕疵,它就是 PRS、dMARS、AgentSpeak(L) 一脉工程化传统的正常运转。
这条传统有一个从未真正解决的前提:计划库由人手写。人写多全,agent 就多能干;人没写到的情境,agent 就当场哑火。Ciatto 等人在 2025 年 ECAI 论文的开篇,把这条老伤口明确地指了出来:
“traditional BDI programming frameworks typically lack mechanisms allowing agents to autonomously acquire or build new plans at runtime”(传统 BDI 编程框架普遍缺少让 agent 在运行时自主获取或构建新计划的机制。)ciatto2025
经典的补救方案是一阶规划(first-principles planning):给每个动作建立前提条件与效果的形式模型,让规划器现场推出计划。但它需要详细的动作模型,这类模型成本高昂,在高度动态的环境中往往不可用 ciatto2025。这正是 Cohen & Levesque 的形式化 cl1990 与 PRS 工程化之间的那条老裂缝——理论上 agent 应该能推理出该做什么,工程上 agent 只能从预设计划库里选。
把镜头拉远一点,这道裂缝还有一层概念史的含义。1995 年,Wooldridge 和 Jennings 给 Agent 下过双层定义:弱概念是四性质(自主、社会、反应、主动),强概念是用信念、愿望、意图这些心智状态来概念化或实现的系统 wj1995。三十年过去,LLM Agent 遍地开花,但绝大多数只满足弱概念——LangGraph 把意图拓扑画成状态图,AutoGPT 把愿望-意图链条塞进 prompt,ReAct 循环在文本 token 流中隐式运行。这些系统的内部都不是 BDI 的结构。强概念的 BDI 架构,似乎被工程实践抛弃了。
2025 年,Ciatto 等人做了一件看似逆潮流的事:把 LLM 放进经典 BDI 架构里,让它担任计划生成模块(PGP, Plan Generation Procedure)。AgentSpeak(L) 解释器找不到合适计划时,调用 LLM 现场生成一个,加入计划库,然后按 BDI 的正常流程执行。LLM 让 BDI 第一次具备了运行时自主生成计划的能力——在强概念的意义上,这是一次真正的升级。
但这次升级同时把 BDI 长期隐藏的一个前提选择难题暴露了出来。判断“目标已达成”需要从无限事实中选出相关证据。这个 Bar-Hillel 式的老问题(见 第 1 篇 的批评一节),在 LLM 拿起笔写计划的那一刻找到了它的新实验场。本篇要讲的就是这条双线故事:升级如何发生,难题如何显形。
编者注:本篇是补篇 C,不在主线 10 篇之列——主线讲 1987-2001,本篇跳到 2025,作为四条线在当代的交汇点。另请注意:与主线各篇惯有的 A/B 对照实验不同,本篇没有 A/B 实验——源研究的实验本身就是 LLM 调用实验,文中的五个实验是对 LLM 五种行为的直接观测。
本篇同时整合两篇姊妹文献。Frering et al. 2025 frering2025 与 Ciatto 同年发表、方向对偶:LLM 不写计划、只写目标层,读路径对写路径。Sumers、Yao、Narasimhan、Griffiths 的 CoALA coala2024 则提前一年给出了语言 agent 的认知架构地图,而那张地图上没有 BDI 的名字。两篇一纵一横,共同标定 Ciatto 工作的位置。
逆潮流的方案:LLM 作为计划生成程序
Ciatto et al. 的方案说穿了只有一句话:在 AgentSpeak(L) 的推理循环上加一步 PGP。当找不到适用计划时,系统不再直接放弃:调用 LLM 生成一个计划,加入计划库,然后重试。方案的巧思都藏在这句话的执行细节里,可以拆成三个关键点。
PGP 的输入与输出
PGP 接收四样东西作为上下文:目标描述、可用动作、当前信念、现有计划。输出的是一个结构化计划:触发事件、上下文条件、步骤序列,正好是 AgentSpeak(L) 计划规则的三段式。论文使用混合 YAML+Prolog 格式;我们的复现把它简化为 JSON,但三段式结构不变。
生成即入库
生成的计划不是一次性的:它加入计划库,成为 agent 的永久知识。第一次遇到新目标需要调 LLM——慢、贵;第二次及以后直接复用已生成的计划——快、免费。这是 GenAI+BDI 相对纯 LLM Agent 的关键效率优势,后文的复用实验会专门验证它。
多层生成策略:谁有权按下 LLM 的按钮
论文还设计了多层级的 PGP 策略声明,优先级从高到低:MAS 层(整个多 Agent 系统的默认配置)、Agent 层(单个 agent 的覆盖配置)、Plan 层(单个目标/计划的最高优先配置)。每一层可以指定不同的提示模板、温度参数、模型选择,甚至完全禁用 PGP,即“只能用预设计划,不准调 LLM”。
这在工程上是很聪明的设计:核心目标禁用 PGP 保可靠性,探索性目标启用 PGP 保灵活性,不同重要性的目标用不同的温度。“什么时候可以冒险调用 LLM”的决定权,交给了开发者。但从自主性的角度看,它也是一个有意思的妥协:LLM 的调用权仍然牢牢握在人类开发者手中。第 9 篇 讲意图编辑权的分层拉锯,这里是同一件事的另一面:编辑权放出去一半,又用配置文件收了回来。
论文如何评估生成的计划
论文用 JaKtA(一个 Kotlin 版 BDI 解释器)实现了原型,在 ExplorerRobot 网格世界场景中做系统评估。ExplorerRobot 是一个简化的二维网格世界:机器人移动、拾取与携带物品、感知周围环境,目标通常是“走到某位置”“拾取某物品”“把物品送到某处”。这个场景的好处是动作空间有限且定义清晰,适合系统评估 LLM 生成计划的正确性。
评估沿三个维度展开。提示类型:S(Syntactic,只给语法模板)、SS(Syntactic + Semantic,语法加动作语义描述)、SE(再加示例计划);温度:0.1、0.7、1.0;模型:GPT-3.5、GPT-4、CodeLlama 等。指标则覆盖计划正确性(PC, Plan Correctness)、上下文正确性(CC, Context Correctness)、计划体正确性(PBC, Plan Body Correctness)、目标正确性(GC, Goal Correctness)、复用率(RR, Reusability Rate)、单次调用生成计划数(NGC)、计划体信念变更数(NBC)、目标满足准确率(GSA, Goal Satisfaction Accuracy)。
这组指标本身就很有意思:它们量化的正是“LLM 生成的计划有多可靠”这个核心问题。论文的发现是:不同模型之间差异很大,温度和提示类型对结果有显著影响。
PGP 扩展推理循环:在”找不到计划”处开口
标准 BDI 推理循环是四步:获取事件 → 查找适用计划 → 选择计划 → 执行步骤。Ciatto et al. 在“查找”失败的分支上开了一个口子,扩展后的循环如下:

图里最值得盯住的是 F→B 的回边:生成的计划加入计划库之后,系统回到“查找适用计划”这一步重新查一遍。如果生成计划的上下文条件满足,它就被推入意图开始执行;如果不满足,计划虽然入库了,当前事件还是得不到处理。可见 PGP 生成的计划不仅步骤要对,上下文条件也要对。而上下文条件的判断完全依赖 LLM 对域的理解,这又是一个前提选择问题,“退化”一节会回到它。
用 第 2 篇 的语言说:PRS/dMARS 的四组件主循环在 Ciatto 架构中增加了一个 PGP 分支,经典 BDI 的“选项生成”从“从计划库选”扩展为“从计划库选,没有就调 LLM 生成”。
我们的复现把这一步实现在解释器里,核心只有十行(节选自 ../genai-bdi-reproduction/genai_bdi/interpreter.py 的 _invoke_pgp,略去统计计数与提示组装):
def _invoke_pgp(self, goal: str) -> str:
result = self.pgp.generate_plan(
goal=goal, available_actions=list(self.actions.keys()),
current_beliefs=self.beliefs, existing_plans=self.plans.get_all(),
)
if result.success and result.plan:
self.plans.add(result.plan) # 生成计划直接入库
applicable = self.plans.find_applicable(goal, self.beliefs)
if applicable:
self.intentions.push(Intention(plan=applicable[-1])) # 回边:重新查找后入栈
四参数就是喂给 LLM 的全部上下文,self.plans.add 一行是入库,最后一行是 F→B 回边的落点。生成、入库、重查、入栈,一条链走完。跑起来是什么样?实验 1 给出了最小成功路径:agent 遇到一个无预设计划的目标 !go_to(kitchen):
初始计划库: 0 预设, 0 LLM生成
目标: !go_to(kitchen)(无预设计划,需 PGP 生成)
step 1: PGP generated plan for !go_to(kitchen) (ok) — pushing intention
step 2: Executed action: walk_to(kitchen) -> moved to kitchen
✅ 目标达成: at(kitchen) (证据来源: deduction)
统计: PGP 调用=1, 成功=1, LLM生成计划=1
第 2 篇 里那个四步纹丝不动的 agent,在同一个“找不到计划”的分支上,现在走出了一条新路:调 PGP、入库、入栈、执行、达成。这就是 GenAI+BDI 的核心承诺——LLM 补上了 BDI 长期缺失的计划获取能力。agent 不再被预设计划库限死,它可以运行时“学会”新技能。
知识转移的双向性:一次生成,永久复用
Ciatto et al. 论文的一个核心洞见,是知识转移在 GenAI+BDI 里是双向的。正向:BDI agent 的目标名称、动作名称、现有计划作为上下文提供给 LLM,帮助它生成符合域约定的计划。上面代码里 generate_plan 的四个参数,就是这条正向通道。反向:LLM 生成的计划被加入计划库,成为 agent 永久知识的一部分;self.plans.add(result.plan) 这一行就是反向通道的入口。
论文还特别讨论了“自然语言描述”的作用:给目标和动作加上人类可读的描述(复现里对应 add_goal_description 和动作注册时的 description 参数)。同一份描述既帮助人类开发者理解域,也帮助 LLM 更好地生成计划。一次书写,人和 AI 共用一份说明书。这是一种巧妙的设计:文档即提示词。
反向通道的效果就是复用。实验 2 专门验证了它:第一次调用目标,PGP 被唤起;第二次调用同一目标,PGP 一次都没被唤起:
--- 第一次调用 !go_to(kitchen) ---
PGP 调用次数: 1
计划库大小: 1
--- 第二次调用 !go_to(kitchen) ---
PGP 调用次数: 0
计划库大小: 1
✅ 复用成功——第二次直接使用已生成计划,无需再调LLM
这直接验证了 Ciatto et al. 的核心设计:生成一次,永久复用。AutoGPT 这类纯 LLM Agent 每次都要从头推理;BDI+LLM 的混合架构把计划库当作 LLM 知识的缓存,第二次起零成本。这是结构性的效率优势,不是调参调出来的。
但复用机制有一个隐含前提:被复用的计划是正确的。如果 LLM 生成了一个错误计划,这个错误也会被永久复用——下次遇到同一目标,agent 还会执行同一个错误计划。计划库既是缓存,也是污染的培养基。这个暗面,下一节展开。
动作幻觉:当 LLM 不认识这个域
论文的设计里有一个明显的缺口:生成的计划没有验证环节。PGP 生成计划、加入计划库、开始执行。如果计划是错的(不存在的动作、错误的上下文条件、错误的步骤顺序),agent 会在执行中失败,但失败的计划仍然留在计划库里,下次遇到同一目标还会被选中。论文的评估指标里有正确性指标(PC/CC/PBC),但那些是离线评估,不是运行时验证。agent 自己不知道生成的计划对不对,只能试错。
我们的复现里,每条计划带一个来源标记,两类计划在数据结构上完全平等(节选自 ../genai-bdi-reproduction/genai_bdi/plan.py):
class PlanSource(Enum):
PREPROGRAMMED = "preprogrammed" # 设计时人写(默认可信)
LLM_GENERATED = "llm_generated" # 运行时 PGP 生成(默认可疑)
标记是有的,但库本身不做区分对待。这里存在一个根本性的不对称:人类写的计划默认是对的(因为人验证过),LLM 生成的计划默认应该是可疑的。但在 Ciatto 的架构里,两者在计划库中地位平等。
实验 4 展示了可疑计划长什么样。当 LLM 完全不了解域时,agent 遇到陌生目标 !solve_mystery,PGP 被迫编造:
step 1: PGP generated plan for !solve_mystery (hallucinated!) — pushing intention
step 2: Executed action: walk_to(kitchen) -> moved
step 3: Action 'think_about(Solve a my)' not found — plan failed (hallucination?)
>>> Plan FAILED due to hallucinated action
PGP 先抄了一个真实存在的动作充门面,然后编出 think_about(Solve a my) 这种谁也没注册过的动作,最后还不忘在计划末尾加上“目标达成”的信念(这条暗线更重要,“退化”一节细说)。执行到第三步,解释器查不到这个动作,意图标记失败。幻觉计划在执行中必然露馅,这正是论文 PC 指标所量化的失败类型。
露馅本身不是问题所在,问题在于露馅之后什么也不发生:失败的计划还留在计划库里。错误的计划、幻觉的动作、不正确的上下文条件,都被永久保存,下次还会被选中。经典 BDI 中计划库是人类精心编写、默认可靠的;GenAI+BDI 中 LLM 生成的计划混了进来,随着生成越来越多,错误计划的比例上升,agent 的平均表现反而可能下降——这是一种经典 BDI 没有的新失效模式:计划库污染。
那么,agent 能不能从失败中学习?经典 BDI 没有学习机制,计划库是静态的。GenAI+BDI 理论上可以做“失败计划降级”:把执行失败的 LLM 生成计划标记为低优先级或直接移除,下次遇到同一目标时重新调用 PGP 生成新计划。但论文没有讨论这个机制,我们的复现也没有实现它,这是这条路线上一处明确的未来工作。
真实 API 的检验:DeepSeek 写出的泡茶计划
以上实验用的是 MockPGP——一个确定性的假 LLM,用来可控地制造成功与失败。但 Ciatto 论文的核心论断毕竟是对真 LLM 说的。实验 5 把 PGP 换成真实 DeepSeek API(deepseek-chat 模型,temperature=0.3),测试目标也换成一个全新领域:!make_tea。
测试目标: !make_tea(无预设计划,需LLM生成)
可用动作: walk_to(kitchen), boil_water, steep_tea, pour_in_cup ...
step 1: PGP generated plan for !make_tea (ok) — pushing intention
step 2: Executed action: walk_to(kitchen) -> moved to kitchen
step 3: Executed action: boil_water -> water boiled
step 4: Executed action: steep_tea -> tea steeped
step 5: Executed action: pour_in_cup -> poured tea into cup
✅ 目标达成: tea_in_cup (证据来源: deduction)
DeepSeek 生成的计划步骤顺序正确,动作全部来自可用动作清单,五步之内达成目标。核心论断在真实 API 上成立:LLM 确实能生成可用的 BDI 计划——先去厨房、烧水、泡茶、倒杯,一个懂做饭的计划。
但仔细看生成的计划,有一个微小但重要的格式错误:所有步骤都被标记为 action 类型;而在 AgentSpeak(L) 中,!goal 前缀的步骤应该是 subgoal(子目标)类型,会触发新一轮计划查找,而不是当作外部动作直接执行。LLM 用对了 ! 前缀的写法,却没对上它的语义。这说明 LLM 对 BDI 语法的理解还停留在表面模式层,恰好对应论文评估中 SS 与 SE 两种提示类型的效果差异:不给语义描述和示例,LLM 只能靠猜。全部五个实验的完整脚本与实现见仓库 ../genai-bdi-reproduction/。
同年的对偶:Frering 只许 LLM 读心智
Ciatto 的方案是让 LLM 写 BDI 的计划库。同一年,格拉茨工业大学与 BOKU 维也纳的 Frering、Steinbauer-Wagner、Holzinger 发表了一个镜像互补的架构 frering2025:LLM 只被允许读 BDI 的心智状态。
他们的问题场景是机器人人机交互:操作员不该需要技术训练才能给机器人下指令。方案是把两个 LLM 组件接到一个 Jason 实现的 BDI agent 两侧:”User Command Interpretation”把自然语言指令翻译成参数化目标(如 goto(X,Y)),”Explanation Generation”用对话解释系统为什么这么做。BDI agent 居中持有全部心智状态,并持续把 Mind State(信念库 + 计划库 + 触发事件与所选行动的历史)转发给两个 LLM 组件。作者把分工说得很直接:
“we use LLMs only to generate high-level goals from user commands, and rely on a BDI agent for refining it into robot actions”(我们只用 LLM 从用户指令生成高层目标,把目标细化为机器人动作的是 BDI agent。)frering2025
实现栈全是标准件:机器人侧 ROS2 + Gazebo 的 Clearpath Husky 仿真,BDI 侧 Jason,LLM 侧 GPT-4o,模块间用 MQTT 消息胶合。三个关键设计值得细看。
第一,Mind State 的持续转发。 BDI agent 把信念库、计划库、触发事件与所选行动的历史打包成 Mind State,持续转发给两个 LLM 组件。指令解释用它理解上下文(如“回到上一个路径点”),解释生成用它回答“为什么”。这使 LLM 的语言成为对心智状态的读操作:解释生成组件甚至能拿到 AgentSpeak 源码,论文表 4 的示例对话里,LLM 准确引用了初始信念 forbidden_area(2,2,0.5) 和计划中的距离判断公式来解释机器人为什么拒绝移动。解释是从数据结构里读出来的,不是从权重里编出来的。
第二,安全闸门在 BDI,不在 LLM。 BDI agent 预置禁入区信念,收到目标先做距离检查,命中则拒绝转发给机器人。评估中 LLM 指令解释侧的输出仍有安全违规(SER 0.039),但实践上 BDI 组件挡下了全部违规指令,无一到达机器人。论文表 3 脚注原文:
“the BDI Agent module stopped all of the safety violating commands to be forwarded to the Robot System” frering2025
作者的结论直白:”pure LLMs cannot be trusted for safety properties”——纯 LLM 不可托付安全性质,符号层必须保留仲裁权。
第三,量化收益与开销都测了。 13 个场景 × 68 条指令 × 3 次重复(每条件 204 条):
| 指标 | 基线(无 LLM 组件) | 接入 BDI+LLM 后 |
|---|---|---|
| 成功率 | 0.755 | 0.819 |
| 错误率 | 0.059 | 0.039 |
| 漏答率 | 0.127 | 0.078 |
提升主要来自记忆类指令(“回到第三个路径点”):Mind State 的事件历史给了 LLM 一个跨对话的准确记忆。开销侧:BDI agent 平均 CPU 1.89%、内存 298MiB,200 次迭代的累计时间差稳定在约 3.2 秒,相比 LLM API 延迟可忽略。
Frering 的边界同样清楚:LLM 的写权限只到愿望层(生成目标),计划库保持人预设、对 LLM 只读。论文的未来工作一节,恰好预告了 Ciatto 的方向——
“granting LLMs access to BDI-specific commands, enabling the automated execution of meta-reasoning actions at runtime (e.g., resuming and suspending goals)”(授予 LLM 访问 BDI 专有命令的权限,使其能在运行时自动执行元推理动作,如恢复和挂起目标。)frering2025
但作者们立即加上警告:这需要仔细考虑 LLM 生成计划的风险,可能需要显式引入运行时验证(runtime verification)。读路径的作者对写路径风险的判断,与 Ciatto 论文未讨论验证环节形成直接对照:两条路线站在同一道悬崖边上,一个跳了下去,一个立了警示牌。
用 第 3 篇 强概念的坐标看,Ciatto 与 Frering 构成一对互补实验:Ciatto 开放程序性记忆的写路径(计划库),Frering 开放心智状态的读路径(解释与上下文),只允许写愿望层(目标)。两条路径都保持 BDI 解释器持有数据结构,强概念的“硬途径”在两个方向上各自前进一步。而 Frering 那条“BDI 挡下全部违规”的实证,正是 第 9 篇 “LLM 提议、解释器仲裁”这个编辑权分担结构在安全侧的验证:LLM 可以犯错,只要犯错的那一层没有执行权。
三架构对照:GenAI+BDI 在 BDI 坐标系里的位置
把经典 BDI、GenAI+BDI、纯 LLM Agent 放进同一张图,三种架构在数据结构上的差异一目了然:

图中的关键差别在中间一列:GenAI+BDI 保留了 BDI 的全部数据结构(信念库、计划库、意图栈),只是在“计划库只能人写”这一点上开了口。LLM PGP 从两个方向接入:向计划库写入生成计划,向信念库写入达成断言(后者正是“退化”一节的伏笔)。逐维度展开成表:
| 维度 | 经典 BDI (dMARS) | GenAI+BDI (Ciatto 2025) | 纯 LLM Agent (AutoGPT) |
|---|---|---|---|
| 信念 | 信念库(基文字集合),来源=感知/推导 | 信念库 + LLM 断言信念,来源需区分 | 上下文窗口 + 隐性知识 |
| 愿望 | 外部下发(用户/消息) | 外部下发 + LLM 生成子目标 | 用户 prompt |
| 意图 | 可调度的计划栈,计划来自预设库 | 计划栈 + 运行时 PGP 生成计划 | ReAct 循环中的 action 序列 |
| 意图编辑权 | 计划库人预设 + 栈调度 Agent | 骨架人预设 + 血肉 LLM 生成 + 计划库 LLM 扩充 | 全部交给模型(失控) |
| 承诺策略 | 盲目/单一心智/开放心智三种旋钮 | 三种旋钮 + PGP 失败即放弃 | 无显式策略 |
| 计划来源 | 人手写(设计时) | 人手写 + LLM 生成(运行时) | LLM 每次重新推理 |
| “believes achieved” | 计划末尾的 +belief(人定义) | 计划末尾的 +belief(LLM 定义) | 无显式判定(容易跑不停) |
关键观察:GenAI+BDI 是强概念的升级,不是弱概念的替代。它保留了 BDI 的全部数据结构与推理循环,只在“找不到计划”这个分支上接入了 LLM。相对纯 LLM Agent,它的优势是结构清晰、可验证、可复用、有承诺策略;相对经典 BDI,它补上了计划获取的短板。
用 第 9 篇 意图编辑权的三层分担(目标人写、计划人写、选哪个执行归 Agent)来看,GenAI+BDI 把“计划编写”这一层也下放给了 LLM,编辑权进一步向 agent 端转移。但严格说,LLM 不是 agent 自身,它是外部调用的服务:编辑权从“人类开发者”独占,变成“LLM + 开发者共同控制”,并没有完全交给 agent。前文的多层生成策略,就是这份共同控制的体现:开发者用配置文件划定 LLM 的写作权限。
CoALA 地图,与 BDI 的精确缺席
如果说 Ciatto 与 Frering 是 BDI 谱系内部的推进,普林斯顿的 Sumers、Yao、Narasimhan、Griffiths 发表的 CoALA 则来自另一条谱系——把语言 agent 放回认知架构(cognitive architecture)传统,给出一张地图 coala2024。
CoALA 的出发点是一个经典类比:LLM 是概率产生式系统。产生式系统是字符串改写规则,加上控制流就是算法,加上感知、记忆、决策循环就是认知架构;LLM 定义了对文本续写改动的概率分布,正好是概率化的产生式,prompt 工程是控制流。于是,为产生式系统发展了三十年的认知架构控制原理,可以整体搬到 LLM 上。Soar 从 1986 年起就能“把新产生式写入自己的程序性记忆”,相当于更新自己的源代码。Ciatto 的 PGP,就是这个四十岁先例的 LLM 版。
框架本身是三件套:记忆(工作记忆 + 长期记忆,长期又分情景/语义/程序性三种子类)、行动空间(外部 grounding:物理/对话/数字环境;内部行动:检索=读长期记忆、推理=用 LLM 更新工作记忆、学习=写长期记忆)、决策循环(规划阶段的提议-评估-选择 + 执行阶段)。两个定义对本系列特别重要:
“CoALA’s notion of working memory is more general: it is a data structure that persists across LLM calls.”(CoALA 的工作记忆概念更一般:它是跨 LLM 调用持久的数据结构。)coala2024
“Language agents contain two forms of procedural memory: implicit knowledge stored in the LLM weights, and explicit knowledge written in the agent’s code.”(语言 agent 的程序性记忆有两形:LLM 权重中的隐式知识,与 agent 代码中的显式知识。)coala2024
第一句是本系列反复强调的“harness 持有心智状态数据结构”的正式表述:LLM 无状态,agent 的心智必须住在 LLM 之外、跨调用持久的结构里。第二句则精确定位了 Ciatto 的 PGP:LLM 生成计划写入计划库,在 CoALA 语境下就是“更新程序性记忆(agent 代码)”。而 CoALA 对这个操作的风险评级,恰好预写了前文“动作幻觉”一节的计划库污染问题:
“writing to procedural memory… is significantly riskier than writing to episodic or semantic memory, as it can easily introduce bugs or allow an agent to subvert its designers’ intentions.”(写程序性记忆比写情景/语义记忆危险得多——容易引入 bug,或让 agent 背离设计者意图。)coala2024
用 第 9 篇 的词汇说,这是意图编辑权风险的认知架构表述。CoALA 还把访问控制列为 agent 设计的第一步:其零售助手示例中,agent 对情景记忆可读可写、对语义与程序性记忆只读——
“since it should not update the inventory or its own code”(因为它不应自行更新货架库存或自己的代码。)coala2024
读/写权限的分层授予,就是编辑权的仲裁设计。
还有一处精确的缺席。我们在 CoALA 全文(TMLR 2024 版 32 页)中检索 BDI、belief-desire、AgentSpeak——零命中。CoALA 引用的认知架构谱系是 Soar/ACT-R/产生式系统,不是 PRS/dMARS/AgentSpeak。这不止是疏漏:Soar 谱系(Newell 的人类问题求解传统)与 BDI 谱系(Bratman 的实践推理传统)是符号主义认知架构的两条平行线,CoALA 用前者组织语言 agent 时,后者恰好缺席。Ciatto 与 Frering 做的,正是把 BDI 谱系接入 CoALA 地图上的空位。两条谱系在 2025 年前后于语言 agent 世界会合,但会合点上的相互引用尚未发生:CoALA 不引 BDI,Ciatto/Frering 也不引 CoALA。即便如此,Soar 谱系与 BDI 谱系在“写程序性记忆最危险”这一点上独立收敛。这本身就是计划库污染问题实在性的佐证。
用 CoALA 坐标反解三种架构(此表为本文归纳,非 CoALA 原文;它的代表系统是 SayCan/ReAct/Voyager/Generative Agents/Tree of Thoughts):
| CoALA 概念 | 经典 BDI | Ciatto GenAI+BDI | Frering BDI+LLM |
|---|---|---|---|
| 语义记忆(世界知识) | 信念库(人定义) | 信念库 + LLM 断言 | 信念库(人定义) |
| 程序性记忆-代码 | 计划库(人手写) | 计划库 + LLM 运行时写入 | 计划库(人预设,LLM 只读) |
| 工作记忆 | 事件队列 + 意图栈 | 同左 + PGP 调用记录 | 同左 + Mind State 转发 |
| 推理行动(慎思) | 元级 KA / 选择函数 | PGP + 选择函数 | 指令解释 LLM |
| 学习:写程序性记忆 | 不存在 | PGP 入库(无验证) | 未开放(未来工作 + 风险警告) |
| LLM 权重(隐式程序性记忆) | 不存在 | PGP 的知识来源 | 指令解释与解释生成的知识来源 |
“believes achieved” 的三时代退化
现在回到本篇埋了两处伏笔的那条暗线:计划末尾那个由 LLM 写下的“目标达成”信念。
C&L 1990 的 PGOAL 放弃条件只有二支:believes achieved(相信已达成)或 believes impossible(相信永不可能)cl1990。这正是 第 1 篇 的形式化起点,也是 第 9 篇 “自止”论述的核心。在标准 BDI 工程中,”believes achieved”由计划末尾的 +belief 步骤实现:人类开发者写计划时,就确定了什么算达成。那么在 GenAI+BDI 中,谁来决定“目标已达成”的信念是什么? 答案是:LLM。
这个概念在三个时代中的语义强度一路走低:
图中的退化路径很清楚:C&L 1990 有模态算子 BEL(x, p)、可能世界语义、形式化正确性证明——强,有语义保证;经典 BDI 工程降为计划末尾的 +belief、人定义达成条件、人保证正确性——中,有人工担保;GenAI+BDI 再降为 LLM 写 belief_add、可能漏掉或写错、无语义无验证——弱,退化为断言。
实验 3 是这场退化的实验场。我们的复现特意为每条信念加了 source 字段,区分三种来源(节选自 ../genai-bdi-reproduction/genai_bdi/belief.py):
class BeliefSource(Enum):
PERCEPTION = "perception" # 来自环境感知(最可信)
DEDUCTION = "deduction" # 来自动作效果推导(可信)
LLM_ASSERTION = "llm_assertion" # 来自 LLM 断言(不可信——Bar-Hillel 追踪)
解释器的目标检查因此能同时回答“是否达成”和“证据从哪来”(节选自 ../genai-bdi-reproduction/genai_bdi/interpreter.py):
def goal_is_achieved(self, goal_proposition: str) -> tuple[bool, BeliefSource]:
source = self.beliefs.query_with_source(goal_proposition)
if source is None:
return (False, None)
return (True, source)
实验 3a 构造了虚假断言场景:LLM 生成的计划在正常的动作效果之外,末尾多写了一个达成信念:
step 1: PGP generated plan for !go_to(kitchen) (ok) — pushing intention
step 2: Executed action: walk_to(kitchen) -> moved to kitchen
step 3: Added belief: at(kitchen) (source: llm_assertion)
step 4: Added belief: go_to_kitchen_achieved (source: llm_assertion)
⚠️ LLM 断言目标达成: go_to_kitchen_achieved
来源: llm_assertion
注意 step 3 和 step 4 的来源标记。go_to_kitchen_achieved 不是来自感知(perception),也不是来自动作效果的推导(deduction),而是 LLM 自己写进计划里的。这个例子里动作恰好真的把机器人送到了厨房,问题被遮住了;但如果动作没达成,LLM 仍然可能这么断言。判定“已达成”的责任,已经从人类开发者转移到了一个没有语义保证的统计模型手里。
实验 3b 追问更深的一层:如果 LLM 生成的计划漏掉了这个 “achieved” 信念呢? 复现程序的输出把答案钉在屏幕上——
C&L 的 BEL(x, p) 在 GenAI+BDI 中退化为:
1. LLM 在计划末尾写的 belief_add(可能漏掉或写错)
2. LLM 对结果的口头断言(没有算子语义)
3. 人类用户的主观判断(回到了人在回路)
漏写,则 agent 永远不认为目标达成,意图永不终止;写错,则 agent 在错误的时机自认完成。三种退化产物都不是 C&L 意义上的“信念”:没有模态算子,没有可能世界语义,没有正确性证明。
这正是 Bar-Hillel 批评的精确投影:判断“p 是真的”需要从无限多的事实中选出相关证据子集,这个前提选择比演绎本身困难得多。前提选择的责任落到了 LLM 身上,而 LLM 没有语义保证、没有算子定义、没有验证机制。计划的上下文条件是同一根刺的另一个投影:LLM 生成的上下文条件可能太宽松(不该触发时触发了,导致执行失败)、太严格(该触发时没触发,导致不必要地再次调用 PGP)、或完全错误(引用了不存在的信念命题)。上下文条件的正确性本质上也是一个前提选择问题:LLM 要从无限多的可能前提中选出“这个计划适用所需的条件”,Bar-Hillel 批评再次应验。
这里与 第 9 篇 的自止论述直接互证。那一篇把 LLM 时代的自止判为“自知、自觉、自止”三问中“至今无主的一问”,并引 第 1 篇 的 A/B 实验作证:精确匹配的单组件判定与信念库规模无关,换成 LLM 语义判定则在百条无关事实中失焦(K=100 时九成漏终止)。本篇实验 3 是同一根刺在 GenAI+BDI 中的单 agent 投影:自止的判定被外包给统计直觉,而统计直觉连“什么信念代表达成”都是自己挑的。第 9 篇的判词在这里再次生效——谁有权写放弃条件,谁就持有最后的编辑权。Ciatto 的架构把这个权柄递给了 LLM,却没有同时递给它语义。
影响谱系:谁站在这次升级背后
强影响
Rao & Georgeff BDI 架构(1991/1995)——Ciatto et al. 的工作直接建立在 BDI 架构之上,使用 AgentSpeak(L) 语法和标准 BDI 推理循环。PGP 是对 BDI 的扩展,不是替代。
Rao & Georgeff, “Modeling Rational Agents within a BDI-Architecture” (KR&R-91) — https://doi.org/10.1016/0743-1066(91)90040-J
AgentSpeak(L)(Rao 1996)——论文明确以 AgentSpeak(L) 为基础语言,PGP 的输入输出格式遵循 AgentSpeak(L) 的计划规则语法。
Rao, “AgentSpeak(L): BDI Agents Speak Out in a Logical Computable Language” (MAAMAW’96) — https://doi.org/10.1007/3-540-61732-9_3
中强影响
dMARS 规范(d’Inverno et al. 1998)——四大数据结构(事件、信念、意图、计划)的设计直接继承自 dMARS dinverno1998。
Shoham AOP(1993)——将心智状态作为编程原语的思想,以及 W&J 强概念的定义,都是 GenAI+BDI 的概念祖先 shoham1993。LLM 作为 PGP,让强概念第一次具备了运行时自主获取计划的能力。
中影响
AutoGPT / LangGraph 等 LLM Agent 框架——虽然技术路线不同(纯 LLM vs BDI+LLM),但两者面临的根本问题相同:计划生成、目标判定、终止条件。Ciatto 的 BDI 框架为这些问题提供了更结构化的思考方式。
LangGraph — https://langchain-ai.github.io/langgraph/
同期并行工作(2023-2025)
Frering et al. 2025(EAAI)——读路径与安全闸门。与 Ciatto 同年、方向对偶:LLM 只读 Mind State、只写目标层,BDI 持有数据结构并承担安全仲裁。实证结论“纯 LLM 不可托付安全性质、BDI 挡下全部违规输出”,为强概念“硬途径”提供了安全侧的第一组量化数据(见前文“同年的对偶”一节)。
Frering, Steinbauer-Wagner & Holzinger, EAAI 141 (2025) 109771 — https://doi.org/10.1016/j.engappai.2024.109771
Sumers et al. CoALA(TMLR 2024)——谱系地图。用产生式系统-认知架构传统(Soar 线)组织语言 agent,提出记忆/行动空间/决策循环三件套。“工作记忆=跨 LLM 调用持久的数据结构”与“写程序性记忆最危险”两个论断,分别对应本系列的数据结构问题与计划库污染问题。全文未提 BDI,两条认知架构谱系的会合尚未完成(见前文“CoALA 地图”一节)。
Sumers, Yao, Narasimhan & Griffiths, “Cognitive Architectures for Language Agents” — https://arxiv.org/abs/2309.02427
诚实边界:这次升级没有做到什么
Ciatto et al. 的工作是 BDI 强概念的一次有意义的升级,但边界必须诚实标出,以下每一条都不弱化:
- 没有运行时计划验证:生成的计划直接入库,执行失败后也不会标记或移除。
- 没有承诺策略的整合:PGP 失败时的行为属于一个特殊分支,并非三种承诺策略(盲目/单一心智/开放心智,见 第 2 篇)的自然延伸。如果 PGP 连续失败多次,agent 是应该放弃目标(盲目承诺)、重新尝试(开放心智)、还是降级处理?论文没有讨论。
- 没有联合意图扩展:论文只讨论单 agent 场景,多 agent 的 GenAI+BDI 仍是开放问题——如果两个 agent 都用 PGP 生成计划,它们的意图如何协调?
- 评估限于网格世界仿真:ExplorerRobot 场景相对简单,动作空间小且定义清晰。真实世界域(比如机器人操作、软件自动化)的表现尚不清楚。
- JaKtA 研究原型:论文的实现是研究原型,不是生产级系统。性能、稳定性、可扩展性都还没有经过工业验证。
- 没有 plan-library 污染的治理:随着 LLM 生成越来越多的计划,计划库的质量会如何变化?有没有阈值控制?论文没有讨论。
把这六条边界放回系列坐标,本篇的位置就清楚了。与 第 10 篇 呼应:Dochkina 的 Sequential 协议证明了“固定排序 + 自主角色”的混合最优。Ciatto 的 GenAI+BDI 是同一思路在单 agent 内部的体现——固定 BDI 骨架 + LLM 自主生成计划血肉,三时空同构又多了一个时空点。与 第 2 篇 呼应:PRS 以来“计划库未覆盖即卡死”的工程宿疾,第一次有了运行时的解药。与 第 9 篇 呼应:解药递过来的同时,自止的判定权也被递了出去——收获与代价在同一行代码里。
[作者判断] GenAI+BDI 可能是比纯 LLM Agent 更有前途的架构方向:它保留了 BDI 的结构优势(可验证、可复用、有承诺策略),同时用 LLM 补上了计划获取的短板。但计划验证、计划库污染、上下文正确性这三个 Bar-Hillel 式问题,是这条路线必须解决的根本难题——它们不解决,强概念的升级就始终悬在半空。三十年前 W&J 划出的强弱之别,2025 年的这次实验给出了一个未完成的答案:心智状态的数据结构回来了,心智状态的语义还没有。
参考文献
[wj1995] Wooldridge, M. & Jennings, N. R. “Intelligent Agents: Theory and Practice.” Knowledge Engineering Review, 10(2): 115-152, 1995.
[ciatto2025] Ciatto, G., Aguzzi, G., Battistini, R., Baiardi, M., Burattini, S. & Ricci, A. “Exploiting GenAI for Plan Generation in BDI Agents.” In Proc. ECAI 2025, FAIA 413: 3495-3502, 2025. DOI: 10.3233/FAIA251223 — 论文 PDF:https://cris.unibo.it/bitstream/11585/1026414/3/FAIA-413-FAIA251223.pdf
[frering2025] Frering, L., Steinbauer-Wagner, G. & Holzinger, A. “Integrating Belief-Desire-Intention agents with large language models for reliable human–robot interaction and explainable Artificial Intelligence.” Engineering Applications of Artificial Intelligence, 141: 109771, 2025. DOI: 10.1016/j.engappai.2024.109771(开放获取 CC BY。存档:本地 PDF Integrating Belief-Desire-Intention agents with large language models for.pdf,11 页全文转录核对——注意网上检索摘要误作 “Lucas Frering”、卷号 137,PDF 原文为 Laurent Frering、卷号 141)。
[coala2024] Sumers, T. R., Yao, S., Narasimhan, K. & Griffiths, T. L. “Cognitive Architectures for Language Agents.” Transactions on Machine Learning Research, 02/2024. arXiv:2309.02427. 存档:本地 PDF Cognitive Architectures for Language Agents.pdf,32 页全文转录核对(BDI/belief-desire/AgentSpeak 零命中之断言基于此版本全文检索)。
[cl1990] Cohen, P. R. & Levesque, H. J. “Intention Is Choice with Commitment.” Artificial Intelligence, 42(3): 213-261, 1990.
[shoham1993] Shoham, Y. “Agent-Oriented Programming.” Artificial Intelligence, 60(1): 51-92, 1993. DOI: 10.1016/0004-3702(93)90003-9
[dinverno1998] d’Inverno, M., Kinny, D., Luck, M. & Wooldridge, M. “A Formal Specification of dMARS.” In Intelligent Agents IV (ATAL-4), LNAI 1365: 155-176, Springer, 1998.
系列导航 · 意图即承诺,智能体即社会——自主性的第一个可计算答案
| Agent 考古 意图即承诺,智能体即社会 系列文章 | 关键词 |
|---|---|
| 导读:总览与阅读路线 | 四条线时间线 · 阶段二衔接 · 阅读路线 |
| 意图即带承诺的选择 | C&L 1990 · PGOAL · 持续承诺 |
| BDI 从理论到工程 | PRS · AgentSpeak · dMARS · 承诺策略 |
| 何为 Agent | W&J 弱/强概念 · AOP |
| 合同网 | Smith 1980 · 任务招标 · 囚徒困境 |
| 三种仲裁 | Z&R · PERSUADER · D&M |
| 联合意图部署 | STEAM · ARCHON · EV(通信) |
| 智能体如何找到彼此 | KQML · FIPA · JADE · MCP/A2A |
| 反应与慎思的和解 | TouringMachines · INTERRaP · 门控 |
| 意图编辑权 | 三时空同构 · 编辑权拉锯 · 自止焊接 |
| 自组织的实证与治理悖论 | Dochkina 2026 · BCG 治理悖论 |
| 当 LLM 住进 BDI | Ciatto 2025 · GenAI+BDI · 计划生成 |
