Chapter 02
第二章 智能体发展史
理解智能体历史,不是为了背年份,而是为了看清今天 LLM Agent 的来源:符号系统提供了规则和推理框架,专家系统提供了知识库思想,早期聊天机器人暴露了模式匹配边界,强化学习强调环境反馈,大语言模型则把自然语言变成新的智能体接口。
本章学习目标
2.1 基于符号与逻辑的早期智能体
2.1.1 物理符号系统假说
早期人工智能研究相信,智能可以通过符号操作实现。所谓符号,可以是对象、关系、规则、命题和逻辑表达式。系统只要能正确表示知识,并按照规则搜索和推理,就有机会表现出智能行为。
这条路线对今天仍有启发。Agent 的工具名、参数 schema、动作空间、计划节点、状态机,本质上都是符号化的工程对象。LLM 能用自然语言生成这些对象,但最终执行时仍需要落到清楚的符号接口上。
| 符号主义关注点 | 现代 Agent 对应物 | 工程意义 |
|---|---|---|
| 知识表示 | Prompt、工具说明、RAG 文档、业务规则。 | 把隐含知识转成模型和程序都能使用的材料。 |
| 逻辑推理 | 计划生成、约束检查、验证器。 | 让 Agent 不只是生成文本,而能按规则推进。 |
| 搜索 | 多步骤规划、候选方案比较、树搜索。 | 在复杂任务中寻找可行路径。 |
2.1.4 符号主义面临的挑战
符号系统的问题也很明显。现实世界变化太多,常识难以写全,规则之间会冲突,维护成本会越来越高。很多任务不是“没有规则”,而是规则太多、例外太多、上下文太复杂。
2.1.2 专家系统
专家系统是符号主义最有代表性的工程形态之一。它把某个领域专家的经验整理成知识库,再通过推理机根据事实触发规则。系统还会尝试解释为什么得出某个结论。
现代 Agent 仍然需要类似结构。知识库可以变成向量数据库或文档检索,推理机可以由 LLM 和规则引擎共同承担,解释模块可以变成工具调用日志和引用来源。
2.1.3 SHRDLU:早期语言理解智能体
SHRDLU 是早期人工智能历史上常被提到的系统。它运行在一个由积木构成的虚拟世界中,可以理解有限范围内的自然语言指令,并执行移动、堆叠等动作。
它的重要性不在于能力有多强,而在于展示了“语言理解 + 世界模型 + 行动执行”的组合。今天的浏览器 Agent、代码 Agent、桌面 Agent,本质上也在做类似的事,只是环境更复杂、工具更多、语言理解能力更强。
2.2 构建基于规则的聊天机器人
2.2.1 ELIZA 的设计思想
ELIZA 展示了一个简单但影响深远的想法:即使系统不真正理解语言,也可以通过模式匹配和模板替换制造“像在对话”的效果。它会识别用户表达中的关键词,把部分内容改写后放入回复模板。
2.2.2 模式匹配与文本替换
下面的代码实现一个简化版 ELIZA。它有规则库、代词转换和兜底回复。你可以从中看到规则系统的可解释性,也能看到它的脆弱性。
import random
import re
from dataclasses import dataclass
@dataclass
class Rule:
pattern: re.Pattern
templates: list[str]
REFLECTIONS = {
"我": "你",
"我的": "你的",
"你": "我",
"你的": "我的",
}
class ElizaBot:
def __init__(self) -> None:
self.rules = [
Rule(re.compile(r".*我想要(.+)"), ["为什么你想要{slot}?", "得到{slot}之后会发生什么?"]),
Rule(re.compile(r".*我担心(.+)"), ["你担心{slot},这种担心持续多久了?", "如果{slot}发生,你准备怎么应对?"]),
Rule(re.compile(r".*因为(.+)"), ["这个原因听起来很重要,能再展开说说吗?", "{slot}和你的目标有什么关系?"]),
]
def reflect(self, text: str) -> str:
for source, target in REFLECTIONS.items():
text = text.replace(source, target)
return text
def reply(self, message: str) -> str:
for rule in self.rules:
match = rule.pattern.match(message)
if match:
slot = self.reflect(match.group(1).strip())
return random.choice(rule.templates).format(slot=slot)
return random.choice(["继续说。", "这件事里最重要的部分是什么?", "你希望我怎么帮助你?"])
if __name__ == "__main__":
bot = ElizaBot()
for message in ["我想要一个学习计划", "我担心学不会 Agent", "因为工具调用太复杂"]:
print("用户:", message)
print("ELIZA:", bot.reply(message))
配套文件:eliza.py。你也可以对比之前的 pattern_bot.py,它们展示的是同一类规则思想。
2.2.3 核心逻辑的实现
ELIZA 类系统的核心不是模型参数,而是三件事:规则库、匹配顺序、模板替换。只要输入落在规则覆盖范围内,它就很稳定;一旦用户换说法或任务变复杂,它就会显得机械。
2.3 马文·明斯基的心智社会
2.3.1 对单一整体智能模型的反思
心智社会的思想可以用一句话理解:智能不一定来自一个单一、完整、全能的模块,也可能来自许多小能力的协作。每个小模块只解决局部问题,但组合起来可以产生复杂行为。
2.3.2 作为协作体的智能
这个思想对现代多智能体系统非常有启发。一个写作系统可以拆成选题 Agent、资料 Agent、结构 Agent、审稿 Agent;一个软件工程系统可以拆成需求分析、代码修改、测试执行和代码审查多个角色。
2.3.3 对多智能体系统的启发
多智能体不是简单地多开几个模型。关键是角色边界、通信协议、共享状态、冲突解决和最终裁决。否则多个 Agent 只会增加噪声和成本。
2.4 学习范式的演进与现代智能体
2.4.1 从符号到联结
符号主义擅长表达规则,但难以覆盖真实世界的复杂变化。联结主义和机器学习转向从数据中学习模式,用神经网络表示语言、图像和行为策略。
2.4.2 基于强化学习的智能体
强化学习把智能体放在环境中,让它通过行动获得奖励,再根据反馈改进策略。下面是最小的多臂老虎机示例,它展示了探索与利用的基本矛盾。
import random
class BanditEnv:
def __init__(self, rewards: list[float]) -> None:
self.rewards = rewards
def pull(self, arm: int) -> float:
return self.rewards[arm] + random.uniform(-0.2, 0.2)
class EpsilonGreedyAgent:
def __init__(self, arm_count: int, epsilon: float = 0.2) -> None:
self.epsilon = epsilon
self.counts = [0 for _ in range(arm_count)]
self.values = [0.0 for _ in range(arm_count)]
def choose(self) -> int:
if random.random() < self.epsilon:
return random.randrange(len(self.values))
return max(range(len(self.values)), key=lambda arm: self.values[arm])
def learn(self, arm: int, reward: float) -> None:
self.counts[arm] += 1
self.values[arm] += (reward - self.values[arm]) / self.counts[arm]
if __name__ == "__main__":
random.seed(7)
env = BanditEnv([0.2, 0.5, 0.8])
agent = EpsilonGreedyAgent(3)
for _ in range(80):
arm = agent.choose()
agent.learn(arm, env.pull(arm))
print(agent.counts)
print([round(value, 3) for value in agent.values])
配套文件:bandit_agent.py。
2.4.3 基于大规模数据的预训练
大规模预训练把语言知识、世界知识和代码模式压缩进模型参数里。模型不再只会执行人工写好的规则,而是能对未见过的语言任务做一定泛化。
2.4.4 基于大语言模型的智能体
LLM Agent 把历史上的多条线索重新组合起来:符号系统的工具接口,专家系统的知识库和解释,规则系统的边界控制,强化学习的反馈思想,以及预训练模型的通用语言能力。
| 历史阶段 | 核心能力 | 对现代 Agent 的遗产 |
|---|---|---|
| 符号 AI | 规则、逻辑、搜索。 | 工具 schema、状态机、计划节点、验证器。 |
| 专家系统 | 知识库、推理机、解释。 | RAG、业务规则、引用来源、审计日志。 |
| ELIZA | 模式匹配、模板回复。 | Prompt 模板、意图路由、规则兜底。 |
| 强化学习 | 环境、行动、奖励、策略。 | 运行轨迹评估、策略优化、Agentic RL。 |
| 大语言模型 | 自然语言理解、生成、推理草稿。 | 通用任务接口、多工具调用、长任务编排。 |
2.4.5 智能体发展关键节点概览
2.5 本章小结
智能体的发展史可以看成几种能力的接力:符号系统带来规则和推理,专家系统带来知识组织,规则聊天机器人带来对话模板,强化学习带来反馈优化,预训练模型带来通用语言能力。现代 LLM Agent 的工程实践,就是把这些能力重新组合。
下一章进入大语言模型基础。理解语言模型如何预测文本、如何表示词语、如何使用 Transformer 和分词器,会帮助你写出更可靠的 Prompt、工具调用和 Agent 接口。
习题
-
练习 2.1:扩展 ELIZA。
给
ElizaBot增加“我需要...”“我不理解...”“Agent 可以...”三类规则,每类至少两个模板。 - 练习 2.2:历史对照。 用表格比较专家系统和 LLM Agent,至少包含知识来源、推理方式、解释方式和维护成本。
- 练习 2.3:分析 SHRDLU。 选择一个现代浏览器 Agent,说明它和 SHRDLU 在环境、行动和语言理解上的相同点与不同点。
-
练习 2.4:调整探索率。
修改
EpsilonGreedyAgent的 epsilon,观察选择次数和价值估计如何变化。 - 练习 2.5:画时间线。 画出本章时间线,并在每个节点旁写一句“它对现代 Agent 的影响”。
参考文献
- Artificial Intelligence: A Modern Approach:智能体、搜索、逻辑和学习基础。
- ELIZA 资料:了解早期模式匹配聊天机器人。
- Reinforcement Learning: An Introduction:强化学习基础教材。