第二章 智能体发展史 · 学习笔记
学习材料 :《Hello-Agents》第二章 智能体发展史(
docs/chapter2/第二章 智能体发展史.md)配套代码 :
code/chapter2/ELIZA.py(已在本机跑通,并做了 9 组对抗性实验 ,见 §五)关键词:物理符号系统假说 · 专家系统 · MYCIN · SHRDLU · 模式匹配 · 心智社会 · 涌现 · 联结主义 · 强化学习 · 预训练 · 涌现能力 · 神经符号融合
一、知识地图
第二章 智能体发展史
├── 2.1 基于符号与逻辑的早期智能体 ──────────── 范式 ①:符号主义
│ ├── 2.1.1 物理符号系统假说(PSSH, Newell & Simon 1976)
│ ├── 2.1.2 专家系统(知识库 + 推理机)→ MYCIN(置信因子 CF)
│ ├── 2.1.3 SHRDLU(积木世界:NLU + 规划 + 记忆)
│ └── 2.1.4 符号主义的四大根本挑战
├── 2.2 构建基于规则的聊天机器人 ─────────────── 动手:ELIZA
│ ├── 2.2.1 ELIZA 的设计思想(魏泽鲍姆 1966 / DOCTOR 脚本)
│ ├── 2.2.2 模式匹配与文本替换(四步算法 + 伪代码)
│ └── 2.2.3 核心逻辑实现(Python 迷你版)
├── 2.3 马文·明斯基的心智社会 ────────────────── 范式 ②:分布式智能
│ ├── 2.3.1 对单一整体智能模型的反思
│ ├── 2.3.2 作为协作体的智能(智能体 / 机构 / 涌现)
│ └── 2.3.3 对多智能体系统(MAS)的理论启发
├── 2.4 学习范式的演进与现代智能体 ───────────── 范式 ③④⑤:学习
│ ├── 2.4.1 从符号到联结(联结主义)
│ ├── 2.4.2 基于强化学习的智能体(RL)
│ ├── 2.4.3 基于大规模数据的预训练(LLM 的诞生)
│ ├── 2.4.4 基于大语言模型的智能体(图 2.10 六模块架构)
│ └── 2.4.5 关键节点概览(三大思潮 + 时间线 + 技术栈)
└── 2.5 本章小结
一句话主线 :本章回答的是"智能体为什么长成今天这样"。每一代范式都在解上一代留下的死结------
符号主义 回答"智能能否被工程化"→ 撞上知识获取瓶颈 ;
心智社会 回答"智能是否必须集中在一个脑子里"→ 给出方向但缺工程路径;
联结主义 回答"知识能否不靠手写"→ 学会了感知 ,但不会决策 ;
强化学习 回答"决策能否从试错中学"→ 会决策了,但零先验知识 ;
预训练 + LLM 一举攻下知识瓶颈 → 于是前三者终于能拼在一起,这就是现代智能体。
读完这一章应该能做到一件事:把第一章那 130 行 FirstAgentTest.py 的每一个部件,都在历史里找到它的来处(对照表见 §三)。
二、核心概念
2.0 先立骨架:范式更替总表(本章最该背下来的一张表)
| 代际 | 范式 | 核心主张 | 解决了上一代什么痛点 | 自己留下的新痛点 |
|---|---|---|---|---|
| 1950s--80s | 符号主义 | 智能 = 符号的操作与逻辑推理 | 把"心智"这个哲学问题变成可工程化的问题 | 知识获取瓶颈 · 常识 · 框架问题 · 脆弱 |
| 1966 | ELIZA(规则对话) | 模式匹配 + 文本替换就能"像"懂 | 零成本制造"共情"的假象 | 无语义 · 无状态 · 规则组合爆炸 |
| 1986 | 心智社会 | 智能从大量"无心"小单元的交互中涌现 | 摆脱对"单一中央推理机"的执念 | 只是哲学框架,工程路径不明 |
| 1980s-- | 联结主义 | 知识以连接权重分布式存储,从数据中学 | 感知与模式识别(符号主义做不到) | 只会"看懂",不会"决策" |
| 1980s-- | 强化学习 | 试错 + 最大化累积奖励 | 序贯决策 | 需海量交互、开局零先验知识 |
| 2018-- | 预训练 + LLM | 自监督学"预测下一个词" = 隐式世界模型 | 知识获取瓶颈(一剑封喉) | 幻觉 · 无实时性 · 不会行动 |
| 2022-- | LLM 智能体 | LLM 当大脑 + 记忆 + 规划 + 工具 | 知识、推理、行动首次合体 | 可靠性/成本/安全(进行中) |
🔑 章节开头那句最重要的话:"每一个新范式的出现,都是为了解决上一代范式的核心痛点;而新的解决方案又引入了新的局限,为下一代埋下伏笔。"
这不是修辞,而是本章的组织逻辑------读每一节都要问两个问题:它在解决谁的痛点?它自己的痛点是什么?
2.1 符号主义:智能 = 符号计算(2.1.1)
理论基石:物理符号系统假说(Physical Symbol System Hypothesis, PSSH)
1976 年由两位图灵奖得主 艾伦·纽厄尔(Allen Newell) 与 赫伯特·西蒙(Herbert A. Simon) 提出,包含两个论断:
| 论断 | 原文含义 | 逻辑角色 |
|---|---|---|
| 充分性论断 | 任何一个物理符号系统,都具备产生通用智能行为的充分手段 | "符号系统 → 智能":只要造得出符号系统,就能造出智能 |
| 必要性论断 | 任何一个能展现通用智能行为的系统,其本质必然是物理符号系统 | "智能 → 符号系统":智能不可能由别的东西实现 |
物理符号系统 = 一组可被区分的符号 + 一系列对这些符号进行操作的过程 (图 2.2)。
符号可组合成表达式;过程可创建、修改、复制、销毁符号结构。
⚠️ 易错点 :PSSH 是一个假说 (hypothesis),不是定理。它是"宣言"而非"证明"------它的历史地位在于把模糊的心智哲学问题转化成了可工程实现的问题,给早期研究者注入了信心:只要知识表示得对、推理算法够好,就能造出媲美人类的机器智能。
💡 我的理解 :两个论断其实是互为逆命题 ,联合起来断言"物理符号系统 ≡ 通用智能"。这一等价断言的两端后来分别被打了脸------充分性 被 2.1.4 的四大挑战打脸(有符号系统,却不智能);必要性被联结主义打脸(大脑显然不按符号规则运行,却智能)。这正好是本章后面两节的主题。
2.2 专家系统:符号主义最成功的落地(2.1.2)
核心目标 :模拟人类专家在特定领域解决问题的能力,把专家的知识和经验编码成程序。
通用架构(图 2.3) :知识库 + 推理机 + 用户界面 ------ 核心设计思想是知识与推理相分离(这是符号主义 AI 的重要特征)。
| 组件 | 职责 | 关键概念 |
|---|---|---|
| 知识库 Knowledge Base | 存放领域专家的知识与经验 | 知识表示 :最常用产生式规则(Production Rules) ,即 IF 条件 THEN 结论。如:IF 发烧 AND 咳嗽 THEN 可能呼吸道感染 |
| 推理机 Inference Engine | 通用程序:根据事实在知识库中找规则、推结论 | 正向链 / 反向链(见下表) |
| 用户界面 | 问答式收集事实、输出结论 | 早期系统的交互入口 |
两种推理方向(本章高频考点):
| 正向链 Forward Chaining | 反向链 Backward Chaining | |
|---|---|---|
| 起点 | 已知事实 | 假设的目标 |
| 方向 | 匹配规则 IF → 触发 THEN → 新结论入事实库 → 循环 | 目标 → 找能推出它的规则 → 把该规则 IF 变成新子目标 → 递归 |
| 终止 | 推出目标,或无新规则可匹配 | 所有子目标都被已知事实证明 |
| 别名 | 数据驱动 | 目标驱动 |
| 类比 | 拼图:有啥拼啥 | 破案:先假设凶手,再找证据 |
MYCIN(斯坦福,1970s) ------ 史上最具影响力的专家系统之一,用于诊断细菌性血液感染并推荐抗生素:
| 维度 | 内容 |
|---|---|
| 交互方式 | 与医生问答式交互,收集症状/病史/化验结果 |
| 知识规模 | 约 600 条 IF-THEN 规则(由医学专家提供) |
| 推理方式 | 反向链:从"确定致病菌"这一最高目标反向推导需要哪些证据,再向医生提问 |
| 关键创新 | 置信因子(Certainty Factor, CF) :用 -1 ~ 1 的数值表示结论可信度 → 让系统能处理不确定、模糊的医学知识,比布尔逻辑更贴近现实 |
| 成就 | 评估中在血液感染诊断上超过非专业医生,达到人类专家水平 |
| 意义 | 雄辩地证明了 PSSH 的有效性;为 AI 在垂直领域的商业化铺路 |
2.3 SHRDLU:符号主义的"广度"巅峰(2.1.3)
特里·威诺格拉德(Terry Winograd) ,1968--1970,"积木世界"(blocks world):一个有不同形状/颜色/大小的积木 + 一个可抓取的虚拟机械臂的模拟三维空间。用户用自然语言下指令或提问,SHRDLU 在虚拟世界中执行动作或作答。
它真正的突破是"集成"------首次把语言解析、规划、记忆等多个独立 AI 模块集成到一个统一系统中协同工作:
| 能力 | 例子(原文) | 技术点 |
|---|---|---|
| 自然语言理解 | Find a block which is taller than the one you are holding and put it into the box. |
指代消解 :理解 the one you are holding 指机械臂当前抓取的物体 |
| 上下文记忆 | 先说 Grasp the pyramid.,再问 What does the box contain? |
能联系上下文回答,而非孤立解析单句 |
| 规划与行动 | "把蓝色积木放到红色积木上",而红积木上已有绿积木 | 自主规划出**"先移开绿积木,再放蓝积木"**的动作序列 |
| 记忆与问答 | Is there a large block behind a pyramid?(世界状态) Did you touch any pyramid before you put the green one on the little cube?(行为历史) Why did you pick up the red block? → BECAUSE YOU ASKED ME TO.(行为动机) |
对环境 与自身行为都有记忆,可被查询 |
历史地位三点:
- 综合性智能的典范 :它的"感知 - 思考 - 行动 "闭环设计,奠定了现代智能体研究的基础(→ 直接呼应第一章的 Agent Loop)。
- 微观世界(micro-world)研究方法的普及:证明了在规则明确的简化环境里验证复杂智能原理的可行性(→ 今天所有 Agent 评测环境沙箱都是这个思路)。
- 引发的乐观与反思 :能力严格局限于积木世界 → 引发"符号处理 "与"真正理解"之差异的长期思辨(中文屋争论的源头)。
2.4 符号主义的四大根本挑战(2.1.4)⭐ 本章承前启后的关键
从 1980 年代起,符号主义从"微观世界"走向开放现实世界时,遇到方法论上的固有难题,分两类四条:
(1)知识层面
| 挑战 | 含义 | 为什么致命 |
|---|---|---|
| 知识获取瓶颈 | 知识必须由人类专家 + 知识工程师通过访谈、提炼、编码来构建,成本高、周期长、难规模化 | 专家的很多知识是内隐的、直觉的,根本无法清晰表达为 IF-THEN |
| 常识问题 | 人的行为依赖庞大常识背景("水是湿的"、"绳子可拉不可推"),符号系统除非被显式编码否则一无所知 | Cyc 项目(Lenat)努力数十年,成果与应用仍非常有限 |
(2)逻辑层面
| 挑战 | 含义 | 为什么致命 |
|---|---|---|
| 框架问题 Frame Problem(McCarthy & Hayes, 1969) | 动态世界中,智能体执行一个动作后,如何高效判断哪些事物没有改变 | 为每个动作显式声明所有不变状态在计算上不可行;而人类毫不费力地忽略不相关变化 |
| 系统脆弱性 Brittleness | 完全依赖预设规则 → 一遇到规则之外的微小变化或新情况就可能完全失灵 | SHRDLU 的成功恰恰因为它活在规则完备的封闭世界里;真实世界充满例外 |
🔑 这四条是本章的"因",后面所有章节都是"果" :
知识获取瓶颈 → 引出联结主义 + 预训练 (把知识灌进权重里,不用手写);
框架问题 → 引出学习型/适应性系统 (不预先声明,靠经验应对变化);
脆弱性 → 引出ELIZA 的启示 与最终LLM 的泛化能力。
2.5 ELIZA:把"理解"简化为"模式匹配"(2.2)
背景 :MIT 的 约瑟夫·魏泽鲍姆(Joseph Weizenbaum) 于 1966 年发布。ELIZA 不是一个程序,而是一个可执行不同"脚本"的框架 ;最成功的脚本是 DOCTOR ,模仿罗杰斯学派的非指导性心理治疗师 ------从不正面回答、从不提供信息,只把用户的陈述转化为开放式提问。
用户:我为我的男朋友感到难过。
ELIZA:你为什么会为你的男朋友感到难过?
💡 设计意图的反转 :魏泽鲍姆不是 想造一个懂情感的智能体,恰恰相反,他想证明------通过简单的句式转换,机器可以在完全不理解对话内容的情况下,营造出"智能"与"共情"的假象 。
结果出乎他意料:许多人(包括他的秘书)对它产生了情感依赖,深信它理解自己 → 这就是著名的 ELIZA 效应(智能的幻觉,源于巧妙的对话策略 + 人类天生的情感投射)。
四步算法:模式匹配(Pattern Matching)+ 文本替换(Text Substitution)
| 步骤 | 做什么 | 原文示例 |
|---|---|---|
| ① 关键词识别与排序 | 每个关键词(mother / dreamed / depressed)有优先级,输入含多个关键词时取优先级最高者 |
------ |
| ② 分解规则 Decomposition | 用带通配符 * 的规则捕获句子其余部分 |
规则 * my * + 输入 My mother is afraid of me → 捕获 ["", "mother is afraid of me"] |
| ③ 重组规则 Reassembly | 从模板组中(通常随机)选一条生成回应,可选地填入捕获内容 | "Tell me more about your family." |
| ④ 代词转换 | 重组前做简单的人称转换(I→you, my→your)维持连贯 |
I am sad → How long have you been sad? |
伪代码(章节原文):
text
FUNCTION generate_response(user_input):
words = SPLIT(user_input) // 1. 分词
best_rule = FIND_BEST_RULE(words) // 2. 找优先级最高的关键词规则
IF best_rule is NULL: RETURN a_generic_response() // 兜底
decomposed_parts = DECOMPOSE(user_input, best_rule.decomposition_pattern) // 3. 分解
IF decomposition_failed: RETURN a_generic_response() // 兜底
transformed_parts = TRANSFORM_PRONOUNS(decomposed_parts) // 4. 代词转换
response = REASSEMBLE(transformed_parts, best_rule.reassembly_patterns) // 5. 重组
RETURN response
三条根本局限(直接印证 2.1.4 的理论挑战):
| 局限 | 具体表现 | 对应的理论挑战 |
|---|---|---|
| 缺乏语义理解 | 输入 I am **not** happy,仍机械匹配 I am (.*) → 生成"being not happy"这类病句 |
常识问题(不知道"not"的语义作用) |
| 无上下文记忆 | 无状态(Stateless):每次回应只基于当前单句 | 框架问题 / 序贯环境的记忆需求 |
| 规则的扩展性问题 | 规则增多 → 规则库爆炸式增长,冲突与优先级管理极其复杂,难以维护 | 知识获取瓶颈 + 系统脆弱性 |
⭐ 本章和第一章的接口在这里 :ELIZA 的失败方式(无语义、无状态、不可扩展)正好是第一章 Agent 的三个设计要点 (LLM 提供语义、
prompt_history提供记忆、无需写规则)。第二章解释了为什么第一章要那样写。
2.6 明斯基的心智社会:智能是"涌现"出来的(2.3)
反思的起点 (20 世纪 70--80 年代):专家系统没有儿童的常识;SHRDLU 走不出积木世界;ELIZA 对内容一无所知。它们共享同一套**自上而下(Top-down)**的设计思路------一个全知全能的中央处理器 + 一套统一的逻辑规则。
明斯基提出三个根本问题:
- "理解"是什么? 是单一能力,还是视觉化、逻辑推理、情感共鸣、社会常识等数十种心智过程协同的结果?
- "常识"是什么? 是数百万条逻辑规则的庞大知识库(如 Cyc 的尝试),还是分布式的、由无数具体经验与简单规则片段交织成的网络?
- 智能体应该如何构建? 追求一个完美统一的逻辑系统,还是承认智能本身就是"不完美 "的、由许多功能各异、甚至彼此冲突的简单部分组成的大杂烩?
明斯基的原话:"What magical trick makes us intelligent? The trick is that there is no trick. The power of intelligence stems from our vast diversity, not from any single, perfect principle."
(智能的力量来自我们巨大的多样性,而不是某个单一而完美的原理。)
理论架构的三个关键术语 (⚠️ 注意:这里的"智能体"与第一章的定义不同):
| 术语 | 含义 | 例子 |
|---|---|---|
| 智能体 Agent(心智社会语境) | 一个极其简单、专门化 的心智过程,自身是"无心"的(agent of the mind) | LINE-FINDER(识别线条)、GRASP(抓握) |
| 机构 Agency | 一组协同工作的智能体,完成更复杂的任务 | BUILD = SEE + FIND + GET + PUT |
| 涌现 Emergence | 复杂、有目的性的行为并非由某个高级智能体预先规划 ,而是从大量底层简单智能体的局部交互中自发产生 | 搭积木塔 |
"搭建积木塔"的四层拆解(图 2.6):
[高层目标:我要搭一个塔]
↓ 激活
BUILD-TOWER ← 不知道如何执行物理动作,唯一作用是激活下属机构
↓ 激活
BUILDER ← 只含循环逻辑:塔没搭完就激活 ADD-BLOCK
↓ 激活
ADD-BLOCK ← 协调具体子任务:依次激活 FIND-BLOCK → GET-BLOCK → PUT-ON-TOP
↓ 激活
GET-BLOCK ← 视觉系统 SEE-SHAPE + 运动系统 REACH / GRASP
⭐ 点睛之笔 :
GRASP只负责抓握,它不知道什么是塔 ;BUILDER只负责循环,它不知道如何控制手臂 。没有任何一个单元拥有全局规划------但整个社会通过去中心化的激活/抑制信号 相互作用时,"搭积木塔"这个高度智能的行为就自然而然涌现了。
对多智能体系统(MAS)的三点理论启发:
| 启发 | 含义 | 派生的研究/算法 |
|---|---|---|
| 去中心化控制 | 不存在中央控制器 → 如何设计无中心节点的协调机制与任务分配策略,成为 MAS 核心课题 | 分布式协商、任务拍卖 |
| 涌现式计算 | 复杂问题的解可从简单局部交互规则中自发产生 | 蚁群算法、粒子群优化(PSO) |
| 智能体的社会性 | 明斯基强调智能体间的交互(激活/抑制)→ MAS 扩展到通信语言、协议、协商、信任、组织结构 | ACL 通信语言、契约网(Contract Net) |
🔑 本章最重要的一次"历史跳跃" :明斯基把问题从"如何构建一个全能的单一智能体 "翻转成"如何设计一个高效协作的智能体群体 "------这就是多智能体系统(MAS)研究的序幕。而本仓库(A2A 协议)研究的正是这些智能体之间"如何对话"的工程化答案。
2.7 学习范式演进:从符号到联结、从试错到预训练(2.4.1 -- 2.4.3)
共同的问题意识:如果智能无法被完全设计,那它能否被学习出来?
2.7.1 联结主义(Connectionism):自下而上的学习
20 世纪 80 年代重新兴起(理论源头是 PDP,Rumelhart & McClelland, 1986),与符号主义自上而下 的设计哲学相反,它模仿生物大脑的神经网络结构,自下而上。三个核心思想:
- 知识的分布式表示 :知识不以符号/规则存在,而以连接权重 的形式分布式存储在大量简单处理单元之间------整个网络的连接模式本身就构成知识;
- 简单的处理单元:每个神经元只做加权求和 + 激活函数;
- 通过学习调整权重 :智能来自学习过程(如反向传播),通过大量样本迭代调整权重,使输出逼近目标。
| 对比维度 | 符号主义 | 联结主义 |
|---|---|---|
| 方向 | 自上而下:编码知识 | 自下而上:从数据学习 |
| 知识形态 | 显式规则/符号 | 分布式连接权重 |
| 优势 | 透明、可解释、可逻辑推理 | 感知强、抗噪、擅非结构化数据 |
| 缺陷 | 知识获取瓶颈、脆弱 | 黑箱、不擅逻辑推理、会幻觉 |
| 解决的痛点 | ------ | 感知("这张图里有什么?") |
| 未解决的痛点 | ------ | 决策("这种情况我该做什么?") |
所以还需要下一种范式------RL。
2.7.2 强化学习(RL):在试错中学会序贯决策
与监督学习的根本区别 :RL 不是 从标注好的静态数据集学习,而是通过智能体与环境的直接交互,在"试错"中学习如何最大化长期收益。
五要素(以 AlphaGo 为例):
| 要素 | 定义 | AlphaGo 中 |
|---|---|---|
| 智能体 Agent | 学习者和决策者 | 决策程序 |
| 环境 Environment | 智能体外部的一切 | 围棋规则 + 对手 |
| 状态 State (S) | 对环境某一时刻的特定描述,决策依据 | 棋盘上所有棋子的当前位置 |
| 行动 Action (A) | 根据当前状态可采取的操作 | 在合法位置落子 |
| 奖励 Reward ® | 环境反馈的标量评价信号 | 一局结束:胜 +1 / 负 -1 |
核心交互循环(图 2.8)的五步:
① 时间步 t,智能体观察当前状态 S_t
② 依策略 π 选择并执行行动 A_t ← π: 状态 → 行动的映射,定义智能体的行为方式
③ 环境接收 A_t,转移到新状态 S_{t+1}
④ 环境反馈即时奖励 R_{t+1}
⑤ 智能体用 (S_{t+1}, R_{t+1}) 更新优化策略 π ← 这一步就是"学习"
⭐ 学习目标不是最大化即时奖励,而是最大化累积奖励 / 回报(Return) 。这意味着智能体要有"远见 ":为了未来更大的奖励,可以牺牲眼前的即时奖励------围棋中的"弃子"就是最典型的例子。
🧠 与第一章的接口 :第一章说现代 LLM 智能体是"混合式架构"(快反应 + 慢规划)。RL 的这个"感知-行动-学习"闭环,就是 Agent Loop 的数学化版本------只不过 RL 用数值奖励优化策略,LLM 智能体用自然语言推理决定行动。
2.7.3 预训练:一举攻下"知识获取瓶颈"
RL 的问题:开局零先验知识 (无论符号主义想手写的常识,还是人类决策依赖的背景知识,RL 智能体都没有),而学习又需要海量特定任务的交互数据。解法最终从 NLP 领域浮现------预训练(Pre-training)。
范式转变:从"一任务一模型"到"通用模型 + 微调"
| 阶段 | 做什么 | 关键技术 |
|---|---|---|
| ① 预训练 | 在互联网级海量通用语料上训练一个超大神经网络,目标不是完成特定任务 ,而是学习语言本身的内在规律:语法结构、事实知识、上下文逻辑 | 自监督学习(Self-supervised Learning),最常见目标是**"预测下一个词"** |
| ② 微调 | 针对下游任务,只需少量标注数据微调,即可适配 | Fine-tuning |
爆发点:涌现能力(Emergent Abilities)
当模型规模(参数量 / 数据量 / 计算量)跨越某个阈值 后,出现未被直接训练的、预料之外的能力:
| 能力 | 含义 |
|---|---|
| 上下文学习(In-context Learning) | 不调整任何权重 ,仅在输入中给 几个示例(Few-shot) 甚至 零示例(Zero-shot),就能理解并完成新任务 |
| 思维链(Chain-of-Thought, CoT)推理 | 引导模型先输出一步步推理过程再给答案,显著提升逻辑/算术/常识推理准确率 |
🔑 本章的历史性结论:
- LLM 以高度压缩的隐式世界模型 (藏在数万亿文本训练出的权重里)解决了符号主义最棘手的知识获取瓶颈;
- 于是 LLM 不再只是语言模型,而是一个"海量知识库 + 通用推理引擎"的双重角色组件。
三块拼图就位 :符号主义给逻辑推理框架 · 联结主义 + RL 给学习与决策能力 · LLM 给世界知识与通用推理 → 下一节看它们如何融合。
2.8 LLM 驱动的智能体:历史拼图的合体(2.4.4,图 2.10)
四阶段流程(与第一章的 Agent Loop 一一对应):
| 阶段 | 模块 | 做什么 |
|---|---|---|
| ① 感知 Perception | 感知模块(Perception Module) | 通过传感器从外部环境 接收原始输入形成观察(Observation):用户指令、API 返回的数据、环境状态变化。处理后传给思考阶段 |
| ② 思考 Thought | 规划模块(Planning Module) + LLM + 记忆模块(Memory) | 规划与分解 :规划模块做高级策略制定,通过反思(Reflection)与自我批判(Self-criticism) 把宏观目标拆成可执行步骤; 推理与决策 :LLM 接收规划指令,与记忆模块交互整合历史信息,深度推理后决策出下一步操作,通常表现为一次工具调用(Tool Call) |
| ③ 行动 Action | 执行模块(Execution Module) + 工具箱(Tool Use) | 解析 LLM 生成的工具调用指令,从工具箱中选择并调用合适工具(代码执行器、搜索引擎、API),与环境实际交互 |
| ④ 观察与循环 | 工具结果(Tool Result) + 记忆更新(Memory Update) | 工具返回结果给 LLM → 直接反馈;行动又改变了环境 → 新环境状态。二者共同构成新一轮观察,被感知模块再次捕获,同时 LLM 更新记忆,启动下一轮循环 |
⭐ 本章对第一章的"升级说明" :第一章的 Thought-Action-Observation 是协议层 (用什么文本格式对话),图 2.10 是架构层 (这个循环由哪些模块实现)。
具体对应关系:
prompt_history↔ 记忆模块 + 记忆更新 ;available_tools{}↔ 工具箱 + 执行模块 ;正则解析 Action ↔ 工具调用解析 ;AGENT_SYSTEM_PROMPT里的"先分析再行动" ↔ 规划模块的反思与自我批判。
2.9 三大思潮与关键节点(2.4.5)
| 思潮 | 核心主张 | 代表人物 | 代表成果 |
|---|---|---|---|
| 符号主义 Symbolism | 智能的核心在于符号操作与逻辑推理 | 西蒙(Simon)、明斯基(Minsky) | SHRDLU、专家系统、"深蓝"(国际象棋) |
| 联结主义 Connectionism | 灵感源于大脑神经网络模拟;反向传播奠定复苏基础 | 辛顿(Geoffrey Hinton) 等 | 反向传播 → CNN / Transformer → 深度学习主流 |
| 行为主义 Behaviorism | 智能体通过与环境的互动与试错 学习最优策略,现代化身为 RL | ------ | TD-Gammon → 与深度学习结合的 AlphaGo |
🔑 21 世纪 20 年代的融合(本章的终点,也是全书的起点) :
以 GPT 系列为代表的 LLM,本身就是联结主义的产物,却成为了执行符号推理、进行工具调用和规划决策的核心"大脑"------这就是神经-符号结合的现代智能体架构。
📌 这与第一章"LLM 智能体是神经符号主义的绝佳范例 "是同一个论断的两次表述:第一章从认知科学 (系统 1 / 系统 2)讲,第二章从技术史(三大思潮融合)讲。
技术栈(图 2.12) :由 Letta 公司 2024 年 11 月 发布,把 AI Agent 相关工具/平台/服务分层分类 (底层模型 → 记忆/工具 → 框架 → 应用),用于理解市场格局与技术选型。
👉 本仓库后续要学的 MCP(模型 ↔ 工具)与 A2A(智能体 ↔ 智能体) 就分别落在"纵向工具层"与"横向协作层"。
三、把第二章"接回"第一章(历史 ↔ 概念对照表)
这张表是本章对第一章学习者最大的价值------每个被我当作"设计约定"的东西,其实都是历史教训的沉淀:
| 第一章的概念 | 第二章的历史出处 | 教训的来源 |
|---|---|---|
| 智能体四要素(环境/传感器/执行器/自主性) | SHRDLU 的"感知-思考-行动"闭环 | 集成 > 单点突破 |
| 传统五级演进(反射→模型→目标→效用→学习) | 符号主义(规则/模型/目标)→ RL(效用=奖励)→ 学习型 | "感知不够用怎么办"的同一问题 |
| PEAS 任务环境描述 | 专家系统的"知识库 + 推理机"就是静态 PEAS | 结构化描述任务才能工程化 |
| Agent Loop | SHRDLU 闭环 + RL 的感知-行动-学习循环 | 循环 = 智能体的时间结构 |
| Thought-Action-Observation 协议 | 图 2.10 的感知/思考/行动/观察四阶段(模块化版) | 协议是循环的语法 |
prompt_history(上下文当记忆) |
图 2.10 的记忆模块 + 记忆更新 | ELIZA "无状态"的教训 |
available_tools{} + 正则解析 |
图 2.10 的工具箱 + 执行模块 | 工具是智能体的手脚 |
| 混合式架构(快反应 + 慢规划) | 系统 1 / 系统 2 = 联结主义(神经)+ 符号主义(推理) | 三大思潮融合 |
| 神经符号主义 | 2.4.5:LLM 是联结主义产物,却做符号推理 | 历史融合的直接产物 |
不写 if 天气==晴 then 推荐颐和园(Agent vs Workflow) |
ELIZA 的规则库 就是那个 if-then |
规则穷举必然组合爆炸 |
四、代码精读(code/chapter2/ELIZA.py)
4.1 整体架构
┌──────────────────────────────────────────────────────────┐
│ rules{} ← 规则库:正则模式 → 响应模板列表 │
│ ├─ 4 条"带捕获组"的规则(I need / Why don't you / ...) │
│ ├─ 2 条"关键词"规则(.* mother .* / .* father .*) │
│ └─ 1 条通配兜底规则(.*) │
├──────────────────────────────────────────────────────────┤
│ pronoun_swap{} + swap_pronouns() ← 第一/第二人称转换 │
├──────────────────────────────────────────────────────────┤
│ respond(user_input) ← 核心:遍历规则 → 首次命中即返回 │
├──────────────────────────────────────────────────────────┤
│ 主循环 while True: input() → 退出词判断 → respond() │
└──────────────────────────────────────────────────────────┘
与章节伪代码的差别 (重要):伪代码有 5 步(含关键词排序 FIND_BEST_RULE 与分解失败兜底 decomposition_failed),而这份实现用 for pattern, responses in rules.items() 的顺序扫描替代了关键词排序 ------优先级被隐式地交给了 dict 的插入顺序。这是理解这份代码所有"怪行为"的钥匙。
4.2 规则库:一张表就是"分解规则 + 重组规则"
python
rules = {
r'I need (.*)': [ "Why do you need {0}?", "Would it really help you to get {0}?", ...],
r'Why don\'t you (.*)\?': [ ... ],
r'Why can\'t I (.*)\?': [ ... ],
r'I am (.*)': [ "Did you come to me because you are {0}?", "How long have you been {0}?", ...],
r'.* mother .*': [ "Tell me more about your mother.", ... ],
r'.* father .*': [ "Tell me more about your father.", ... ],
r'.*': [ "Please tell me more.", "Let's change focus a bit...", "Can you elaborate on that?" ],
}
| 对应章节概念 | 代码实现 |
|---|---|
分解规则 (带通配符 * 捕获其余部分) |
正则中的捕获组 (.*);re.search 负责在句中寻找 |
| 重组规则(模板组中随机选一条) | random.choice(responses).format(captured) |
| 关键词规则(mother / father) | 用 .* mother .* 这种"夹心"模式模拟"含关键词即命中" |
| 兜底 generic response | 最后一条 .* 规则 |
4.3 代词转换:pronoun_swap + swap_pronouns
python
pronoun_swap = {"i":"you", "you":"i", "me":"you", "my":"your", "am":"are",
"are":"am", "was":"were", "i'd":"you would", "i've":"you have",
"i'll":"you will", "yours":"mine", "mine":"yours"}
def swap_pronouns(phrase):
words = phrase.lower().split() # ← 注意:整句小写化
swapped_words = [pronoun_swap.get(word, word) for word in words]
return " ".join(swapped_words)
三个值得记住的点:
- 逐词查表替换 (
dict.get(word, word)),不做任何语法分析------所以它只认"词"这一层,无法处理语序、格、时态。这就是"符号操作 ≠ 理解"的最直白体现。 phrase.lower().split()会把捕获内容整体小写 (我实测:I AM SAD→sad),且按空格分词 ,标点会粘在词尾(help!、saying?),既影响查表,也会造成输出里出现help!?这类"双标点"。"you": "i"与模板的"视角"不一致 (见 §五 实验 4):I need you→Why do you need i?。
⚠️ 这里有个容易骂错的地方 (我查资料后修正了):原版 ELIZA 的反射表同样把you反射成I,它之所以不出现病句,是因为重组模板自己写死了"治疗师视角"的代词 ------MAD-SLIP 原版规则组形如((0 YOU 0 I 0) (DO YOU WISH TO 3 ME) ...),模板里的ME是硬编码 的(3处填入反射后的动词短语)。所以真正的缺陷不是"映射错了",而是这份迷你实现只有"反射"这一层,却把反射结果直接塞进了需要宾语的位置 ------两层被压成了一层,视角错位就暴露成了病句。
👉 修法有两种:① 改用you → me(本文 v2 采用,直接得到语法正确的英语);② 保持you → I,但把模板改写成治疗师视角(更忠实原版)。
4.4 respond():整个程序的心脏
python
def respond(user_input):
for pattern, responses in rules.items(): # ① 顺序扫描(= 隐式优先级)
match = re.search(pattern, user_input, re.IGNORECASE) # ② 子串搜索,非全串匹配
if match:
captured_group = match.group(1) if match.groups() else '' # ③ 取捕获组
swapped_group = swap_pronouns(captured_group) # ④ 代词转换
response = random.choice(responses).format(swapped_group) # ⑤ 随机重组
return response # ⑥ 首次命中即返回
return random.choice(rules[r'.*']) # ⑦ 兜底(实际不可达)
逐点解读:
| # | 代码 | 含义 / 隐患 |
|---|---|---|
| ① | for ... in rules.items() |
Python 3.7+ dict 保序 → 规则顺序 = 优先级 。原版 ELIZA 的"关键词权重排序"机制在这里退化成了代码里的书写顺序 ,且无法通过配置调整(挪位置只能改代码) |
| ② | re.search + IGNORECASE |
search 是"句中任意位置 匹配",不是整句匹配 → You know what I am saying? 会在第 14 个字符处命中 I am (.*) |
| ③ | match.groups() |
无捕获组的规则(mother/father/兜底)返回空元组 → '' |
| ⑤ | random.choice(...).format(...) |
同上输入每次输出不同 → 行为不可复现,不利于测试与调试 |
| ⑥ | return 在循环内 |
首条命中即返回,后面的规则不再考虑 ------ 这正是"优先级 = 顺序"的体现 |
| ⑦ | 末尾 return |
⚠️ 死代码 :r'.*' 能匹配任何输入(含空串),循环体内必然已返回(实测见 §五 实验 7) |
4.5 主循环与退出条件
python
if __name__ == '__main__':
print("Therapist: Hello! How can I help you today?")
while True:
user_input = input("You: ")
if user_input.lower() in ["quit", "exit", "bye"]:
print("Therapist: Goodbye. It was nice talking to you.")
break
response = respond(user_input)
print(f"Therapist: {response}")
- 无状态 :
bot不保存任何历史 → 每轮respond(user_input)只看到当前这一句(这正是"无上下文记忆"缺陷的代码证据)。 - 退出词做
.lower()归一化,所以Quit/BYE也能退出;但" bye "(带空格)不行------因为没有.strip()。 - 该脚本无需任何 API Key、无需联网,是最轻量的一次"符号主义复现实验"。
五、我的实验记录(9 组对抗性测试,均为本机实测)
实验方法 :写探针脚本以
importlib只读加载仓库中的ELIZA.py(不改动原文件),固定random.seed()保证可复现,对每条输入记录命中的规则 + 捕获内容 + 实际输出。
5.1 结果总表(节选)
| # | 输入 | 命中规则(span) | 原版输出 | 暴露的问题 |
|---|---|---|---|---|
| 1 | I am not happy |
I am (.*) |
How long have you been not happy? |
否定盲区 |
| 2 | You know what I am saying? |
I am (.*) @(14,26) |
Did you come to me because you are saying?? |
句中子串匹配 + 双标点 + 分词盲区 |
| 3 | I am angry at my father |
I am (.*) |
How long have you been angry at your father? |
father 关键词被抢(无优先级) |
| 4 | I need you |
I need (.*) |
Would it really help you to get i? |
反射与模板视角错位 |
| 5 | I need help! |
I need (.*) |
Would it really help you to get help!? |
标点未剥离 |
| 6 | I AM SAD |
I am (.*) |
Did you come to me because you are sad? |
捕获内容被强制小写 |
| 7 | Why don't you listen to me(无问号) |
.*(兜底) |
Let's change focus a bit... |
规则硬依赖问号 |
| 8 | My mother is not happy with my work. |
.* mother .* |
What was your relationship with your mother like? |
✅ 正常命中(对照组) |
| 9 | 我很难过(中文) |
.*(兜底) |
Let's change focus a bit... |
只认英文关键词,无多语言能力 |
5.2 五条值得写进笔记的结论
结论 1:优先级完全由 dict 书写顺序决定,且"具体规则会被通用规则吃掉"
python
'I am angry at my father' → 命中 'I am (.*)' # 期望命中 '.* father .*'
'I am sad because my father left'
→ 捕获 ('sad because my father left',) # 整个 from 从句被吞进捕获组
'My mother and my father argue' → 命中 '.* mother .*' # 先写 mother 就先赢
原版 ELIZA 有关键词优先级(keyword rank) ,my、I 之类按权重排序;这份实现把权重退化成"谁先写在字典里"。这是"符号系统脆弱性"最直观的复现:规则之间的相互作用没有统一仲裁机制。
结论 2:re.search 让规则在句子中间"抢答"
python
re.search(r'I am (.*)', 'You know what I am saying?') → span=(14, 26) 捕获 'saying?'
输出: 'Did you come to me because you are saying??'
- 规则不要求句首匹配 → 句中任何位置命中就生效;
- 捕获的
saying?是现在分词 ,模板却是you are {0}→ 语法错位 (being saying); - 标点未剥离 + 模板自带
?→ 双问号 。
三条缺陷叠加在一条输出上,这正是"无理解、纯符号操作"的典型症状。
结论 3:代词转换表与模板"视角错位",且大小写丢失
python
swap_pronouns('you') = 'i' # 与原版一致的反射结果
swap_pronouns('I') = 'you'
'I need you' → 'Would it really help you to get i?' # 病句
- 病句的真正原因 :反射把
you变成第一人称i,而模板"Why do you need {0}?"的空位是宾语 位置------原版 ELIZA 靠"模板里硬编码治疗师视角代词"(如 MAD-SLIP 的(DO YOU WISH TO 3 ME),ME写死在模板里)来化解,这份迷你实现把两层压成了一层(详见 §4.3 第 3 点); - 次要问题:
phrase.lower()让大小写信息全丢 ,i永远是小写(I AM SAD→sad)。
结论 4:规则对 标点/格式过度敏感(脆弱性的教科书案例)
| 输入 | 结果 | 原因 |
|---|---|---|
Why don't you listen to me? |
✅ 命中 Why don't you (.*)\? |
有问号 |
Why don't you listen to me |
❌ 掉到兜底 | 模式里有 \?,少一个问号整条规则失效 |
I need help! |
输出 ...get help!? |
捕获未剥离 ! |
真实世界里用户不会按你的正则标点规范说话------这正是"符号系统遇到规则之外的微小变化就失灵"(Brittleness)的最小可复现案例。
结论 5:兜底 return 是死代码 + 输出不可复现
python
re.search(r'.*', '') → True # 空串都能匹配
- 因此
for循环必然在最后一条.*上命中并return,函数末尾那句return random.choice(rules[r'.*'])永远执行不到; random.choice使同一句话每次输出都不同(实测同句三次得到三种答复)→ 无法写断言、无法复现 bug。
5.3 一次"完整性"检查:它真的没有崩溃风险吗?
我特意试了容易让 str.format 爆炸的输入:
| 输入 | 输出 | 判断 |
|---|---|---|
I am {0} |
Did you come to me because you are {0}? |
✅ 不崩 :format 不递归解析实参内容 |
I am {0} bad |
Are you sure you need {0} bad? |
✅ 不崩 |
I am "sad" |
How long have you been "sad"? |
✅ 不崩(引号只是普通字符) |
| 超长输入(200 个 very) | 正常回显 | ✅ 不崩(没有长度限制,但也没有截断) |
💡 与原版 ELIZA(Lisp 实现,带
MEMORY/RANK/SYNONYM表和转义处理)相比,这个迷你版刻意砍掉了记忆与排序 ------它不是为了做产品,而是为了让你在 40 行里看清符号主义的骨架与边界。
六、踩坑与改进思考
6.1 现有实现的缺陷清单
| # | 缺陷 | 类型 | 严重度 | 对应历史局限 |
|---|---|---|---|---|
| 1 | 无关键词优先级(靠 dict 顺序) | 架构 | 高 | 符号系统脆弱性 |
| 2 | re.search 子串误命中(无词边界) |
匹配 | 高 | 无理解 |
| 3 | 代词反射与模板视角错位 + 强制小写 | 规则 | 中 | 无语义 |
| 4 | 捕获不剥标点 → 双标点 | 输出 | 中 | 无理解 |
| 5 | 规则硬依赖问号等标点 | 鲁棒性 | 中 | 脆弱性 |
| 6 | 无状态(不记上下文) | 架构 | 高 | 无上下文记忆 |
| 7 | 兜底 return 死代码 | 代码质量 | 低 | ------ |
| 8 | random.choice → 不可复现 |
可测性 | 中 | ------ |
| 9 | 无否定/时态/语序处理 | 语义 | 根本 | 常识问题 |
6.2 修复方向(6.1 中 1--8 可修,9 不可修)⭐
关键认知 :缺陷 1--8 都是工程问题 ,改代码就能修(我实测的修复版见《第二章可能出现的问题.md》§四);
而缺陷 9(真的懂"不 happy"意味着什么)是方法论问题 ------只要还用"人工写规则"这条路,就永远修不完,因为:
规则数 R ≈ 意图数 × 句式数 × 语境数 × 说话人角色数 × ... (组合爆炸)
而自然语言句子空间 ≈ V^n(V=词表大小,n=句长) (指数增长)
这就是为什么历史上符号主义必须让位给从数据中学习 的路线(联结主义 → RL → 预训练 → LLM)------第二章整章就是在论证这个"必然性"。
🔑 写代码的启示 :
ELIZA.py与第一章的FirstAgentTest.py是同一个问题的两代答案:
- ELIZA 把"理解"写成
if pattern then template(Workflow)→ 40 行后到达能力天花板;FirstAgentTest.py把"决策"交给 LLM 推理(Agent )→ 同样的 130 行能处理开放式任务。
两章的代码合起来看,就能亲眼看到"第一次 AI 范式转移"在现代的重演。
七、习题思路速记
习题 1 · 物理符号系统假说
- 两个论断 :充分性 = 任何物理符号系统都能 产生通用智能行为;必要性 = 任何能展现通用智能行为的系统必然是物理符号系统。合起来断言"物理符号系统 ≡ 通用智能"。
- 对"充分性"的挑战 (来自 2.1.4):① 知识获取瓶颈 ------符号系统有推理能力,但知识灌不进去(内隐知识无法 IF-THEN 化);② 常识问题 ------Cyc 数十年仍不完备;③ 框架问题 ------无法高效表达"什么没变";④ 脆弱性 ------SHRDLU 出不了积木世界。结论:系统是符号系统,却没有表现出通用智能 → 充分性不成立(至少在当前工程水平下)。
- LLM 智能体符合吗?我的分析 :取决于把"符号"划在哪一层------载体层 :它跑在数字计算机上,本质是符号系统(符合);计算层 :其内部是分布式数值权重与连续向量运算,不是符号操作(不符合严格的 PSSH);交互层 :其输入输出(Thought、工具调用 JSON、代码)以及思维链都是可操作的显式符号 (符合)。→ 所以更准确的表述是:LLM 智能体让 PSSH 从"错误的等价断言"退化为"一个可用的近似模型" :智能不必完全 由符号计算实现,但可以用符号接口来组织与调度------这正是第一章说的"给神经网络装上符号接口"。
习题 2 · MYCIN 为何未大规模临床应用
- 技术之外的因素 :① 责任与伦理 :误诊谁负责?机器不能承担医疗责任;② 法律与监管 :医疗器械审批(FDA)路径缺失,算法黑箱与举证困难;③ 用户接受度 :医生抵触"被替代",且系统交互笨重(需手工录入大量事实);④ 经济与维护 :知识库更新需专家访谈(知识获取瓶颈的持续成本),换一个医院流程就失效;⑤ 集成困难 :与医院 HIS 系统对接成本高;⑥ 技术乐观落空:MYCIN 是"诊断建议"而非"全流程",价值被窄化。
- 今天我会怎么设计医疗诊断智能体 :分层 + 神经符号 ------LLM 做交互与推理(采集病史、鉴别诊断)、工具调用查检验数据库与药典、结构化知识图谱 约束用药禁忌(符号层保证可审计)、不确定性量化 (置信度输出 + 触发条件)、人在环(Human-in-the-loop) :任何处方必须医生确认,全链路日志可追溯,并做回归测试集持续评测。
- 今天仍优于深度学习之处 (规则系统的主场):① 强合规、需可解释 的场景:医疗报销审核、税务、航空适航检查单;② 规则明确且变更受控 :流水线质检、金融风控硬规则;③ 安全联锁 :工业控制、核电保护逻辑(必须可证明、可验证);④ 冷启动无数据 的小众领域。判据:当"解释性 + 确定性 + 合规"的价值 > "泛化能力"的价值时,专家系统仍然更优。
习题 3 · 扩展 ELIZA(已动手实现,见配套补充文件)
- ① 加规则:我会改成**"优先级 + 词边界"的规则表**(而不只是往 dict 里塞几条);
- ② 加记忆:抽出关键信息存进
self.memory,并在后续回复中注入(v2 实现了name/age,输出如Tom, tell me more about your mother.;job同法再加一条正则即可); - ③ 与 ChatGPT 的本质差异(≥3 个维度):知识来源 (人工规则 vs 万亿语料预训练)· 语义理解 (词级替换 vs 上下文语义表征)· 状态与记忆 (无状态 vs 上下文窗口 + 可外挂长期记忆)· 泛化方式 (穷举 vs 涌现/零样本)· 可维护性 (改代码 vs 改提示词/数据)· 错误模式(机械病句 vs 幻觉);
- ④ 组合爆炸的数学说明:见补充文件 §五(
R线性增长 vs 句子空间V^n指数增长,覆盖率 → 0;且规则两两交互导致冲突检查O(R²))。
习题 4 · 心智社会
GRASP失效会怎样 :① 局部失效不致命 :GET-BLOCK拿不到积木 →PUT-ON-TOP无法执行 →ADD-BLOCK持续失败 → 塔搭不起来,但其他机构(如识别、问答、移动)仍然正常工作 (无全局崩溃);② 可能被替代机制补偿 :若存在多个候选智能体(去中心化的好处),其他抓握策略可接管;③ 也可能出现"沉默的失败" :因为没有中央监控者 ,没人知道"塔没搭完"这件事本身(这正对应现代多智能体系统的可观测性问题 )。
优势 :鲁棒(无单点故障)、可扩展(加模块不重构)、涌现出设计者未预设的能力;劣势:难以预测与调试、难以保证全局目标最优、缺乏一致的世界观(智能体之间可能冲突)。- 与 CAMEL-Workforce / MetaGPT / CrewAI 的关联与差异 :
相同 :都是"多个专职角色协作完成复杂任务",都依赖任务分解 + 角色专门化 ,都主张"群体 > 单体"。
不同 :① 明斯基的智能体是**"无心"的反射式过程**,而现代 MAS 的成员是有推理能力的 LLM ;② 明斯基靠激活/抑制信号 动态连接,现代框架靠显式消息传递 + 结构化协议 (Role/Goal/Task);③ 现代系统有中央编排者 (Manager/Orchestrator,如 CrewAI 的 CrewAI Process、MetaGPT 的 SOP),并非严格去中心化 ------这其实是对明斯基纯涌现思想的一种"工程妥协";④ 现代系统要解决成本、token、幻觉传播等明斯基时代不存在的问题。 - "心智社会"在 LLM 时代过时了吗? 没有,它换了个层次继续有效:
① 模型内部 :MoE(混合专家)、多头注意力、电路式的功能分工,本质仍是"多个简单单元协作涌现出整体能力";
② 单体 Agent 内部 :规划模块 / 记忆模块 / 工具模块 / 反思模块的协作(图 2.10),就是心智社会的工程版;
③ 多智能体系统 :A2A、MCP、CAMEL、MetaGPT 是它的直接后裔。
但必须承认一个反转 :明斯基设想智能体是"无心的简单过程",而今天最强的智能体恰恰是既有推理能力又能协作 ------即"有心的个体 + 社会的组织"两层同时存在,这比明斯基的原始构想更复杂。
习题 5 · 强化学习 vs 监督学习
- AlphaGo 的试错机制 :状态=棋盘布局 → 依策略 π 落子 → 对局结束拿到胜负奖励(+1/-1,中间步奖励为 0)→ 用奖励反向更新策略网络。数百万次自我对弈 (无需人类棋谱)让策略从随机走向超人类。关键 :反馈信号是延迟的、稀少的 (一局只有一个奖励),所以要靠价值估计把终局奖励"摊销"到中间步。
- 为什么 RL 适合序贯决策 :① 决策之间有因果依赖 (这步影响未来),监督学习假设样本 i.i.d.,无法建模长期后果;② RL 直接优化累积回报 ,天然支持"弃子换全局";③ 探索-利用 机制让智能体主动去试没走过的路,而监督学习只能模仿已有标注。
数据需求的本质区别 :监督学习需要预先标注的静态数据集 (输入-正确答案对),标注成本是人的成本;RL 需要与环境交互的能力 (或模拟器),数据是自己产生 的,成本是采样与计算成本,且奖励信号往往稀疏。 - 超级马里奥智能体 :
- 监督学习 :需要大量人类玩家的操作录像((屏幕帧, 按键) 对),标注成本极高,且模型只会模仿人类水平、无法发现更强策略;
- 强化学习 :只需要游戏模拟器 + 奖励函数(前进距离/得分/通关),可以并行采样百万局,能超越人类打法;
- 结论 :RL 更合适 。但实践中常先监督预训练(用少量录像初始化策略)再 RL 微调------与 LLM 的"预训练 + RLHF"完全同构。
- RL 在大模型训练中的作用 :RLHF / RLAIF / DPO / RLVR(可验证奖励的 RL) ------预训练给"知识",RL 给"对齐 ":让模型学会"什么样的回答更好"(人类偏好 / 规则奖励),并强化推理链 (如让模型学会更长的思维链、自我纠错)。这也解释了本章的叙事:RL 不是被 LLM 取代,而是被 LLM 吸收。
习题 6 · 预训练-微调范式
- 为什么解决了"知识获取瓶颈" :符号主义的知识是人工编码的显式规则 (成本 ∝ 知识量,且内隐知识无法编码);预训练的知识是从原始文本自监督学到的分布式参数 (成本 ∝ 算力,一次投入后可复用、可泛化)。本质区别 :显式符号 ↔ 隐式分布式表示 ;人工指定 ↔ 统计学习 ;精确但脆弱 ↔ 模糊但鲁棒。它把"知识工程"变成了"数据 + 算力工程"。
- 互联网数据带来的问题 :① 偏见与有害内容 (性别/种族刻板印象);② 事实错误与过时信息 ;③ 版权与隐私 (训练数据合规);④ 数据污染/评测泄漏 ;⑤ 长尾知识缺失 (低频但重要的专业内容少);⑥ 幻觉根源 ------数据里有噪声,且训练目标是"像文本"而不是"是真的"。
缓解 :数据清洗与去重、质量过滤、加入权威语料、RLHF 对齐、RAG/工具调用做事实校验、输出带引用、红队测试与安全微调、数据溯源与合规审计。 - 会被取代吗?我的判断 :核心范式会长期存在,但形态会演化 。预训练-微调解决的是"从无到有获得通用能力"这一层,只要模型还需要"先具备通用知识再适应任务",这个骨架就有效。变化的方向可能是:① 从全量微调到参数高效微调(LoRA/Prompt Tuning)与上下文学习 ;② 预训练目标从"预测下一个词"扩展到多模态/世界模型 ;③ "预训练 + RLHF/RLAIF"成为事实标准 (对齐成为必备环节);④ 合成数据 + 自我博弈 (数据瓶颈的解法)。真正可能被挑战的是"每次都从头预训练超大模型"这一经济学,而不是范式本身。
习题 7 · 三个时代设计"智能代码审查助手"
| 1980 年代(符号主义) | 2015 年(深度学习,无 LLM) | 现在(LLM 智能体) | |
|---|---|---|---|
| 做法 | 写规则:AST + 正则 + 手工编码的代码规范库;知识库 = 编码规范/常见 bug 模式;推理机 = 规则匹配 | 训练模型:用大量带标注的 bug 数据训练分类/序列模型(如 bug prediction、code2vec);仍需为每类问题单独训练 | LLM + 工具 + 记忆:LLM 做主推理,配合静态分析工具(AST/污点分析)、检索(历史 PR/规范文档)、测试执行 |
| 能力 | 只能查规则内的问题(命名规范、明显空指针) | 只能查训练分布内的问题,且只能给"有问题/没问题"的信号 | 能概括实现逻辑、指出质量问题、发现潜在 bug、提出改进建议(生成式) |
| 困难 | 规则写不完(同 ELIZA 的组合爆炸);无法理解语义;换语言=重写全部规则 | 标注数据极贵(需专家标 bug);无法处理未见模式;不可解释;只见局部 | 幻觉(编造不存在的 bug/API);长上下文与仓库级理解难;成本与延迟;需要人在环 |
| 架构(对照图 2.10) | ------ | ------ | 感知 :读 diff、读文件、读 CI 结果 · 思考 :规划模块拆解(先概括 → 再查逻辑 → 再找 bug → 再提建议)+ LLM 推理 + 记忆 (历史评审意见、项目规范) · 行动 :执行模块调用 AST 解析器、linter、测试运行器、代码检索 · 观察:工具结果 + 测试输出 → 更新记忆 → 进入下一轮 |
- 演进的关键跃迁 :1980s 卡在知识编码 ,2015 卡在标注数据与泛化 ,现在卡在可靠性与成本 ------但都在同一根轴上推进:让智能体从"能感知"到"能决策"再到"能自我改进"。
- 一句话 :任务没有变,变的是"谁来提供知识 "------从人类手写 (符号主义)→ 数据统计 (深度学习)→ 预训练隐式世界模型 + 工具实时校验(LLM 智能体)。
八、本章小结
本章回顾
- 符号主义的成败 :PSSH 把智能问题工程化 → 专家系统(知识库 + 推理机,MYCIN)与 SHRDLU(感知-思考-行动闭环)证明"可行" → 但撞上知识获取瓶颈 / 常识 / 框架问题 / 脆弱性四堵墙。
- 分布式智能的萌芽 :明斯基《心智社会》------智能不在某个完美核心,而在无数"无心"小单元的交互中涌现 → 直接开启 MAS 研究。
- 学习范式的三级跳 :联结主义(感知)→ 强化学习(决策)→ 预训练(知识)→ LLM 把三者合体。
- 现代智能体的诞生:LLM = 海量知识库 + 通用推理引擎;配上感知/规划/记忆/执行模块,构成图 2.10 的闭环。
核心公式
智能体的历史 = 符号主义(逻辑推理的框架,但知识要手写)
+ 联结主义(感知与表示,但不会决策)
+ 行为主义/强化学习(从试错中学决策,但零先验)
+ 预训练(把世界知识压进权重,一举解决知识瓶颈)
→ 融合为:LLM 智能体(神经做直觉,符号做推理)
三句话记住本章
- 范式不是被推翻的,是被"上一代解决不了的那个问题"逼出来的。
- ELIZA 证明了"不懂也能像懂";专家系统证明了"懂规则≠懂世界";LLM 证明了"从数据里能长出世界的压缩模型"。
- 现代智能体不是新发明,而是三大思潮半个世纪纠缠后的合流点。
与第一章的呼应(闭环)
| 第一章说 | 第二章告诉你为什么 |
|---|---|
| 智能体的核心是自主性 | 规则系统(ELIZA)没有自主性 → 必须让模型自行决策 |
| 要用 PEAS 描述环境 | 专家系统正是把环境结构化成"知识库 + 推理机"的早期尝试 |
| 环境部分可观察、序贯、动态 → 需要记忆 | ELIZA 的"无状态"是最直接的反面教材 |
| Agent 与 Workflow 的分界线 | 符号主义的 if-then 就是 Workflow 的极限;LLM 的自由度就是 Agent 的来源 |
| LLM 智能体是神经符号主义范例 | 2.4.5 明说:联结主义的产物在做符号推理 |
自测清单
- 能准确复述 PSSH 的充分性与必要性论断,并说明它们分别被什么挑战/反驳
- 能画出专家系统的架构,并说清正向链与反向链的区别(各举一个应用场景)
- 能说出 MYCIN 的三大要点(600 条规则 / 反向链 / 置信因子 CF)
- 能列出符号主义的四大根本挑战,并说明每一个分别引出了后来的哪种范式
- 能默写 ELIZA 的四步算法,并说明"关键词排序"在代码实现中退化成了什么
- 能从零复现
ELIZA.py,并解释为什么respond()里return的位置决定了优先级 - 能举出至少 3 个
ELIZA.py缺陷的具体触发输入(不看笔记) - 能说清明斯基语境下的"智能体 / 机构 / 涌现"三个词分别指什么(≠ 第一章的"智能体")
- 能写出 RL 的五要素与五步循环,并解释"累积奖励"为什么要求"远见"
- 能说明预训练为什么解决了知识获取瓶颈,以及 ICL / CoT 属于哪类能力
- 能把图 2.10 的六个模块与第一章的
FirstAgentTest.py逐一对上 - 能说出三大思潮的代表人物与代表成果,并解释"神经-符号融合"指什么
- 能回答习题 7 的三个时代方案差异,并说清"知识由谁提供"这条主线
下一步
第三章将聚焦大语言模型本身(为什么是它成为了智能体的大脑)。带着本章留下的问题继续:
如果 LLM 已经"压缩了世界知识 + 具备推理能力",那它为什么还需要 Agent(工具、记忆、循环)?
本章的答案已经埋好了:LLM 是知识库 + 推理引擎 ,但它本身不行动 (不能上网、不能写文件、没有持久记忆)。智能体正是给这个"会思考的大脑"补上"手脚、记忆与感官"的工程化方案------这就是第三章之后所有章节的内容。