为什么ChatGPT能用Python编程却玩不了井字棋

Why ChatGPT Can Code in Python but Can't Play Tic-Tac-Toe

这听起来像个笑话:一个人工智能能通过律师资格考试,几秒钟内就能写出一个可用的网页爬虫Python脚本,还能模仿莎士比亚风格创作十四行诗……却在井字棋游戏中经常输给五岁的孩子。

但如果你曾尝试与ChatGPT这样的大型语言模型玩过简单的井字棋游戏,你很可能亲眼目睹过这种怪异现象。不出三四步,这个本应聪明绝顶的人工智能就会自信地把“O”放在你的“X”上面,在棋盘上凭空创造出一个新角落,或者压根没注意到你两步前就已经赢了。

为什么一个掌握人类知识总和的实体,会在一个仅有255,168种可能结果的游戏中举步维艰?答案在于人脑与神经网络感知现实方式之间那迷人而根本性的差异。


“聪明”玩家的幻觉

要理解这个故障,我们首先需要看看当你向人工智能发起游戏挑战时会发生什么。如果你输入“我们来玩井字棋。我先走。我在中间格子放X”,人工智能通常会给出格式完美、礼貌的回应,甚至可能为你绘制一个ASCII艺术棋盘。

但随着游戏进行,情况就开始失控。人工智能表现出研究人员所说的空间推理缺陷。它可能会说:

“好棋!我将在右上角放置我的‘O’。”

……同时却呈现出一个棋盘,其“O”被莫名其妙地放在左下角。或者更糟的是,它会试图占据你已经占领的格子。这不是作弊;这是彻底的困惑。


为什么井字棋能“击溃”AI大脑

要理解为什么会发生这种情况,我们必须深入了解大型语言模型的运作机制。

1. 一维与二维问题(世界是字符串)

当你我看着井字棋棋盘时,我们看到的是一个二维网格。我们瞬间理解空间关系:上下、左右、对角线。

大型语言模型没有眼睛,也没有“心智画布”。它只能将世界理解为一维的、连续的文本字符串。

当人工智能绘制棋盘时,它不是在画图。它是在生成一系列字符、换行符和空格。对人工智能来说,棋盘看起来是这样的:
X | - | - n - | O | - n - | - | X

要判断自己是否对角线获胜,它必须纯粹通过计算不同文本行的字符数量来神奇地推断空间几何关系。对于一个文本预测引擎来说,这在计算上是反直觉的。

2. 分词化陷阱

正如我们在上一篇关于《AI计数悖论》的文章中所讨论的,大型语言模型不读单词或字母;它们读的是“分词”。

当棋盘状态改变时,棋盘的分词表示会完全改变。人工智能并非在“看”棋盘并移动棋子;它是在试图计算基于先前棋盘状态的文本字符,接下来最可能出现的文本字符的统计概率。由于一个未完成的井字棋棋盘在互联网上并非常见的文本字符串,模型的预测引擎开始产生幻觉。

3. 金鱼记忆(缺乏真实状态)

当你玩游戏时,你会在脑海中持续记录棋盘状态。大型语言模型没有游戏状态的持久“记忆”。

每次你发送新的提示时,人工智能都必须重新读取整个聊天历史,重新处理棋盘状态的文本字符串,并试图从头推断正在发生什么。这就像玩一个游戏,在每一步棋之前,你都会完全失忆,必须通过阅读过去五分钟的文字记录来推断规则和当前状态。


那么,为什么Python编程更容易?

如果井字棋这么难,为什么编写Python脚本却如此容易?

这归结于语法与状态的区别。编程语言完全是线性和基于文本的——这正是大型语言模型被构建来掌握的东西。

  • 文本中的逻辑:代码由语法规则高度结构化,这些规则完美地转换为一维分词。
  • 训练数据:互联网包含数十亿行代码。在人工智能的训练数据中,可运行的Python函数示例远多于未完成井字棋游戏的ASCII艺术文本记录。

当ChatGPT编写Python代码时,它是基于海量数据预测最符合逻辑的下一行文本。而当它玩井字棋时,它被迫使用一个文本预测引擎来模拟一个二维空间物理引擎——用一件工具去做它从未被设计来完成的工作。


井字棋悖论是一个绝佳的提醒,让我们看清人工智能究竟是什么。它不是一种人工人类智能;它是一种异质智能。它的底层运作原理与生物大脑完全不同。

下次当你惊叹于人工智能撰写复杂文章时,不妨让它玩一局四子棋。这是一个绝佳的提醒,让我们脚踏实地:尽管人工智能无比强大,但人脑仍然能做某些万亿参数代码无法做到的事情。