「AI 会下棋」这件事,早在 ChatGPT 之前二十年就被验证过了:1997 年深蓝赢下卡斯帕罗夫,是人类第一次在顶级智力项目上输给程序。但绝大多数人「知道」这段历史,却说不清那个赢棋的程序脑子里到底装着什么——它是怎么搜索的?凭什么敢走出这一步?和今天的大模型是一回事吗?
Sebastian Lague 的这条《Coding Adventure: Chess》是目前把这个问题讲得最透的一条视频:他不复述历史,而是现场从零写一个会下国际象棋的程序,让你亲眼看着它从「连规则都走不对」一步步进化到「能赢中等级别的网络机器人」。全程十来分钟,信息密度极高,是这个频道播放量最高的作品之一,也是编程可视化领域被反复引用的常青课。本文带你把这堂课完整吸收:视频讲了什么、每一步背后的理论源头在哪、哪些地方需要打折扣,以及这套思维怎么用到下棋之外的地方。看过视频的人能多懂一层,没看过的人,等于看完了。
| 项目 | 内容 |
|---|---|
| 视频标题 | Coding Adventure: Chess(编程历险:国际象棋) |
| 频道 | Sebastian Lague(编程可视化领域知名独立开发者频道) |
| 发布时间 | 2023 年 3 月(据频道页面) |
| 时长 | 约 18 分钟 |
| 播放量 | 数百万量级,是该频道头部作品之一(据频道页面,精确数字以频道页为准) |
| 核心主题 | 从零实现一个国际象棋引擎:走子生成 → 极小极大搜索 → α-β 剪枝 → 评估函数 → 与网络机器人实战 |
| 视频链接 | https://www.youtube.com/watch?v=l-hh51nc7D4 |
编辑注:本轮编辑端实时抓取受限,以上日期与热度为历史公开数据之约数,精确信息以频道页面为准。选题依据其长年「常青爆款」属性与社区持续引用度。
视频开场没有任何情怀铺垫,直接进入工程现实:要让程序下棋,第一步是让它理解棋盘——棋子在哪、怎么走、什么算合法。Lague 用一张二维数组表示棋盘,然后写「走子生成」:兵怎么斜吃、马怎么跳日、王车易位有什么条件。这一段最容易让观众意外的是,纯粹的规则实现就暗藏大量坑:兵到底能不能越过棋子、被将军时哪些走法作废、易位路上能不能有敌子威胁——他把自己的实现 bug 也留在了片子里,这正是这条视频的诚实之处:编程历险系列的核心卖点不是「看大神碾压」,而是「看一个真实的人怎么在错误里爬行」。
(延伸分析)这一幕其实是全片的隐喻:人类觉得「下棋规则」是天经地义的直觉,对程序来说却是最琐碎、最容易出错的部分。AI 工程的第一课永远是「把常识形式化」,而这恰恰是近三十年 AI 研究反复撞墙的地方——从专家系统的溃败到大模型的成功,故事的主线都是「怎么少写一点手工规则」。
写好走子规则后,最自然的想法呼之欲出:把所有可能的走法往下推演,谁的局面好就选谁。视频里 Lague 真的这么做了,然后屏幕上的数字开始失控:自己有 20 种走法,对手也有约 20 种应对,往下看 2 步就是约 400 种局面,看 4 步是十几万,看 6 步是数千万。他想往下多看几层,程序直接卡住。
这个现象在计算机科学里有正式名字:组合爆炸。国际象棋的平均分支因子约 35,一局棋的完整变化数,香农在 1950 年的论文里估算约为 10^120——这个数字大到什么程度?可观测宇宙里的原子总数约 10^80,把每个原子都变成一台超级计算机,从宇宙大爆炸算到今天,也远远遍历不完。国际象棋从未被「穷举解法」,原因就在这。(顺带一提:规则更简单的国际跳 Checkers 倒是 2007 年被加拿大团队正式解算完了——Schaeffer 等人发表在《科学》上的《Checkers is Solved》——结论是双方最优则必和。)
(延伸分析)这一幕的价值在于它让你「亲眼看见」复杂度的恐怖。P 与 NP、指数增长为什么可怕、为什么所有棋类 AI 的历史都是一部「逃避穷举史」——十分钟的动画比一节课的理论更让人记住:暴力永远是对的答案,但永远不是可用的答案。
穷举不行,视频给出第一个真正的武器:极小极大搜索(Minimax)。思想一句话就能说清:往下看 N 步,我走时选对我评分最高的,轮到对手时假设他选对我评分最低的——在「假设对手完美」的前提下找最优解。
这个假设看似保守,实则是整个框架的灵魂:只有在「对手最强」的模型下算出来的策略,才不会被对手的妙手打崩。它背后是一条 1913 年就证明了的数学定理——策梅洛(Ernst Zermelo)用集合论研究国际象棋,指出这类完全信息二人博弈中,先手必胜、后手必胜或双方必和三者必居其一;1928 年冯·诺伊曼证明的极小极大定理,则把这个直觉变成了博弈论的基石。更动人的是历史细节:1940 年代末,图灵在没有计算机的情况下手写了史上第一个下棋程序 Turochamp,只能靠纸笔一步步模拟,图灵甚至用它和同事对弈过——极小极大下棋,比计算机本身还古老。
(延伸分析)「假设对手最强」的框架值得每个人收藏。它其实是一种通用的保守决策学:做最坏情况规划、安全工程的「威胁建模」、乃至博弈谈判中的底线思维,骨架全是极小极大。它的代价同样清晰——你被迫为对手根本不会犯的错付代价,所以它慢。后两幕的进化史,就是一部「怎么在这种保守里偷回速度」的历史。
光有极小极大还是太慢,视频给出第二个武器,也是全片技术含量最高的一段:α-β 剪枝(Alpha-Beta Pruning)。核心洞察是:搜索过程中,某些分支的结果已经不影响最终决策——比如你已经找到一个能吃掉对方车的好棋,再往下算发现某条线最多保住一个马,这条线就没有任何继续算的价值,可以直接剪掉。
α 和 β 就是两条动态维护的「边界」:α 记录我方目前能保证的下限,β 记录对手允许的上限,一旦两者相遇(β ≤ α),说明这个分支无论怎么发展都改变不了局面,立即停止搜索。剪枝不改变结论——这是它最优雅的地方——它只是拒绝重复劳动,决策结果和全搜一遍完全一致。
这段历史也值得记一笔:这个想法通常被追溯到约翰·麦卡锡 1956 年的提议(克努特与摩尔 1975 年的著名分析论文《An Analysis of Alpha-Beta Pruning》记录了这段源流),西蒙与纽厄尔团队在同一年代的国际象棋程序里也独立用上了类似剪枝。克努特与摩尔证明了它的理论上限:在走法排序理想的情况下,需要评估的局面数从全搜索的 b^d 量级降到约 b^(d/2)——等效于同样的计算量,能多看一倍的深度。等效分支因子从 35 压到 6 左右,这就是「能算」和「不能算」之间的鸿沟。
视频诚实地展示了 α-β 的软肋:理论上的平方根加速有前提——每层先看的恰好是最强的走法。如果运气差,先搜的全是废棋,剪枝几乎失效。所以引擎的第一件事不是搜索本身,而是给走法排序:吃子的优先(尤其是「用便宜子吃贵子」)、将军的优先、升变的优先。视频里 Lague 加上简单排序后,同样时间内能搜索的深度立刻上了一个台阶。
(延伸分析)这一幕的隐喻价值超过技术价值:剪枝的收益不来自「算得快」,而来自「先看重要的事」。搜索顺序这个看似工程细节的东西,决定了剪枝是理论上的平方根还是实际上的原地踏步。这个模式到处都是:代码审查先看最可能出错的模块、排查故障先查最近变更、投资尽调先看现金流——高手和普通人的区别,往往不是计算总量,而是「先算什么」。
搜索树再漂亮,落到叶子节点总要回答一个问题:这个局面到底谁好、好多少?这就是评估函数的职责。视频里的实现是国际象棋编程的标准入门配方:子力价值(兵 1 分、马和象 3 分、车 5 分、后 9 分)加上位置分表——同样是兵,中路兵加一点分,王在开局躲角落、残局走出来,每种棋子一张 64 格的分数表,把「控制中心」「王的安全」这类棋手口中的「棋感」变成可加总的数字。
(延伸分析)这一幕是全片最值得细品的哲学时刻:所谓「棋感」,被拆解成了几十个数字的加权和。这正是经典 AI 的本质——把专家的直觉编译成特征。它奏效了七十年,也从反面定义了它的天花板:特征是人类写的,棋感里那些「说不清但真实存在」的东西就永远漏在外面。这个天花板,正是最后一幕的主角。
视频的收尾是实战:Lague 把自己的引擎拉到 Lichess(全球最大的开源国象平台)上和机器人从小分段一路往上打,胜率随着搜索深度和评估函数的改进肉眼可见地爬升。引擎每秒评估的局面数、能看透的回合数,直接兑换成了棋力——这段是全片最有「工程爽感」的部分:你亲眼看着刚才还只是动画里的概念,变成了一场一场真刀真枪的胜利。
但视频也止步于此,而这恰恰是理解棋类 AI 的关键分水岭:Lague 式引擎是「经典搜索」的教科书形态,而今天统治国际象棋的 Stockfish 是同一个骨架上的极限工程——几十年的微调之外,2020 年它引入了源自将棋社区的 NNUE 技术(Efficiently Updatable Neural Network,那须悠 2018 年提出):用一个小而快的神经网络替代手工评估函数,但仍然嵌入在 α-β 搜索的骨架里。另一边,DeepMind 的 AlphaZero(Silver 等人,2018 年发表于《科学》)则走了另一条路:完全不用人类棋谱和手工特征,靠自我对弈训练出网络,再用它引导蒙特卡洛树搜索。经典搜索与学习式评估的分野、谁效率更高,至今仍是棋类 AI 研究的核心张力——这条视频给出的,正是理解这场对话所需的全部底层词汇。
这条视频的每一个环节,背后都站着真实的历史与文献:
站得住的部分:走子生成、极小极大、α-β、走法排序、评估函数这条主线,就是七十年来所有棋类引擎的公共骨架,每一环都有文献可考;视频对「剪枝不改变结论」「排序决定剪枝效率」的呈现也是准确的。
要打折扣的部分有三处。其一,作为教学实现,它的工程完备度有限:没有置换表(transposition table)、空着裁剪、开局库和残局表库——这些是现代引擎的标配,缺了它们,棋力天花板比真正的 Stockfish 低几个大段。把它当成「引擎原理入门」完全合格,当成「现代引擎揭秘」则会严重低估工程复杂度。其二,「α-β 让计算量开平方」是理想排序下的理论上限,视频演示的简单排序远达不到这个上限——初学者若照搬这个数字预期性能,会失望。其三,视频止步于经典搜索,未提 NNUE 与 AlphaZero;如果你只看这一条视频,容易误以为「棋类 AI = 手工评估加剪枝」至今仍是全部真相——实际上手工特征派与学习评估派的混战才是过去五年的主线。另外顺带澄清一个常见误读:2017 年 AlphaZero 对 Stockfish 8 的百局测试赛(155 胜 6 负)当时被广泛简化成「AI 碾压最强引擎」,但 Stockfish 团队指出该测试版本偏旧、未使用开局库与残局库、且硬件条件不对等;后续几年 Stockfish 引入 NNUE 后,两类范式在实际棋力上的差距已远没有当年标题写的那么戏剧化。「神课」也有叙事取舍,知道它没讲什么,才算真正看完。
一、把极小极大当成通用决策模板。 「先假设对手最强,再找自己的最优」不只属于棋盘:做系统的威胁建模、做应急预案、谈判前推演对方底线,用的都是同一个骨架。下次做重要决策时,试着把「对方会怎么最大化伤害我」显式写下来——这一步能把多数「我觉得没事」的盲区提前引爆。
二、优先级就是你的走法排序。 视频里最容易被略过、却最有复用价值的一幕:剪枝的威力完全取决于先看哪条分支。日常工作的等价物是——排查故障先看最近改动,读代码先读主干流程,做汇报先说结论。你的产出上限不是总计算量,而是「先算什么」。
三、想动手,路径是现成的。 先看懂这条视频,再去 chessprogramming.org 的维基从 Bitboards 或「Evaluation Function」词条任选一头深入;想读代码,Lague 按惯例开源了视频配套工程,Stockfish 则是终极参考——从几百行到几十万行之间,隔着的就是从「看懂原理」到「理解工程」的那条路。
flowchart TD
A["让程序认识棋盘<br/>走子生成"] --> B["暴力穷举全部变化<br/>指数爆炸"]
B --> C["极小极大搜索<br/>假设对手最强"]
C --> D["α-β剪枝<br/>拒绝无关分支"]
C --> E["评估函数<br/>把棋感变数字"]
D --> F["走法排序<br/>剪枝提速的前提"]
F --> G["实战引擎<br/>每秒评估海量局面"]
E --> G
G --> H["现代天花板<br/>NNUE与自对弈"]
H --> I["可迁移思维<br/>搜索与评估的分工"]
这条视频用十八分钟把「AI 会下棋」从一句新闻翻译成了一台拆开给你看的机器:穷举是幻觉,搜索是骨架,评估是灵魂,剪枝是效率,排序是效率的前提——而看懂这台机器的最好方式,永远是亲手把它造一遍。
注:文中播放量等平台数据未能实时核实,以频道页面为准;深蓝算力、香农数、Elo 分数等为公开文献广泛引用的历史数据。
本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵爱卫生(微信ID: gprshome201101)维护,聚焦5G/6G核心网、3GPP标准解读、通信前沿技术深度分析。 出版作品有《5G核心网原理与实践》《IMS原理与实践》等4本通信专业书籍。知识星球「51学通信」提供深度技术答疑和行业洞察。
[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。
