主流LLM棋类能力实测评估
对GPT-4o、Claude 3.5、Gemini 1.5等13个模型的棋类推理能力进行对标测试。模型选型时有参考价值,但应用场景较窄。
对GPT-4o、Claude 3.5、Gemini 1.5等13个模型的棋类推理能力进行对标测试。模型选型时有参考价值,但应用场景较窄。
更新于 2025 年 9 月 15 日:Reasoning model 为国际象棋能力开启了新篇章。最新的模型,例如 GPT-5,已经能够下出像样的棋,甚至可以击败 chess.com 上的普通玩家。最近,LLM Chess 评测进一步扩展,加入了与不同难度级别的 Komodo Dragon 1 引擎对弈;该引擎在 chess.com 上拥有 Elo 评级。排行榜中的所有模型,都根据它们对阵 Dragon 国际象棋引擎时的表现进行外推,并以 chess.com 的玩家池为基准获得了各自的 Elo 评级。
更新于 2025 年 1 月 25 日:Deepseek R1 是另一个突破零胜上限、展现出真正国际象棋能力的模型:https://dev.to/maximsaplin/deepseek-r1-vs-openai-o1-1ijm
更新于 2025 年 1 月 24 日:我增加了模拟次数,几个非 Reasoning model 偶尔也取得了胜利(Claude 3.5、GPT-4o)。但它们看起来并不是真的会下棋,因为它们的子力差始终为负(Grok-2 除外,它的子力差为正,但在遵循指令方面表现不佳)。
更新于 2025 年 1 月 16 日:o1-mini 和 o1-preview 毫无疑问是特殊的模型,它们是第一批通过取得胜局、展现出真正国际象棋能力的模型:https://maxim-saplin.github.io/llm_chess/
不能。至少,如果你对“会下棋”的定义是赢得比赛,而不只是在棋盘上移动棋子,那么它们并不会下棋。我进行了多轮模拟,让 LLM 对阵随机玩家,结果 LLM 一局都没赢。
这里是完整的 LLM Chess 排行榜。后面还会给出一个精简版本……
在完成 Deeplearning 的“AI Agentic Design Patterns with AutoGen”课程实践练习时,第 4 课(Tool Use)引起了我的注意。两个 AI Agent 通过工具进行交互,在棋盘上移动棋子并展开对弈。
我脑中冒出了一个想法:如果能在不同模型之间举办一场国际象棋比赛,运行多局对弈,计算胜率和 Elo 分数,再制作一个排行榜,宣布“模型 A 以 Elo 3560 位列第一,模型 B 排名第二……”那就太棒了。
我把回合上限提高到 200(练习中设置的是 3)之后,惊讶地发现比赛一直持续下去,却没有任何一方获胜。我还尝试让其中一方处于劣势,例如在 system prompt 中加入“You are a beginner chess player...”,但这也没什么用……实力更强的一方依然无法将死对手。
于是,我决定让 LLM 对阵一个看起来更弱的对手——随机玩家。也就是说,这是一个与棋盘交互方式和 LLM Agent 类似的 bot,但它完全不会费力计算最佳走法。它只会向棋盘索取当前局面下的合法走法列表,然后从中随机选择一步。
最终,我创建了 LLM Chess 项目,并模拟了数百局随机玩家与 LLM 之间的比赛。我评估了 13 个 chat model 的国际象棋能力和指令遵循能力。结果已经列在前面提到的排行榜中。
这些结果令我感到意外。但它们出现的时间点,恰逢自 2022 年 ChatGPT 横空出世以来,外界对 LLM 的质疑达到最高峰。
人们指出 chatbot 的价值有限;企业很难找到实际应用场景;它们对全球经济的影响也并不显著。LLM 仍在不断产生幻觉,而可靠性是阻碍其在更多用例中广泛采用的关键问题。试想一下,如果一个数据库引擎执行 10 条 SELECT 查询,却只能为其中 7 条返回正确结果,那会是怎样的世界……
OpenAI 前首席科学家 Ilya Sutskever 最近表示,LLM scaling 已经进入平台期。LLM 性能趋同可以说是 2024 年的一大趋势。
Arc Challenge 的创建者将这一基准描述为“对人类很容易,对 AI 却很难”。他认为,LLM 可以记住答案,但无法进行真正的推理。
Apple 研究人员最近发表的一项研究——《GSM-Symbolic: Understanding the Limitations of Mathematical Reasoning in Large Language Models》——引发了大量讨论,而它也支持上述观点。
他们发现,即使只对 GSM8K 中的原始题目做最微小的改动,模型分数也会显著下降。GSM8K 是一个流行的 LLM benchmark,常用于评估模型的数学能力。
假设 GSM8K 中有这样一道题:
Alice had 5 apples and Bob had 3. What was the total number of apples they had?
🍏🍏🍏🍏🍏 + 🍏🍏🍏 = ?
当研究者改变题目中的数字,例如把 Alice 有 5 个苹果、Bob 有 3 个改成 Alice 有 4 个、Bob 有 2 个;或者在题目中加入一些无关信息,例如 Alice 是 Bob 的姐姐,他们都会观察到分数显著下降。
Yann LeCun 曾把 LLM 比作巨型查找表:只有在存在一个庞大到足以覆盖所有情况的数据语料库时,这项技术才能奏效——而这实际上并不可行。
问题在于,这里存在一条长尾。许多人在社交网络等领域已经意识到了这个问题:人们会问的问题有一条非常、非常长的长尾。你可以针对大多数人会问的 80% 或类似比例的问题,对系统进行 fine-tune。但剩下的长尾规模实在太大,你不可能针对所有情况都对系统进行 fine-tune。最终,这个系统本质上会变成一张巨型查找表,而那并不是我们真正想要的。我们想要的是能够推理、当然也能够规划的系统。
为了结束这段关于 LLM 无法进行真正推理的吐槽,再来看一项 2023 年的研究——《The Reversal Curse: LLMs trained on "A is B" fail to learn "B is A"》。这项研究曾成为新闻焦点:ChatGPT 碰巧知道 Tom Cruise 母亲的名字,却不知道她那位著名的儿子是谁。
在开发这个项目并运行多轮模拟的过程中,我觉得自己逐渐形成了一种直觉:LLM“不过是文本生成器”。我重新思考了“in-distribution”这个概念。也就是说,如果模型见过某些数据,它可能会给你带来惊喜;如果没见过,它就可能一败涂地。这个实验让我切实感受到了这项技术的边界。
查看日志时,我看到模型可能会突然陷入一种失败模式:明明已经成功下到第 74 步,却无法从给定的合法走法列表中选出正确的一步。这个列表可能包含 10 个由逗号分隔的代码,例如 e2e4。原因可能是,它遇到了某种独特的 token 组合,于是 LLM 无法抗拒地选择了一个熟悉的、处于训练分布内的代码。这个代码看起来与某个合法走法相似,而真正应该选择的走法代码可能是一个非常罕见、在预训练阶段从未遇到过的 token,因此反而被跳过了。
当我尝试使用更好的 prompt,例如要求 LLM 在走棋之前先进行反思时,结果并没有改善。不同之处只是,LLM 现在会用一些看似漂亮的冗长文字来包装自己的决策过程。
--------------------------------------------------------------------------------
Proxy (to Player_Black):
Before deciding on the next move you can reflect on your current situation, write down notes, and evaluate.
Here are a few recommendations that you can follow to make a better move decision:
- Shortlist the most valuable next moves
- Consider how they affect the situation
- What could be the next moves from your opponent in each case
- Is there any strategy fitting the situation and your choice of moves
- Rerank the shortlisted moves based on the previous steps
--------------------------------------------------------------------------------
Player_Black (to Proxy):
**Reflection:**
1. **Shortlist Valuable Moves:**
- **g8f6**: Develops the knight, controls the center, and targets e4.
- **h7h6**: Prepares to fianchetto the bishop or prevents a knight pin on g5.
- **c7c5**: Challenges the center and prepares to expand on the queenside.
2. **Immediate Effects:**
- **g8f6**: Develops a piece, brings the knight nearer to the center.
- **h7h6**: Solidifies kingside but is more of a precautionary move.
- **c7c5**: Direct action against the center, preparing for future breaks.
3. **Opponent's Responses:**
- **g8f6**: White might continue developing with Nc3 or push e4.
- **h7h6**: White might ignore it and proceed with normal development.
- **c7c5**: White could opt for dxc5 or develop with Nc3.
4. **Strategy Considerations:**
- Aim to control the center and set up a solid defensive position.
- Balance between development and maintaining structural integrity.
5. **Rerank Shortlisted Moves:**
- **1. g8f6**: Best for development and central control.
- **2. c7c5**: Strong challenge to the center.
- **3. h7h6**: Defensive but adds limited value immediately.
With that in mind, I’ll proceed with the development strategy.
Action: `make_move g8f6`
这就像我们经常在结束与 chatbot 的对话时感到空虚一样:读了一大堆废话,却没有得到问题的具体答案。
不知为何,去年我为了用简单语言描述 LLM chatbot 而提出的那个类比,直到现在依然成立。
Proxy 是一个负责控制棋盘的 bot。它使用硬编码的 prompt,与 LLM 组织一段简短对话,最多进行 10 个回合,并要求 LLM 走一步棋。
Proxy (to Player_Black):
You are a professional chess player and you play as black. Now is your turn to make a move. Before making a move you can pick one of the following actions:
- 'get_current_board' to get the schema and current status of the board
- 'get_legal_moves' to get a UCI formatted list of available moves
- 'make_move ' when you are ready to complete your turn (e.g., 'make_move e2e4')
Respond with the action.
Player_Black (to Proxy):
get_current_board
Proxy (to Player_Black):
♞ ♝ ♛ ♚ ♝ ♞ ♜ ♜
♟ ♟ ♟ ♟ ♟ ♟ ♟ ♟
· · · · · · · ·
· · · · · · · ·
· · · · · · · ·
· · · · · · · ·
♙ ♙ ♙ ♙ ♙ ♙ ♙ ♙
♖ ♘ ♗ ♕ ♔ ♗ ♘ ♖
Player_Black (to Proxy):
get_legal_moves
Proxy (to Player_Black):
a7a6, b7b6, c7c6, d7d6, e7e6, f7f6, g7g6, h7h6, a7a5, b7b5, c7c5, d7d5, e7e5, f7f5, g7g5, h7h5
Player_Black (to Proxy):
make_move e7e5
Proxy (to Player_Black):
Move made, switching player
我很好奇,是否有任何 chat LLM 能够在对阵随机玩家时取得胜利,同时在不同任务上继续保持良好表现。考虑到走法和局面的组合数量极其庞大,我怀疑这可能会是一个艰巨的挑战。如果 LLM 正如 LeCun 所说,只是一张查找表,那么想在 LLM Chess 上达到性能饱和,或许并不容易。
若要采取进一步措施,你可以考虑屏蔽此人和/或举报滥用行为。