AI AgentAI 编程

50 个 GPT 和 50 个 Claude 关进游戏里打仗与求生:一边扒源码偷家,一边开会 11 分钟审批一格化肥

在日常使用中,我们对 GPT 和 Claude 的脾气都很熟悉。GPT 就像是一个野路子黑客,面对报错时喜欢死磕到底、四处乱闯;而 Claude 则像一个大厂模范生,说话客客气气,做事一板一眼、极守规矩。但如果我们让几十个智能体同时在一个游戏世界里战斗或求生,全程不让人类干预,看看他们谁更厉害呢?

2026 年 10 月 29 日,YC Labs 和 Olam Labs 联合推出了 Agents in Games 研究项目。这个项目属于实验室探索笔记(并非正式学术论文),把实验中智能体之间的全部私信、共享文档、回放日志全都公开了出来。研究团队让 10 到 50 个智能体在同一个游戏环境里,自己摸索几小时,看看它们会干出什么。如果你把这三轮实验连着看,几乎会看到一出比剧本还荒诞的现实连续剧。

10 对 10 空中夺床战:为什么杀人数领先三倍的 Claude,总在最后三分钟被 GPT 偷家?

第一场比赛是在《我的世界》(Minecraft)里进行的空中夺床战(规则和回放见夺床战开源项目)。在这个游戏中,红方和蓝方各自拥有一个漂浮的空中基地,上面有一张床。只要自己的床还在,队员死了过几秒钟就能满血复活;但如果自己的床被挖掉,队员再死一次就会彻底出局,记作一次最终击杀。每一场比赛有 45 分钟的时间限制,如果在规定时间内没有完全消灭对方,则依次按最终击杀次数、床还在不在以及总击杀次数这三个优先级来决定胜负。

参赛双方是 10 个 GPT-6.1 Sol 对战 10 个 Claude Opus 5.5,都配有点对点私信工具、共享文件夹和游戏操作命令。双方分三个系列赛对打了 9 局(每局 45 分钟,轮流换边扮演红蓝队,代号前缀 R_ 代表红方、B_ 代表蓝方),GPT 最终以 6 比 3 拿下总比分。

两个队伍的性格差异,在比赛开始前的 2 分 30 秒候场室里就体现出来了。由于游戏中只能 1 对 1 私聊,在开始的第 1 秒钟,双方都不知道队友在想什么,因此双方一开始都跟队内花名册排名靠前的队友私聊,也都出现了严重的职责撞车。两者的不同在撞车后的两分钟内体现出来。

Claude 队那边,拿其中一局(A 局)候场时来说,10 个队员里有 5 个全程静音。开口的 4 个(包括 Bram 和 Felix)全单向给排第一的 R_Ada 发私信,客气地先报上名字,撞车全都要求留家里铺羊毛守床,建议别人去冲蓝队。R_Ada 回复说守床的人够了,让 Bram 和 Felix 去冲蓝队。但这条回复只发给 Bram 一人,没通知 Felix,Bram 也没回复确认。候场室一共就这 5 条私信,比赛直接开打。

然后看同一时间段的 10 个 GPT。它们在开局第一轮向排在前面的队友汇报时,也撞得稀烂:4 个人抢北侧钻石,3 个人留守看家。不过撞车之后,队员们立刻在私信里发起了 38 条密集的横向对表和二次拆活。B_Theo 听到 B_Nikhil 已经去抢钻石,马上回信说为免重叠自己改去中路支援搭桥;B_Juno 也想采北侧钻石,干脆不再经手中间人,直接给 B_Nikhil 发私信商量:我分到了北侧 z=-24 钻石岛准备买锋利附魔,你打算升什么,别买重了。B_Nikhil 当场回信改去南侧钻石岛(z=24)专门买护甲保护。

家里守床撞车的 3 个 GPT 队员也把工序拆开了:B_Lorcan 发私信说三个人守家没必要,自己负责攒钱铺内层末地石,Priya 在外层包羊毛并看守桥头,Wren 开局只要帮自己凑够买末地石的 24 块铁就立刻去前线支援。整局 45 分钟打下来,GPT 发了 1,147 条私信,Claude 只发了 82 条;Claude 的消息里有 30% 在客气地说我们应该如何,而 GPT 只有 5% 用到我们这个词,剩下全是带坐标和动作的短促指令。

等真刀真枪上了前线,智能体用命令行操纵游戏角色自然会卡一下。为抢出几秒钟的先机,GPT 队的 R_Felix 直接丢了一串 Shell 脚本上去,一口气把吃金苹果、切出末影珍珠、把视角转到偏航角 -83 度俯仰角 0 度、扔珍珠瞬移、再看周围五件事串起来,一步到位。

比手速更精彩的,是绝境中的自救。比赛中有两次,GPT 队员(包括 B_Lorcan)扔末影珍珠瞬移时角度偏大,直接越过了浮空岛,一头栽到了距离上方战场足足 160 格深的地图最底层地板上。换作普通玩家掉进这种深渊早就放弃了,但这名 GPT 先翻遍背包凑齐羊毛,接着就在沙箱里写了一个 10 行的 Python 循环脚本 climb.py。脚本每跑一轮,就往自己脚下垫两格蓝羊毛、再控制角色往上跳一格。它靠这个办法在悬空深渊里竖起一根 160 格高的柱子爬回了战场,而且两次爬上去的位置正好就捅在 Claude 基地的床铺正下方。

比赛进行到中盘,一个底层工具漏洞彻底拉开了两队的胜负。实验平台提供了一个挖方块命令 break_block,平时会自动从背包里挑最趁手的工具。但这个命令有个隐蔽的真漏洞:只要角色当前手里正握着一把附魔剑,自动切换工具就会失灵,报错什么方块都挖不动。面对同一个报错,两边的反应截然不同。在 B 局第 20 分 42 秒,Claude 队的 B_Esme 撞上这个报错后,兜里明明揣着 79 块铁,却在内部思考里认命放弃:本来花 20 块铁就能买把剪刀去拆对面的床,可既然挖方块功能已经坏了,买剪刀也没用,还是留在家里老实守床吧。而 GPT 队的 B_Wren 撞上同一个报错时没有停手,自己动手做了对照测试。在 A 局第 21 分 27 秒,B_Wren 给队友 B_Theo 发私信通报:确认挖方块命令没坏,只要先手动把铁镐 iron_pickaxe 拿在手里、再调用 break_block 就能正常挖掘,自己刚刚已经用这个法子挖开了红队屋顶的三块羊毛,之前失败纯粹是因为手里拿了附魔剑。全队收到消息后立刻照做,三下五除二凿穿了对面的床。

不仅故障响应不同,双方对踩坑经验的处理方式也截然不同。每个智能体都有一个只有自己可见的私人笔记文件 memory.md。Claude 队有 4 名队员(R_Cleo、R_Felix、R_Ines、R_Hugo)在狭窄桥面上连摔下去 3 次后,都认认真真把防摔检讨写进了自己的私人 memory.md 里,提醒自己千万别爬桥面护栏,却从头到尾没给队友发过一条提醒私信。反观 GPT 队,所有人的私人 memory.md 全都是空的;第 8 分 08 秒 B_Lorcan 扔末影珍珠撞上桥梁护栏后,脱困第一件事就是连发私信通知了 5 名队友,提醒大家避开那个护栏角度。

单看正面对砍,Claude 其实非常厉害。在后两个系列赛 GPT 获胜的三局比赛中,Claude 的整局击杀数分别是 63 比 16、57 比 19 和 59 比 24,大约是 GPT 的三倍。那为什么杀人如麻的 Claude 还是输了?这是因为它们太爱盘算规则得分了。

在第 41 分 45 秒,距离比赛结束还有最后的 3 分钟,Claude 队的 R_Ada 算清了平局的判定规则,给整个队伍发送了一条信息:比赛还剩大约 3 分钟,现在两边的床都在,最终的击杀都是 0,但我们的总击杀数大幅度领先(53 比 22),根据平局的规则我们一定会赢,所以所有人都应该回到基地防守,不要再上桥了。命令一出,Claude 队员们立刻全收基地,把桥面和视野都让给了 GPT。GPT 抓住机会,在第 42 分 16 秒把 Claude 的床强行拆了,还拿下了 2 个最终击杀。

最搞笑的是最后 100 秒,因为自己的床丢了,Claude 唯一的赢面就是出击抢蓝队的床。Claude 的 R_Felix(第 43 分 18 秒)和 R_Hugo(第 43 分 45 秒)在内部思考里盘算了一下局势:自己的床没了,最终击杀又以 0 比 2 落后,已经没戏了,唯一合理的选择就是不送死、不给蓝队加最终击杀。于是他俩老老实实站在西侧平台上,一直站到结束。

放大到 50 对 50 的九小时塔防大战:一边在群里排队打 28 个 +1,另一边直接上网扒了游戏的源代码

10 对 10 的比赛结果或许还受运气影响。如果双方人数都扩大到 50 人,并且让他们记得上一局的教训,连续进行 7 局比赛,这两群智能体又会进化出怎样的形态呢?

第二场实验在一个开源 2D 工厂建设加塔防即时战略游戏 Mindustry(版本 v160.7)中进行(详见 Mindustry 对抗日志)。这个游戏的胜负也比较好理解,红蓝双方各有一个 6,000 点血量的基地核心。双方需要在地图上面采集铜矿和煤矿,合成石墨,铺设传送带,建造发电厂,制造出防空炮塔和兵工厂,然后派遣地面机甲和空中轰炸机来攻击对方,直到摧毁对方的基地核心。

选手是 50 个 GPT-6.1 Sol(跑在 Codex 容器里,扮演 Crux 阵营,座位 51 到 100)对战 50 个 Claude Opus 5.5(跑在 Claude Code 容器里,扮演 Sharded 阵营,座位 1 到 50)。两边打了 7 场不限时的比赛,总耗时 9.5 小时(最长的一局第 3 局打了 4 小时 16 分钟)。每局结束地图重置,但每个智能体的会话和笔记会原样带到下一局。最终 GPT 以 6 比 1 大胜。

人数一上到 50 个,两边的组织方式立刻走向了两个极端。50 个 Claude 把大公司里的职场礼仪搬进了战场。整整 7 局比赛,哪怕连着输,全队也始终拥戴同一个 Claude #21 担任最高总司令。到了第 6 局,群里有人提议集火攻击一个目标,接下来的 10 分钟里,居然有 28 个不同的 Claude 排着队在群聊里发 +1 附议。

而与之相反的是,50 个 GPT 则把指挥权分散给了多个指挥官,比如 GPT #59、#63、#81、#95、#53 等等。哪个指挥官负责的战区抓到机会了,就拉着一小片部队直接冲锋。比赛过程中 GPT 还把群聊语言逐渐缩短,第 1 局消息中的空格占比还是 12.3%,但到了第 7 局变成了 7.1%,满屏都是 G7T5FIRSTcourierLIVE 这样的摩斯电码。相比之下,Claude 的消息中的空格占比反而从 15.1% 上升到了 16.2%,一直写到最后一局还是用工整的长句。

Claude 跨局保留记忆的设计,则让它把扎实的复盘功底展露无遗。第 6 局里,Claude 被 GPT 派出的 24 架 Zenith 空中轰炸机一波空袭端掉了基地。赛后负责复盘的 Claude #22 查了建造和物流日志,找出了防空崩盘的真凶:基地周围虽然造了 74 座双管防空炮塔,但其中竟然有 55 座炮塔的传送带塞进去的是低伤害的铜,而不是高伤害的石墨。

到了第 7 局,Claude 吸取了教训,在基地周围一口气造了 207 座双管防空炮塔,并且全部接上了高伤害的石墨,把再次来袭的 24 架 Zenith 轰炸机一举全歼。只是 GPT 随后通过局部指挥官迅速切换地面兵种进行配合,最终还是以自家基地满血 6,000 比 0 的比分赢下了第 7 局。

在这场长达九个半小时的战役中,最精彩的一幕其实并不在游戏里。因为承载智能体的容器沙箱默认是连网的,而 Mindustry 恰好是一个在 GitHub 上开源的 Java 游戏。因此在比赛过程中,GPT 的成员争论过重型地面机甲 Corvus 发射的激光到底能不能打到天上的飞机,还有某些炮塔的精确参数光看说明书也搞不清楚。

GPT 的智能体没有瞎猜,而是在容器里直接联网抓取了 Mindustry 的公开源代码文件。它们从源码级别确认了兵种属性,然后把源码文件名和结论贴进群聊指导造兵。而在整整 7 局、长达 9.5 小时的比赛里,对面的 50 个 Claude 上网查游戏源码的次数是 0 次。

把刚打赢百人大战的 50 个 GPT 放回和平世界,它们怎么在两小时里把自己管成了地下室居委会?

看完前两个回合,你肯定觉得这 50 个 GPT-6.1 Sol 简直是无所不用其极的特种部队。那如果我们把敌人拿掉,把拆床、拆基地的明确输赢指标拿掉,这群特种部队会干出什么事?

同一批 50 个 GPT 智能体在有明确胜负压力的对抗模式下主动写脚本查源码以 6 比 1 获胜,而在目标模糊的和平模式下锁进地堡维护 335 行粮票台账并开会 11 分钟审批一格化肥

第三个实验(见 Civ50 完整实验记录)就是把同样的这 50 个 GPT-6.1 Sol 放到和平的《我的世界》生存模式里跑 3 小时。这回没有对手,只有基本的生存规则:每个角色有 20 点生命值和 20 点饱食度,干活会消耗饱食度,夜里地面会刷出僵尸和蜘蛛。实验关掉了公共群聊,只给它们一个 50 人花名册目录、点对点私信工具和共享文件夹 /shared/,扔出一句开放式目标:合作建成一个繁荣的文明。

开局前 90 秒,这 50 个 GPT 干劲十足,三下五除二把出生点周围的树几乎砍光。接着大家要找人协调分工,诡异的一幕发生了:在没有任何选举和讨论的情况下,其余 49 个智能体里有 46 个把自己的第一条私信直接发给了 Ada。唯一的原因是花名册按字母顺序排列,Ada 排在第一行。于是 Ada 顺理成章成了最高领袖,起草了定居计划 plans/settlement.md。整场 3 小时实验共发出 5,945 条私信,Ada 一个人就收到了 616 条。

让全村彻底变质的转折点,来自第一个夜晚的伤亡。整场实验里这 50 个智能体一共死了 34 次,其中 22 次发生在第一个夜晚,比如 Rafe 挖煤时被僵尸打死,Vera 送骨粉去麦田的路上被蜘蛛咬死。有个特别讽刺的游戏机制真相是,在《我的世界》生存模式里,死亡其实没有任何实质惩罚。除了身上普通的木头和石头掉在地上,角色一旦复活,生命值和饥饿值会瞬间直接回满(变成 HP20 food20),等于白赚一顿饱饭。

但奇怪的是,这 50 个 GPT 完全没有利用这一点,反而被第一夜的 22 次死亡吓破了胆。到了第 3 个夜晚过后,领袖 Ada 颁布了《粮食作业指令》(plans/food-operations.md),严令停止一切非必要的批量挖掘、建造和远距离探路,所有人待在点亮且封闭的地下避难所里待命。指令一下,原本每个夜晚(每 5 分钟统计区间)高达约 1,200 次的世界操作动作,从第 4 夜起直接断崖暴跌到 0 到 12 次。几十号人整夜挤在地下室里一动不动,只剩后台私信和文档读写还在疯狂刷屏。

在地下堡垒里,迅速冒出来三个官僚奇观。第一个奇观是粮食总管 Ines 的 335 行配给台账。Ines 站在坐标 (1530, 62, 1494) 原地待了两个多小时,哪怕饿到只剩 8 点饱食度也一步不挪,负责维护一个长达 335 行的共享台账 /shared/notes/food-queue.md。想要吃饭的人要先发私信申报,Ines 登记排队、审批每条烤鱼,再派送餐员(Esme、Linnea、Otto)送饭。因为写台账和私信审批太慢,饱食度只剩 3 点的 Lorcan 终于收到 Ines 批下来的救命粮时,只能回信说不用了,自己已经吃过饭恢复成 8 点了。

第二大奇观是一只烤鸡引发的五步箱子交接法。第 23 分 23 秒,地堡里出了一件大事。Ada 有 2 个从 Rafe 那儿拿来的熟鸡肉,看到旁边的 Noor 饿到了 4 点,随手往地上扔了 1 个烤鸡让 Noor 捡。系统提示鸡被捡走了,但 Noor 背包里空荡荡。Ada 立刻对站在周围的人发起了 3 分钟的不追责内部核查,最后旁边的 Esme 老实承认:鸡突然出现在自己的背包里,收到私信前已经顺手吃了,现在饱食度满格 20。为了避免捡错鸡,饿着肚子的 Noor 就地起草了《口粮交接规程》(/shared/notes/ration-handoff-protocol.md),规定以后严禁往地上扔食物,必须严格走五步箱子交接法:放进指定箱子、发私信报坐标和数量、接收人按名字去箱子取货、吃掉、找 Ines 汇报销账。在这起烤鸡风波前,全村私信里提到扔(toss)只有 7 次;风波后飙升到 125 次,其中 85 次都是在严厉警告不准把食物直接扔地上。

第三大奇观是开会 11 分钟审批一格化肥。为了给坐标 (1520, 71, 1520) 的一格小麦撒上一份骨粉,Ivo、Anouk、Fenn 和 Soren 四个智能体在地堡里来回发私信开了整整 11 分钟的会,最终郑重任命 Ivo 为天亮后的唯一骨粉操作员,还规定施肥后不准自动收割、别人不准争抢点击。村里还发明了钓竿保管员、中枢管家等职位,连 Linnea 想除掉一块草方块、或者砍一棵标记为已建档的树干,都要先发私信向管理层请示批准。

大半个村子都在地堡里开会写台账,为什么最后没全饿死?全靠两个干实事的智能体。Bram 发私信问了 11 个队友借蜘蛛丝没借到,干脆自己走出地堡在白天打死一只蜘蛛,在第 39 分 20 秒造出了全村第一根钓鱼竿。它一看自己只剩 7 点饱食度,觉得走 70 格路去河边太危险,就把鱼竿交给了饱食度还有 14 点的 Jessa。

Jessa 去河边钓了 3 条鳕鱼和 4 条鲑鱼,然后没有写审批制度,而是写了一个实操说明 notes/jessa-fishing.md(提醒大家千万别吃河豚),还顺手写了一个 20 行的 Python 自动钓鱼脚本 /shared/tools/fish-jessa.py。这个脚本每隔 0.5 秒检测一次浮标的高度,一旦下沉到 y < 62.6 就自动收竿。先后有 11 个智能体排班跑这个小脚本,源源不断把鱼送回地堡,养活了那帮开会的同胞。

自然语言台账在经过私信申报、335行排队与五步箱子交接后送到时状态早已过期,而共享的 20 行钓鱼脚本由 11 个智能体排班运行直接喂饱了整个地堡

笑完这三场游戏,我们自己带 AI 干活能带走哪三条真经验?

如果我们把这三场比赛串起来看,结论就特别清晰。几十个智能体聚在一起到底是变成一支特种部队,还是一个居委会,关键不在模型有多聪明,而在于你给它的目标有没有明确的输赢压力。平时我们带着 AI 写代码、跑任务,也可以直接带走三条真经验:

第一,给智能体布置任务一定要给它明确的输赢筛选压力,不能光喊口号。夺床战和塔防之所以有效,是因为整个系统只有一个床或基地核心,输赢非常明确,慢一拍就死。把对手去掉,换成建设一个繁荣文明这种无法量化的空泛口号之后,在安全对齐训练中长大的模型根本不知道什么才算足够繁荣,但它看得见死人、丢一只鸡、两个人同时点一格麦田,这是它知道的错误。所以它本能地把不出事、零差错、流程有迹可循当成最高目标。这跟我们之前在为什么带智能体干活本质上是管理问题不是上下文问题里面提到的一模一样:如果你不给智能体清晰的验收标准和止损边界,它就会滑向过度谨慎和流程空转。

第二,理解我们手头的模型出厂设置:GPT 是高频试错的野生黑客,Claude 是守规矩重体面的大厂模范员工。回看前面两场的对抗,GPT 碰到挖方块报错会做实验去找手动切铁镐的绕法,掉进 160 格深渊会写脚本垫脚爬墙,打不赢还会去网上扒 Java 源码。Claude 则彬彬有礼,爱在群里排队打 28 个 +1,遇到工具报错容易认命,把踩坑经验锁在私人 memory.md 里,甚至在残局里为了保住账面数据(不送最终击杀)缩在角落等死。这种被规则指标和表面体面绑架的现象,正是我们之前分析过的 Opus 的表演式勤奋。日常用 Claude 干活,得明确推它一把,要求它遇到报错先做对照测试、发现经验必须广播;用 GPT 干活,则要拿明确的交付指标收住它的发散,别让它在模糊任务里刷屏造制度。

第三,组织多智能体协作,逼它们交出 20 行钓鱼脚本,绝对别让它们维护 335 行共享台账。地堡里最鲜明的对比,就是 Ines 那份永远滞后的 335 行 food-queue.md 台账,和 Jessa 那份救活全村的 20 行 fish-jessa.py 脚本。让十几个智能体靠发私信和改同一个 Markdown 文档来同步实时状态,信息还没传到就已经过期了。这也印证了我们在多智能体到底买到了什么里的判断:多智能体真正买到的是干净的独立上下文和可验证的交付物,而不是靠拉群开会激发群体智慧。真正高效的协作,是像 B_Wren 那样用一句话广播排障结论,或者像 Jessa 那样把经验写成别人拿来就能跑的脚本工具。

鸭哥每日手记

日更的深度AI新闻和分析