riftbound-agent · MIT 开源

MIT 授权开源

还没有人教会 AI 掌握集换式卡牌游戏的反应时机,我们正在尝试。

公开的卡牌游戏 AI 研究,大多停在对手能在你的回合里出手的那一刻。这个计划在做的是那之后、范围收敛过的版本,而且完全公开,每一行都能查证。

为什么这件事很难,几乎没人做过

棋盘游戏是完全信息游戏,盘面摊在桌上,可以直接搜索。卡牌游戏第一步就打破这件事:牌堆是随机的,对手的手牌是隐藏的,「目前的盘面」根本不是单一一种可能。

第二道障碍,才是真正决定哪些游戏能被「解决」的关键:对手能不能在你的回合里出手。炉石战记是公开研究做得最远的一款,而卡池比较小其实是次要的理由。真正的理由是对手在你的回合里几乎没有出手的空间,于是一个回合就是一段封闭的串行,可以一路算到底。即使是炉石,研究也不是跑在官方客户端上,而是跑在社群自己重写的实作上。得先有人把规则写成程序,才有立足点,这件事对这份清单上的每一款游戏都成立。

把规则写成程序这件事,规模最大的一次尝试发生在魔法风云会,而那个结果值得精确地讲出来。2016 年 Google DeepMind 发表了 Latent Predictor Networks for Code Generation,它的 benchmark 任务就是这一件事:读一张卡的印刷文本,产生实作这张卡的代码。训练目标是真的引擎——来自 Java 版 XMage 的 11,969 张魔法风云会卡牌,以及来自 Python 版 hearthbreaker 的 533 张炉石卡牌。最好的模型,只有 4.8% 的魔法风云会卡牌完全正确。而它的 BLEU 分数是 61.4:它写出来的代码,看起来非常像它应该写出来的那一份。这两个数字放在一起,就是整个问题。「说得通」跟「是对的」是两种不同的性质,而只有其中一种跑得起来。

那是十年前的事,之后没有任何研究宣称这个落差已经被补上。今天存在的东西都是人手写、社群维护的:魔法风云会这一侧有 XMage 与 Forge,游戏王有 ygo-agent,而它能训练是因为底层有 ygopro-core 撑着。两款游戏最近各自的 benchmark,MTG-Causal-RLPTCG-Bench,都显示 LLM agent 能打出非零的表现,但没有一个显示它打得稳定。两者都是把一组有限的原型牌组放进固定的观察空间里比较不同方法,是研究用的 benchmark,不是一个能让你自我对弈的世界。

Riftbound 站在困难的那一侧。它有连锁,会传递优先权与焦点,有反应时机,盘面会在对手的动作之间持续变化。已经有人尝试过:至少有一个公开的 Riftbound 仿真器接上了树搜索,而且是正面处理连锁结算,没有回避它。

这些尝试都没有的是一套一致性测试:能逐条核对「实作出来的时机」是不是规则写的那个时机,也能明确说出哪些部分根本没实作。没有这个,「不合法」跟「没实作」会是同一个答案。对打牌来说没差,反正两者都代表你做不到;但对任何要从这个环境里学习、或引用它当证据的东西来说,这是一个结果跟一个猜测之间的差别。

所以障碍从来不是模型不够聪明。障碍在于得先有人把规则写成程序。2016 年之后改变的,是谁来做这件事。这页讲的规则内核不是人一行一行手写出来的:它由语言模型 agent 写、由人审、再用绑着官方条号的一致性套件挡下来。那就是 DeepMind 2016 年的那个任务,只是它现在以工程的方式在跑,而不是一次性的 benchmark——而一致性套件取代的正是当年的 exact-match。这件事在这里特别重要,因为 Riftbound 没有一个权威实作可以拿来对答案。

另一半的改变,是目标不必再是两万张卡。Riftbound 继承了魔法风云会的结构——连锁、优先权、反应时机——困难的机制一个都没少,但印出来的卡池只有它的一小部分。小到做得完,又结构完整到做完这件事是有意义的。

赌注:范围收敛,而且容许说「不知道」

不必把每一张卡都做出来。实务上一个环境真正用到的卡只是印出来的一小部分,诚实的工程做法就是收敛范围:把实际会用到的机制做出来,其余的明确标成「未实作」。

这只有在一个条件下才成立:系统必须被允许回答 unsupported,而且这个答案要是正式的结果,不是被吞掉的失败。一旦「拒答」被当成要遮掩的东西,收敛过的范围就会悄悄变成一个假装什么都涵盖的系统,比干脆不做还糟。

所以分工是固定的:机械层归程序管,模型只在程序留下的空间里推理。不是把规则翻译成一段 prompt 让模型读,而是把规则真的运行出来,划出一块它辩不掉的空间。

现在确切走到哪里

上面讲的是目标的完整尺寸,这一节讲的是精确现况,两者不是同一件事。这里的每一行都由 repo 里的一致性测试检查过;测试改了,这页就是错的。

为什么我们决定做一个内核出来

3 / 46 传奇拆解在对照实战的稽核里完全没被改动,这次稽核发生在内核存在之前。

这个计划一开始是一个推导出来的知识库:每一条都是直接从卡面文本与游戏机制写出来的,不是从别人的攻略摘要而来,这让每一条的重制成本很低,但单独看也还没被验证过。所以全部 46 条都拿去对照既有的实战打法检查,其中 3 条完全不用改。

抓到最有价值的问题,其实跟传奇本身无关。禁牌清单的替换逻辑,把一张无条件发符文给每位玩家的卡,换成一张只发给掌控战场那方的卡:同领域、同货币、完全合法,但这副牌组本来就是刻意放弃前期战场来换取节奏,这样替换等于在资助对手。发现这个问题的是计划外的一名玩家,不是内部检查抓到的。

那次稽核就是内核存在的理由。从卡面推导出来的东西是站得住脚的;但一旦问题变成一副牌实际上想做什么、或者现在机制上合不合法,它就撑不住了,而机制那一半没办法用推导的,只能靠真的运行。

我们瞄准的那条线

围棋 AI 值得那些投入,是因为它打赢所有人类。集换式卡牌游戏不是这种形状,就算真的做出一个超人类玩家,也不会有多大的价值。这里瞄准的那条线刻意不一样,而且用它自己的方式更难:

目标不是打赢人,而是正确地教会人:能说出一副牌在做什么,也能秀出这个说法根据什么,并且在它真的不知道的地方停下来。

学会怎么打,结果是比较容易的那一半。困难的那一半是组牌、读懂环境,还有知道一张卡被禁的时候该换什么,而这正是我们自己的替换逻辑出错的地方,出在一副牌明明有充分合法理由该有信心的地方。这次失败就是问题本身的形状,不是要收起来遮掩的难堪。

这会不会有一天长成完整的规则引擎、或是一套学习系统,我们不知道。但它现在累积的东西,结构化的状态、可运行的一致性测试案例、一条证据轨迹,正是那两者不管哪一个都需要的地基。

它从哪里来,产出又回到哪里去

这不是一个先有 AI、再去找用途的项目。它起于符文战场编年史的一个内容问题——那是一个繁体中文的 Riftbound 网站:写一篇牌组攻略,等于在宣称这副牌实际上怎么打,而当时没有任何办法可以检查那个宣称。另一边,玩家一直在问有没有东西能解释规则交互、而且讲得出答案是凭什么。组牌教练与规则咨询就是这两个问题,而且是照这个顺序来的。

那个网站至今仍是第一个生产环境用户,这也是这个项目没有变成展示品的原因。站上的牌组攻略,打法分析就是从这套知识库产出的,每一篇都挂着明确的 AI 分析标记与方法论链接。写攻略时撞到的问题会回流进 skill,而上面那场稽核,就是这个循环第一次被认真跑起来的结果。

真正能帮上忙的事

靠一个人做太慢了,缺的那些部分,刚好都需要懂这款游戏或懂工程的人。这里没有任何一件事需要先取得许可才能开始:fork 它、把它玩坏、或直接开一个 issue 都可以。

找出推导的破绽
那个替换逻辑的 bug,是一个比程序更懂那副牌的玩家找出来的。这现在还是价值最高的贡献方式,而且完全不用写程序。
把机制写进内核
类型化的操作跟一致性测试案例,每一个都要对应到一条官方条文。这是目前的瓶颈:把规则变成程序就是整个障碍所在,而且这件事可以并行分工。
把一场对局收尾
计分与胜负判定是上面唯一挡住其他所有东西的那一项,而且它是普通的、可测试的工程,不是研究。所有能评估一副牌的东西都排在它后面。
把这套方法搬到另一款游戏——包括魔法风云会
这套做法没有一处是 Riftbound 专属的,而最明显的目标就是魔法风云会本身。XMageForge 已经实作它二十年,但两者都没有绑着条号的一致性套件——所以两者都分不出「不合法」跟「没建模」,而那正是任何要从它们身上学东西的系统所仰赖的区别。魔法风云会之外,这几年冒出来的西式卡牌游戏比九〇年代之后的任何一个十年都多:Flesh and Blood、Star Wars: Unlimited、Disney Lorcana、Sorcery: Contested Realm、Altered、Grand Archive。它们在「对手能在你的回合里做多少事」这件事上差异极大,而那正是这个项目整个组织起来的那条轴线;就我们找得到的范围,它们没有一款有附一致性套件的公开规则内核。第二款游戏才是这套方法能不能推广的真正检验——而第一个做出套件的人,会让后面每一款都变便宜。

什么是拒绝,什么只是还没做

规则引擎、AI agent、训练出来的玩家模型,是三件不同的东西。这个项目从第二件开始,后来写出了第一件的一小块。这里没有训练好的策略、没有自我对弈语料、没有完整状态机,也没有全卡效果引擎。

那是一个顺序,不是一个拒绝。学出来的策略在正确环境的下游:拿没有人验证过的规则去训练,它学到的就是那个环境的 bug——而且是自信且隐形地学到,因为它确实在赢你交给它的那个游戏。一致性套件不是挡在学习前面的障碍,它才是让学习结果有意义的东西。

真正被拒绝的东西窄得多,而且会一直拒绝下去。它不替你打牌。这里所有东西都在准备阶段——组牌、理解、练习、回顾。在二号玩家模式里,隐藏信息、合法性、结算与每一次状态更新都由真人掌握,引擎的结果动不了其中任何一项。它不发布胜率、使用率、Tier 排名或对局表。一套权威的规则引擎——包括哪天真的出现官方数字客户端——只会让这个项目更有用,而不是变得多余:那个引擎服务的是「打」,这个服务的是「准备」。

Riot 的 Digital Tools Policy 对组牌管理工具与教育性质的工具是开放的,但也明讲不会预先核准自动运行规则的工具或对战仿真器。这条界线在野心之前就先决定了设计方向:每一个出牌建议都要等人确认过才算数。它是为研究与教育用途打造的,赛事期间使用会违反赛制规定。