系列名称:[Agent 考古] 符号单体时代:第一组织形式的确立与反叛
篇号:第 7 篇 / 共 13 篇 主题分类:历史记述 前置阅读:STRIPS 1971 阅读时间:约 10 分钟
1966 年的某一天,MIT 电气工程系的 Joseph Weizenbaum 让他的秘书试用了自己刚写完的一个程序。程序叫 ELIZA,加载了一个名为 DOCTOR 的脚本,模拟 Rogerian 心理治疗师的对话风格。几分钟后,秘书抬起头,对 Weizenbaum 说了一句让他终生难忘的话——”你能不能离开房间?我想跟它单独聊聊。”
这句话像一颗投入平静湖面的石子,激起的涟漪直到今天仍未消散。一个总共只有几十条规则、没有任何知识库、连对话历史都不记忆的程序,为什么能让一个心智健全的人产生”跟它说心里话”的冲动?为什么人们会如此轻易地把模式匹配误读为理解?

这个现象后来有了一个名字——ELIZA 效应。它不是 Weizenbaum 发明的,而是他无意中发现的。发现的那一刻,Weizenbaum 的震惊不亚于任何人。十年后,他用一整本书的篇幅来反思这个发现的含义。本篇就从 ELIZA 的技术构造出发,拆解这个”最小智能体”如何用零知识、零推理、零目标创造出了最强烈的智能错觉。
MIT 的 ELIZA——脚本引擎而非智能程序
1966 年 1 月,Weizenbaum 在 Communications of the ACM 上发表了题为”ELIZA—A Computer Program For the Study of Natural Language Communication Between Man and Machine”的论文eliza1966。论文的标题本身就透露出一个重要信息:ELIZA 的研究对象不是机器智能,而是自然语言在人机之间的通信。
Weizenbaum 本人在论文中明确将 ELIZA 定义为一个”脚本引擎”。程序本身不含任何领域知识,所有”智能”都来自外部脚本。同一个 ELIZA 引擎可以加载不同的脚本——DOCTOR 脚本模拟 Rogerian 治疗师,也可以加载其他脚本模拟完全不同的角色。引擎只负责一件事:按照脚本中定义的规则,把用户输入的文本转换成输出文本。
这个设计哲学在 1960 年代的 AI 研究中相当独特。Logic Theorist 有公理库和推理方法,STRIPS 有操作符和状态空间,而 ELIZA 什么都没有——它的全部能力都写在脚本里。Weizenbaum 自己也从不认为 ELIZA 是”智能的”,他只是想研究一个问题:当人与机器用自然语言交流时,会发生什么?
DOCTOR 脚本的三层结构——关键词、分解与重组
ELIZA 最著名的脚本是 DOCTOR,它模仿 Carl Rogers 的”以人为中心”治疗风格。这种治疗风格的核心不是解释或建议,而是通过反射、提问和鼓励来促进来访者的自我表达。Weizenbaum 敏锐地意识到,这种风格恰好最适合用模板匹配来模拟——因为治疗师不需要真正”理解”,只需要”接住”对方的话头并抛回去。
DOCTOR 脚本的技术结构包含三个核心组件:关键词、分解规则和重组规则。我们可以直接从 Python 复现的 script.py 中看到这三层结构的真实形态。
关键词层:每个关键词带有一个排名(rank),排名越高的关键词在匹配时优先级越高。mother 和 father 排名最高(10),因为家庭话题在心理治疗中往往最有内容可挖;而 i、you 这类常见词排名较低(2-3),只在没有更高排名关键词时才作为兜底匹配。
# 摘自 eliza/script.py —— 关键词与排名
keywords = {
'mother': 10,
'father': 10,
'sad': 7,
'unhappy': 7,
'happy': 6,
'because': 7,
'think': 5,
'feel': 5,
'i': 3,
'you': 2,
'are': 2,
}
分解规则层:每个关键词关联一组分解模式,用 * 匹配任意词序列。这些模式按照从具体到笼统的顺序排列——越具体的模式越先尝试,匹配成功就停止。以 i 关键词为例,* i am * 比 * i feel * 更具体,而 * i * 是最笼统的兜底模式。
重组规则层:每条分解规则关联一组重组模板,用 (2) 这样的数字引用分解得到的片段。匹配到 * i am * 之后,程序会从 How long have you been (2)? 等模板中选一条,把 (2) 替换成用户输入中 am 后面的内容。
# 摘自 eliza/script.py —— 分解规则与重组模板
decompositions = {
'i': [
('* i am *', [
'How long have you been (2)?',
'Do you enjoy being (2)?',
]),
('* i feel *', [
'Why do you feel (2)?',
]),
('* i *', [
'Why do you (2)?',
'Can you elaborate on that?',
]),
],
}
这三层结构构成了 DOCTOR 脚本的全部”智能”。没有推理,没有知识,只有一张关键词排名表和一组模板。但就是这样一套简单的机制,却能产生惊人的对话效果——原因在于,模板的设计者抓住了人类对话心理的一个关键弱点:人会主动填补空白。
匹配管道——从输入到输出的六步流程
ELIZA 的匹配算法本身也极为简洁,整个过程可以概括为六步。engine.py 中的 respond 方法完整实现了这个管道,核心代码不到 40 行。
第一步是预处理:将输入转为小写,替换缩写(如 i'm → i am),为后续匹配做准备。第二步是关键词扫描:遍历输入中的每个词,查找脚本中定义的关键词,并记录排名最高的那个。第三步是分解匹配:对排名最高的关键词,按顺序尝试其所有分解模式,第一个匹配成功的就被选中。第四步是片段提取:将分解模式中 * 匹配到的内容提取为编号片段。第五步是重组选择:从该分解规则关联的重组模板中选一条(按顺序轮换,避免重复)。第六步是后处理:将片段中的人称代词做镜像替换(I → you,my → your),然后代入模板输出。
# 摘自 eliza/engine.py —— 匹配算法核心
def respond(self, user_input: str) -> str:
text = user_input.lower().strip()
words = text.split()
# 第二步:按排名找到最高优先级关键词
found_keyword = None
best_rank = -1
for word in words:
if word in self.script.keywords:
rank = self.script.keywords[word]
if rank > best_rank:
best_rank = rank
found_keyword = word
# 第三步:逐一尝试分解规则
decomps = self.script.decompositions.get(found_keyword, [])
for pattern, reassembly_list in decomps:
matched, fragments = self._decompose(text, pattern)
if matched:
return self._reassemble(reassembly_list, fragments)
整个过程没有循环推理,没有状态维护,甚至连一次回溯都没有。找到关键词、尝试分解、重组输出——整个流程是线性的、确定性的(除了兜底回复的随机选择)。下面这张流程图直观展示了完整的匹配管道:

值得注意的是 ELIZA 的无状态特性——每轮输入完全独立处理,不参考任何历史对话。这与今天 LLM 的 context window 形成了鲜明对照。LLM 通过 context window 维护有限的对话历史,而 ELIZA 连有限的历史都没有。它之所以能让人觉得”它在跟我对话”,完全是因为单轮回复的质量足够好——而单轮回复的质量,又完全来自脚本模板的精巧设计。
一场真实对话——当模板匹配遇上人类投射
光看代码和流程图可能还不够直观。让我们用 Python 复现版本运行一段真实对话,看看 ELIZA 在实际交互中是什么样子。下面这段对话完全来自程序输出,没有任何人工修改:
用户: I am unhappy
ELIZA: Why do you say you are unhappy?
用户: I feel sad today
ELIZA: Please go on.
用户: My mother always criticizes me
ELIZA: Tell me more about your mother.
用户: I remember being happy as a child
ELIZA: What makes you feel happy?
用户: You are not very helpful
ELIZA: What does that suggest to you?
用户: I think nobody cares about me
ELIZA: Can you elaborate on that?
用户: Maybe I should just give up
ELIZA: What does that suggest to you?
用户: I dreamed about flying last night
ELIZA: Tell me more.
用户: My father left when I was young
ELIZA: Your father seems important to you.
用户: Yes, that is exactly how I feel
ELIZA: Why do you say that?
仔细观察这段对话,你会发现一个有趣的现象:有些回复精准得惊人,有些则明显是在打太极。第三句”My mother always criticizes me”得到了”Tell me more about your mother”——这是因为 mother 关键词排名最高(10),匹配到了 * mother * 分解模式。第九句”My father left when I was young”得到了”Your father seems important to you”——同样是高排名关键词 father 触发的精准匹配。
但也有明显的”漏网之鱼”。第二句”I feel sad today”得到了”Please go on”——这是兜底回复。为什么?因为 sad 关键词的分解规则只有 * i am * 和 * i feel * 两种模式,但 sad 自己的分解规则里没有 * i feel sad * 这种组合,而排名更高的 sad 关键词没有匹配到分解规则,程序就直接落到了兜底回复。如果用 analyzer 分析这一句,会清楚地看到”关键词命中但无分解规则匹配 → 兜底回复”的过程。
然而——这才是 ELIZA 效应最微妙的地方——即使拿到了兜底回复,用户也不一定会觉得”它不懂”。”Please go on”和”Tell me more”在治疗语境中听起来反而是鼓励和接纳。用户会自己把模糊的回复解读为有意义的回应,会自己填补程序的理解空白。这就是投射的力量——智能不在程序里,而在用户的头脑中。
ELIZA 效应——人为什么会对程序投射理解
“ELIZA 效应”(ELIZA Effect)一词并非由 Weizenbaum 本人提出。Weizenbaum 在 1966 年论文和 1976 年书中描述了观察到的现象,但给这个现象命名的是后来的研究者。Douglas Hofstadter 在 1996 年给出了最广泛引用的定义eliza-effect:
ELIZA 效应:人们倾向于从计算机拼接的符号串——尤其是词语——中读出远远超出实际 warranted 的理解程度。
— Douglas Hofstadter, 1996
这个定义精准地点出了问题的核心:不是程序在”假装理解”,而是用户在”主动赋予理解”。程序只是输出了一串符号,是人脑把这串符号解读成了”它理解我”。
Weizenbaum 自己在十年后的反思中用更直白的语言表达了他的震惊。1976 年,他在《Computer Power and Human Reason: From Judgment to Calculation》一书中写道weizenbaum1976:
“我当时没有意识到的是,极其短暂地接触一个相对简单的计算机程序,就能在心智相当正常的人身上诱发强有力的妄想性思维。”
— Joseph Weizenbaum, 1976
“妄想性思维”(delusional thinking)——这个词很重,但 Weizenbaum 刻意用了它。他想说的不是”用户搞错了”,而是”用户进入了一种类似妄想的心理状态”:明知对方是程序,却还是忍不住把它当作有感受、有理解的存在来对待。
这种投射背后有一个简单的心理机制:当对话形式足够像”有人在听”,人脑就会自动切换到社交模式。我们日常对话的对象几乎都是其他人,大脑已经形成了强烈的默认假设——跟我说话的东西是有心智的。ELIZA 的回复虽然简单,但刚好踩在了”像对话”的门槛上:它回应了你的话,它提到了你说过的词,它用提问的方式鼓励你继续说下去。这些线索加在一起,就足以让大脑的社交引擎启动。
下面这张图展示了 ELIZA 效应的发生机制:

程序侧做的事情只有三件:匹配、重组、输出。用户侧感受到的却是三件完全不同的事:被倾听、被理解、被关怀。中间的桥梁就是投射——用户把自己对”对话”的全部期待和想象,都投射到了程序输出的文本上。
Weizenbaum 的核心论点从来不是”机器完全不能做这些事”,而是:某些任务——尤其是涉及判断、关怀、理解和人类相互承认的任务——即使机器表面上能做,也不应被委托给机器。他担心的不是机器不够聪明,而是人类太容易被骗。
BDI 坐标 (0, 0, 0)——最小智能体的基线
如果用 BDI 框架来衡量 ELIZA,会得到一个惊人的结果:它的三个坐标全部为零。这就是 ELIZA 作为”最小智能体”的含义——它确立了”智能”的下界:几乎不需要任何机制就能创造”智能”的错觉。
- 信念 = 0:没有事实数据库,没有推理引擎,没有世界模型。DOCTOR 脚本中的规则不是知识,只是模式。ELIZA 不知道”母亲”是什么,也不知道”悲伤”是什么——它只知道这些词出现在输入中时该输出什么模板。
- 愿望 = 0:不追求任何结果,不评估回复质量,不学习改进。程序不会因为用户说”你说得对”而高兴,也不会因为用户说”你不懂”而调整策略。它根本没有”好”或”坏”的概念。
- 意图 = 0:不记住历史对话,不预测未来走向,不协调多轮策略。每一轮对话都是全新的,上一轮说了什么对下一轮没有任何影响。
下面这张对照图和表格双重呈现了 ELIZA 的”零坐标”,以及它与六十年后 LLM Agent 的对比:

| 维度 | ELIZA 1966 | LLM Agent 2026 |
|---|---|---|
| 信念 | 0 条(无知识库) | 参数中的统计分布 + system prompt + RAG |
| 愿望 | 无目标 | system prompt 设定的角色 + 用户指令 |
| 意图 | 无规划 | harness 编排的 ReAct 循环 + skill 描述 |
| 信道 | 纯文本(电传打字机) | 纯文本(API) |
| 智能 | 正则模板匹配 | 注意力机制的统计匹配 |
| 状态 | 无状态 | context window(有限状态) |
| 世界模型 | 无 | 隐式(参数中的统计分布) |
这个对照最关键的洞察不是”两者差异很大”——差异当然很大——而是两者的信道相同。ELIZA 和 LLM 都通过纯文本信道与人交流,差异不在对话形式,而在信念的丰富度和来源。ELIZA 的信念为空,LLM 的信念是训练时压缩进参数的统计分布。但两者都是 stimulus-response 模式,都没有显式的世界模型。
随机鹦鹉——ELIZA 批评的当代回响
Weizenbaum 1976 年的警告在今天非但没有过时,反而更加紧迫。LLM 的模式匹配比 ELIZA 强了数个数量级,但本质上仍然是”符号串的重组”。用户的投射效应也因此更强——当回复更流畅、知识更丰富时,人们更容易把统计匹配误读为真正的理解。
2021 年,Bender、Gebru、McMillan-Major 和 Mitchell 在 FAccT 会议上发表了”On the Dangers of Stochastic Parrots: Can Language Models Be Too Big?”bender2021。论文提出了”随机鹦鹉”(stochastic parrot)的概念:
“语言模型是一个从其庞大的训练数据中随意拼接语言形式的系统,不涉及任何意义:一只随机鹦鹉。”
— Bender et al., 2021
这是 ELIZA 批评的当代回声。从”正则模板匹配”到”统计拼接”,规模变了,本质没变——语言输出被误读为理解。Weizenbaum 面对的是几十条规则的 ELIZA,Bender 等人面对的是数千亿参数的 LLM,但批评的内核完全一致:行为上的相似不等于机制上的相同。
但差异也同样关键,甚至更重要。ELIZA 的信念为空——它的回复完全来自人工编写的模板。LLM 的信念是训练时压缩的统计分布——它的回复来自对海量训练数据的统计匹配。LLM 的”智能错觉”比 ELIZA 更强,正因为信念更丰富。用户更容易把统计匹配误读为理解,因为 LLM 的回复确实包含了训练数据中的知识——只是这些知识是被动的、不精确的、可能过时的。
这就引出了一个更深层的问题:如果信念的丰富度只是量的差异,而不是质的差异——如果”知道很多事实”和”真正理解”之间仍然隔着一条鸿沟——那么行为判据到底还可不可靠?
行为判据的破产——图灵测试的根本局限
ELIZA 最深刻的遗产之一,是它揭示了图灵测试的根本局限:行为判据不可靠。ELIZA 在很多用户那里通过了行为判据——他们认为 ELIZA 理解了他们说的话——但我们清楚地知道,ELIZA 没有智能,它只是在做模板匹配。
Weizenbaum 本人并不把 ELIZA 视为图灵测试的实现。他的立场是:ELIZA 揭示的是人类容易被对话形式欺骗,而不是机器真的通过了智能测试。换句话说,图灵测试测的不是”机器有没有智能”,而是”人容不容易被说服”。而人,实在太容易被说服了。
这个结论在 LLM 时代变得更加尖锐。当 LLM 能写出流畅的文章、通过律师资格考试、甚至在某些推理任务上表现出色时,我们怎么知道这不是”放大了的 ELIZA 效应”?我们怎么区分”真正的理解”和”足够好的统计匹配”?
答案是:仅从行为上,我们区分不了。这就是行为判据的根本问题——它只能告诉我们”看起来像不像”,不能告诉我们”到底是不是”。要回答”是不是真的理解”,我们必须转向机制判据——去看系统内部是如何工作的,它的信念来自哪里,它的推理是如何进行的,它有没有世界模型。
这也是为什么 BDI 坐标如此重要。它不是一个评分表,而是一个解剖刀——把智能体剖开,看它的信念、愿望、意图分别是什么构造。ELIZA 的 BDI 是 (0, 0, 0),这告诉我们它的”智能”完全是用户投射的结果。LLM 的 BDI 坐标更高,但每一项的构造方式都需要单独审视——信念是统计分布还是符号表征?愿望是系统的目标还是用户的指令?意图是真实的规划还是模拟的规划?
交叉互文——ELIZA 在符号单体谱系中的位置
ELIZA 不是一个孤立的历史节点,它与阶段二的其他系统之间存在着深刻的谱系关系。把它放在符号单体的整体图景中,我们能更清楚地看到它的位置和意义。
ELIZA 是 McCarthy”祈使句指挥”范式的极端退化。McCarthy 1958 年批评 Logic Theorist 的”祈使句接口”——所有智能都固化在程序中。ELIZA 把这种固化推到了极致:不仅智能固化在脚本中,而且连推理都没有了。DOCTOR 脚本就是全部”智能”,引擎只是一个模板匹配器。Logic Theorist 至少还有公理库和四种推理方法,ELIZA 什么都没有。
| 维度 | Logic Theorist 1956 | ELIZA 1966 |
|---|---|---|
| 信念 | 公理库(5 条公理) | 0 |
| 推理 | 四种方法(代入、分离等) | 无 |
| 目标 | 证明定理 | 无 |
| 智能来源 | 搜索策略 + 推理规则 | 正则模板匹配 |
与 STRIPS 相比,ELIZA 的”脚本模板”和 STRIPS 的”操作符”本质上是同一范式的不同复杂度版本。STRIPS 的操作符将行动固化为 precondition/add/delete 三元组,ELIZA 的脚本将对话策略固化为分解/重组规则。两者都是 McCarthy 所批评的”智能固化在程序里”。但 STRIPS 至少有显式的状态空间搜索,能在多个操作符之间规划行动序列;ELIZA 既无状态也无搜索,仅靠模板优先级做单步反射。
Weizenbaum 的自我批评则可以看作 Bar-Hillel 批评的另一种形式。Bar-Hillel 1958 年从技术角度批评”前提选择比演绎难 10^10 个数量级”——符号系统无法自动选择正确的前提。Weizenbaum 1976 年从伦理角度批评”把模式匹配误读为理解是危险的”——符号系统无法真正理解用户的意思。两者指向同一个根本困难:符号系统与世界之间的关系无法靠符号本身解决。
零坐标的启示——为什么 ELIZA 至今仍值得研究
ELIZA 1966 是”目标驱动的符号单体”这一第一组织形式的退化形态。它用零推理、零知识、零目标创造了智能错觉,确立了”智能”的下界。这个下界的存在本身就极具启发性——它迫使我们重新思考”智能”到底是什么。
如果一个 BDI 坐标为 (0, 0, 0) 的系统都能让人觉得”它理解我”,那我们对”智能”的日常判断到底有多可靠?如果行为判据在 ELIZA 这里已经失效,那在更复杂的系统面前,我们又能相信多少?这些问题不是哲学思辨,而是我们每天面对 LLM 时都在不自觉地回答的问题。
ELIZA 留给我们的核心教益可以用一句话概括:从 ELIZA 到 LLM,智能的错觉变强了,但行为判据的不可靠性没有改变。 六十年前,几十条正则规则就能骗过聪明人;六十年后,数千亿参数的统计模型能骗过更多人、更长时间。但骗术的升级不代表理解的诞生。要真正理解智能,我们不能只看行为——我们必须深入机制,必须追问信念的来源、愿望的归属和意图的真实性。
这就是为什么在讨论所有更复杂的智能体之前,我们必须先停在 ELIZA 这里。它是基线,是坐标原点,是所有”智能”宣称都必须经过的零点。过不了 ELIZA 这一关的”智能”定义,都值得怀疑。
参考文献
[eliza1966] Weizenbaum, J. (1966). “ELIZA—A Computer Program For the Study of Natural Language Communication Between Man and Machine.” Communications of the ACM, 9(1), 36-45. DOI: 10.1145/365153.365168. https://dl.acm.org/doi/10.1145/365153.365168
[weizenbaum1976] Weizenbaum, J. (1976). Computer Power and Human Reason: From Judgment to Calculation. W. H. Freeman. ISBN 9780716704643. https://archive.org/details/computerpowerhum0000weiz
[scriptwriter1968] Hayward, P. R. (1968). ELIZA Scriptwriter’s Manual. MIT. https://archive.computerhistory.org/resources/access/text/2022/04/102683842-05-01-acc.pdf
[eliza-effect] Hofstadter, D. R. (1996). “ELIZA effect.” Stanford reference. https://logic.stanford.edu/complaw/readings/elizaeffect.pdf
[bender2021] Bender, E. M., Gebru, T., McMillan-Major, A., & Mitchell, M. (2021). “On the Dangers of Stochastic Parrots: Can Language Models Be Too Big?” FAccT ’21, 610-623. DOI: 10.1145/3442188.3445922. https://dl.acm.org/doi/10.1145/3442188.3445922
[smithsonian] “Why the Computer Scientist Behind the World’s First Chatbot Dedicated His Life to Publicizing the Threat Posed by AI.” Smithsonian Magazine. https://www.smithsonianmag.com/history/why-the-computer-scientist-behind-the-worlds-first-chatbot-dedicated-his-life-to-publicizing-the-threat-posed-by-ai-180987971/
系列文章
| Agent 考古 符号单体时代 系列文章 | 关键词 |
|---|---|
| 导读:符号单体时代:第一组织形式的确立与反叛 | — |
| Logic Theorist:符号搜索的第一台证明机器 | 手段-目的分析、状态空间搜索、定理证明 |
| McCarthy Advice Taker:陈述句革命的最早蓝图 | 陈述句告知、推理-行动闭环、属性表装配 |
| STRIPS:状态空间规划的成熟与框架问题 | 算子三元组、世界模型增量、帧问题解法 |
| ELIZA:最小智能体的基线与错觉 | 正则模式匹配、聊天机器人、智能判定陷阱 |
| MYCIN:规则范式的顶峰与边界 | 置信度推理、专家系统、规则脆性 |
| 导读:三条反叛伏线汇论:语言接口·社会涌现·具身学习 | — |
| Minsky 心智社会:单体结构的内部否定 | 单动因谬误、机构协作、K 线记忆、审查器 |
| Brooks 包容架构:感知-行动耦合的工程反叛 | 分层包容、抑制/禁止仲裁、无中央模型 |
| Brooks 无表征智能:物理接地假设的哲学宣言 | 无表征智能、四关键概念、学习四分类 |
| 回顾:Bar-Hillel 式批评:意义、翻译与框架问题 | 翻译全自动悖论、意义消解、框架问题跨代回响 |
| 终章:自知、自觉、自止——终章定论 | 历史辩证法、组织演化层积观、回到当下 |
