AI AI树洞

Chapter 02

第二章 智能体发展史

理解智能体历史,不是为了背年份,而是为了看清今天 LLM Agent 的来源:符号系统提供了规则和推理框架,专家系统提供了知识库思想,早期聊天机器人暴露了模式匹配边界,强化学习强调环境反馈,大语言模型则把自然语言变成新的智能体接口。

本章学习目标

历史目标 理解符号主义、专家系统、SHRDLU、ELIZA、心智社会、强化学习和预训练模型。
代码目标 运行 eliza.pybandit_agent.py
分析目标 能说明早期智能体思想如何影响今天的工具调用、计划、记忆和多智能体系统。

2.1 基于符号与逻辑的早期智能体

2.1.1 物理符号系统假说

早期人工智能研究相信,智能可以通过符号操作实现。所谓符号,可以是对象、关系、规则、命题和逻辑表达式。系统只要能正确表示知识,并按照规则搜索和推理,就有机会表现出智能行为。

这条路线对今天仍有启发。Agent 的工具名、参数 schema、动作空间、计划节点、状态机,本质上都是符号化的工程对象。LLM 能用自然语言生成这些对象,但最终执行时仍需要落到清楚的符号接口上。

符号主义关注点 现代 Agent 对应物 工程意义
知识表示 Prompt、工具说明、RAG 文档、业务规则。 把隐含知识转成模型和程序都能使用的材料。
逻辑推理 计划生成、约束检查、验证器。 让 Agent 不只是生成文本,而能按规则推进。
搜索 多步骤规划、候选方案比较、树搜索。 在复杂任务中寻找可行路径。

2.1.4 符号主义面临的挑战

符号系统的问题也很明显。现实世界变化太多,常识难以写全,规则之间会冲突,维护成本会越来越高。很多任务不是“没有规则”,而是规则太多、例外太多、上下文太复杂。

2.1.2 专家系统

专家系统是符号主义最有代表性的工程形态之一。它把某个领域专家的经验整理成知识库,再通过推理机根据事实触发规则。系统还会尝试解释为什么得出某个结论。

Facts 当前已知事实和用户输入。
Knowledge 领域规则、经验和判断条件。
Inference 根据规则推出结论或新事实。
Explain 展示触发了哪些规则。
Decision 给出建议、诊断或下一步动作。

现代 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 智能体发展关键节点概览

1950s-1960s符号主义、逻辑推理和搜索成为主线。
1960sELIZA 等早期聊天机器人展示模式匹配的可能性。
1970sSHRDLU 展示有限世界中的语言理解和行动执行。
1980s专家系统进入应用阶段,知识工程成为关键工作。
1990s-2010s机器学习、强化学习和深度学习逐步成为主流。
2020s大语言模型让自然语言成为 Agent 的统一入口。

2.5 本章小结

智能体的发展史可以看成几种能力的接力:符号系统带来规则和推理,专家系统带来知识组织,规则聊天机器人带来对话模板,强化学习带来反馈优化,预训练模型带来通用语言能力。现代 LLM Agent 的工程实践,就是把这些能力重新组合。

下一章进入大语言模型基础。理解语言模型如何预测文本、如何表示词语、如何使用 Transformer 和分词器,会帮助你写出更可靠的 Prompt、工具调用和 Agent 接口。

习题

  1. 练习 2.1:扩展 ELIZA。ElizaBot 增加“我需要...”“我不理解...”“Agent 可以...”三类规则,每类至少两个模板。
  2. 练习 2.2:历史对照。 用表格比较专家系统和 LLM Agent,至少包含知识来源、推理方式、解释方式和维护成本。
  3. 练习 2.3:分析 SHRDLU。 选择一个现代浏览器 Agent,说明它和 SHRDLU 在环境、行动和语言理解上的相同点与不同点。
  4. 练习 2.4:调整探索率。 修改 EpsilonGreedyAgent 的 epsilon,观察选择次数和价值估计如何变化。
  5. 练习 2.5:画时间线。 画出本章时间线,并在每个节点旁写一句“它对现代 Agent 的影响”。

参考文献