[Agent 考古] 秘书要求他离开房间——一个程序为什么让人想跟它说心里话

Blog

系列名称[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),排名越高的关键词在匹配时优先级越高。motherfather 排名最高(10),因为家庭话题在心理治疗中往往最有内容可挖;而 iyou 这类常见词排名较低(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'mi am),为后续匹配做准备。第二步是关键词扫描:遍历输入中的每个词,查找脚本中定义的关键词,并记录排名最高的那个。第三步是分解匹配:对排名最高的关键词,按顺序尝试其所有分解模式,第一个匹配成功的就被选中。第四步是片段提取:将分解模式中 * 匹配到的内容提取为编号片段。第五步是重组选择:从该分解规则关联的重组模板中选一条(按顺序轮换,避免重复)。第六步是后处理:将片段中的人称代词做镜像替换(Iyoumyyour),然后代入模板输出。

# 摘自 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 1966LLM 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 1956ELIZA 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 式批评:意义、翻译与框架问题翻译全自动悖论、意义消解、框架问题跨代回响
终章:自知、自觉、自止——终章定论历史辩证法、组织演化层积观、回到当下

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注