跳到正文跳到正文
深度解析

AI 玩《宝可梦 金》:Bobcat 从新游戏一路拿到 16 枚徽章

Bobcat 从不写字:它读取一个状态,为每个选项返回一个概率。我们把韩文版《宝可梦 金》放在一个只陈述事实、并列出游戏所允许操作的框架后面,给了 Bobcat 一份攻略,让它从新游戏开始做出每一个选择。在同一个 commit 上开了二十局新游戏,运行期间什么都没改:17 局拿齐了全部 16 枚徽章,每局游戏时间的中位数为 19.3 小时。在另一个 commit 上的第二批结果相同,20 局中 17 局。同一个框架随机作答,一枚徽章都没拿到。另有一局完整录制;卡住的六局都列出了原因。

Foxl AI更新于 阅读约 10 分钟

白银山上的赤红,游戏的最后一战,加速播放,出自录制的一局。左边是游戏;旁边是发给 Bobcat 的状态、它评分最高的选项及每个选项对应的按键和概率,以及它的选择记录。 GIF
本页内容
已于 2026年10月14日 对照已发布的实现和保留的测试复核。

更新(2026-10-14):我们最新的模型 Bobcat 1.3 在 Jev Decision Index 上以 62.8 分并列第三,Jev 为 60.1 分(见下文)。本文中的游戏由更早的版本 Bobcat 1.1 完成,战斗则由 Bobcat Flash 1.1 负责。

Bobcat 是一个从不写字的模型。给它一个状态和一组选项,它会为每个选项返回一个概率,它能做的也仅此而已。我们把韩文版《宝可梦 金》放在一个框架(harness)后面,这个框架只陈述事实,并列出游戏在那一刻允许的操作;我们还给了 Bobcat 一份攻略,然后从新游戏开始,把每一个选择都交给它:去哪里、到了那里做什么、每场战斗的每一招、买什么、抓谁,以及攻略中的某一步什么时候算完成。

接着,我们在同一个 commit 上一次性开了 20 局新游戏,运行期间什么都没改。20 局中有 17 局拿齐了全部 16 枚徽章,城都 8 枚、关都 8 枚,途中还击败了四天王和冠军。通关的游戏按游戏内的时钟计算,用时中位数为 19.3 小时,大约做了 5,100 次决策。我们在相隔几小时的两个 commit 上各做了一次,两批的结果都是 20 局中 17 局通关。同一个框架如果随机作答,则一枚徽章都没拿到。

我们给自己定的标准是十局九胜,目前还没达到:下面列出了卡住的六局,以及每一局的原因。在这两批之后,我们又在第二批的 commit 上开了三局游戏,并逐帧录了下来;三局全都拿齐了十六枚徽章,在白银山击败了赤红,还收服了凤王。这里的视频是最先通关的那一局:4,887 次决策,游戏时间 19.9 小时。

两个面板,每个对应一批共二十局新游戏,每局是一条徽章数随游戏时间变化的阶梯线。每个面板中大多数线都到达了十六枚徽章;卡住的游戏停得更早,各用一个叉号标出。之后在第二批 commit 上录制的几局用陶土色画在第二个面板上,视频里的那一局用粗线表示。
60 秒看完录制的这一局,从卧室一直到最后一枚徽章(在 YouTube 上观看)。每一帧的左边是游戏画面;旁边的面板是这次决策发给 Bobcat 的内容,右边是它评分最高的几个选项,附有执行每个选项的按键和概率,下面是它的选择记录。如果想以文件形式分享:视频和封面图。

录制的那一局:精彩片段

下面是录制对局中的 8 个时刻,每一段都是 Bobcat 当时看到的仪表板,经过加速(录制的一帧相当于游戏中的一秒):左边是游戏,旁边是发给 Bobcat 的状态,然后是它评分最高的选项及其按键和概率,以及它的选择记录。先用四分钟看完全部 25 个时刻,包括每一位道馆馆主;然后逐个看其中的 8 个。

精彩片段:每一位道馆馆主、四天王、唤醒卡比兽、赤红和凤王(在 YouTube 上观看)。
第 1 枚徽章:第一座道馆的阿速。发生在游戏时间 37 分钟,以 19 倍游戏速度播放。
第 3 枚徽章:小茜和她的大奶罐。发生在游戏时间 2 小时 7 分,以 120 倍游戏速度播放。
第 8 枚徽章:城都的最后一位馆主小椿。发生在游戏时间 8 小时 36 分,以 60 倍游戏速度播放。
冠军阿渡。发生在游戏时间 13 小时 7 分,以 22 倍游戏速度播放。
用宝可梦装置的收音机唤醒卡比兽。发生在游戏时间 15 小时 16 分,以 8 倍游戏速度播放。
第 16 枚徽章:常青市的青绿。发生在游戏时间 16 小时 2 分,以 30 倍游戏速度播放。
白银山上的赤红。发生在游戏时间 17 小时 39 分,以 30 倍游戏速度播放。
凤王与大师球。发生在游戏时间 19 小时 55 分,以 6 倍游戏速度播放。
完整的一局,录下的每一帧都在,每枚徽章一个章节(在 YouTube 上观看)。

通关率有多高?

一批是二十局游戏,在同一个 commit 的框架和攻略下,从同一个新游戏一起开始,起点是开场之后的卧室。运行期间不做任何修改,也不会从存档继续任何一局:卡住的游戏,就是没有通关的游戏。每局在拿到第十六枚徽章时停止。如果一局在攻略的某一步上停留了数千次决策都没有进展,就会被停止并计为卡住。

批次Commit拿齐 16 枚徽章通关所用游戏时间(最快、中位数、最慢)
A13803fe20 局中 17 局17.1、20.3、26.0
B6c233f120 局中 17 局17.0、19.3、24.2

合计是 40 局中 34 局,即 85%。四十局并不足以把通关率确定得很精确:95% 区间从 71% 到 93%。没有通关的几局:

  • A 批,第 7 局,停在 15 枚徽章:一再输给最后一位道馆馆主青绿,而且在两次挑战之间四处闲逛,没有去练级。在那一步上做了 4,977 次决策后被停止,此时游戏时间为 56.6 小时。
  • A 批,第 11 局,停在 7 枚徽章:只靠一只强力宝可梦、其余队员远远落后,一直输给小椿,还离开她的道馆四处游荡。在那一步上做了 3,514 次决策后被停止,此时游戏时间为 22.1 小时。
  • A 批,第 15 局,停在 7 枚徽章:把冰之洞的巨石当成已经读过的告示牌搁在一边,可每次进入都必须重新使用怪力(已在 B 批之前修复)。在那一步上做了 3,215 次决策后被停止,此时游戏时间为 19.9 小时。
  • B 批,第 2 局,停在 8 枚徽章:没能让已经会四个招式的暴鲤龙学会攀瀑:游戏问的两个问题没有被读取,教学也就没有发生。在那一步上做了 5,677 次决策后被停止,此时游戏时间为 27.6 小时。
  • B 批,第 14 局,停在 7 枚徽章:和 A 批中的一局一样输给了小椿,队伍里的其他成员远远落后于初始宝可梦。在那一步上做了 6,450 次决策后被停止,此时游戏时间为 25.6 小时。
  • B 批,第 20 局,停在 11 枚徽章:没有自行车就想走自行车道去浅红市,每次都被关口的守卫挡了回来。在那一步上做了 4,681 次决策后被停止,此时游戏时间为 24.6 小时。

六局中有三局输掉了 Bobcat 必须赢下的战斗:强大的道馆馆主,对上一支只围绕一只宝可梦组建的队伍。另外三局是框架的漏洞:被它搁置的巨石(已在两批之间修复)、它没有读取的问题、一条它不知道已经封闭的路。后两个是接下来要修的;战斗则要靠 Bobcat 自己去赢。

框架做什么,不做什么?

速通玩家会把这个框架叫作状态检查器。它读取游戏,说出哪些是事实:屏幕上的对话(对照卡带自带的字体从像素中读出);菜单和光标所在的位置;所在地点和图块、金钱和徽章;队伍,包括每只宝可梦的等级、HP 以及各个招式和剩余 PP;背包和宝可梦装置里的卡;战斗中双方的宝可梦和我方的属性;以及尝试过但没有成功的事(没有效果的招式、走不通的出口、输掉的战斗及当时队伍的等级)。它列出游戏此刻允许的操作:玩家能走到的出口、够得着的人和物体、告示牌、可以用队伍会的场地招式通过的水面和树木、草丛、沉睡的卡比兽挡路时可用的宝可梦装置收音机,以及战斗中还有 PP 的招式、换人、回复道具、精灵球和逃跑。每个选项都会显示执行它的按键(“→5 ↑3 A”),就像玩家会按的那样。

它不做选择,也不提供游戏没有显示的信息。对手的属性从不告知,招式是否有效也不告知;Bobcat 必须自己知道,或者从出招后游戏显示的文字中读出来。当 Bobcat 选定一个操作后,框架会机械地执行它:“去广播塔 2F”就是一条通往楼梯的最短路径,加上爬楼梯所需的按键。

Bobcat 决定什么?

在录制的那一局中:

  • 去哪里、做什么:每当情况变化,就在一次请求中用两个 Choice 来决定(2,245 次大地图决策)。它选定的地点会在接下来的几次决策中保留,每个出口都会标明是否通往那里。
  • 每一个战斗回合:用哪一招,是否换人、回复、扔球或逃跑(2,234 次决策)。
  • 每一个提示和菜单:是或否、买什么、忘掉哪一招、谁来学秘传招式(323 次决策)。
  • 是否捕捉:攻略说要抓一只时,是否捕捉野生宝可梦,以及用哪种球(13 次决策)。
  • 谁打头阵:当某个队员远远领先或落后于其他成员时,在宝可梦中心询问(30 次)。
  • 攻略的某一步是否完成:用于游戏记录的任何事实都无法判定的地方(查看了 41 次)。

为什么要用攻略,里面写了什么?

一个人第一次玩一款长篇游戏时会看攻略,所以 Bobcat 也拿到了一份:一份韩文文本,每个徽章数对应一章,按游戏使用时的原样公开。它给出剧情顺序、地名、要抓的队伍(32号道路的咩利羊、一只能学会冲浪的水属性宝可梦、红色暴鲤龙)、哪些属性对付各位馆主有优势,以及游戏中少数几个只有唯一解的谜题(冰之洞的巨石、地下通道的开关、金黄市的传送板)的答案,每个答案都对照游戏的反汇编逐格核对过。怎么用这份攻略,由 Bobcat 决定。框架只根据事实翻页:这一步提到的道具已经在背包里,它结束的地点已经进入,它提到的训练家已被击败,游戏记录的某个事件(归还发电厂的零件、与卡比兽交战、在红莲岛和青绿交谈)已经触发。

哪些选择不是 Bobcat 做的?

框架有一些固定规则,每条都连同阈值写在公开的代码里,每次触发也都记录在该局的日志中。在大地图上,当 Bobcat 的首选操作在重复自己时,这些规则会把它搁置:在一张地图上 50 次中选了 4 次的操作、失败过两次的出口、已经把同样的话说了三遍的人;这时执行的就是 Bobcat 剩下的选项中概率最高的那个,如果全都被搁置,则执行最近最少做过的那个。在录制的那一局中,2,245 次大地图操作里有 79% 是 Bobcat 自己的首选。战斗、提示和捕捉都是 Bobcat 的回答。有几件事是不经询问直接完成的:开场、拒绝起昵称、确认 Bobcat 选定的购买或教学,以及退出框架无法理解的菜单循环。

录制对局中每个大地图操作由谁选择:一部分是 Bobcat 自己的首选,其余由公开的某条循环规则决定。

怎么知道不是框架在玩?

在同一个框架、同一个 commit、同一个新游戏上,把每个 Choice 都随机抽取,结果在 9,517 次决策中一枚徽章都没拿到。框架并不中立:它会走到被选中的地方,并标出通往攻略中地点的出口,这正是随机回答也能走出一段路的原因。从那样到十六枚徽章之间的差距,来自 Bobcat。框架还会为每一次决策记录发给 Bobcat 的状态、每个选项及其概率,以及有没有规则搁置了它的选择、是哪一条,所以这个结论可以逐行核查。

它是怎么走到这一步的?

框架是在 Bobcat 参与其中的情况下,针对这款游戏编写的,大部分工作都是找出它在游戏深处读错了什么:没关上的电脑菜单、宝可梦倒下后的队伍画面、只画了一半就被读取的背包口袋、被误当成精灵球口袋的空道具口袋、会忽略短按的商店列表、攻略还在说去找船长时就已经到港的船。每一个问题都要在数百甚至数千次决策之后才出现。当一局卡在这样的问题上时,我们修好框架,再从这一局最后的存档继续,最早的几局就是这样拿到十六枚徽章、击败赤红并收服凤王的。然后是分批测试,每次二十局新游戏:每一批卡住的地方,就是下一个 commit 要修的地方;对攻略提示的修改,会先从同样的存档开着和关着各试一遍,才决定是否保留。上面的两批就是最后两批。在两批之间,我们修了 A 批暴露出的一个问题,也就是冰之洞的巨石,还给满金市与其地下通道之间的楼梯改了名,因为有几局把它当成了开关房间。

Bobcat 的弱点在哪里?

  • 像上面那样,用一支失衡的队伍对战强大的馆主。在录制的那一局中,它输了 30 场战斗,对训练家赢了 229 场。
  • 它过于依赖初始宝可梦(录制的那一局结束时,队伍是 93 级的火暴兽、30 级的波克基古、8 级的咩利羊、10 级的呆呆兽、34 级的暴鲤龙和40 级的凤王);被问到谁打头阵时,它大多数时候都保持原来的顺序。
  • 循环规则是必需的:录制那一局的大地图操作中,有 21.0% 是由某条规则决定的。

花了多少钱?

录制的那一局在 4,887 次决策中用了 9,015,052 个输入 token。它在一块租用的 RTX PRO 6000(96 GB)上运行了 0.9 小时,这块 GPU 与其他录制的对局共用;按每小时 $2.76 计算,这段时间的成本是 $2.37。分批测试中通关的一局,输入 token 的中位数是 9.4 百万;二十局共用一块 GPU。两批测试背后的全部工作,包括之前的各批以及每次修复的测试,共用了一块 GPU 39.8 小时,按每小时 $4.12 计算为 $164.13。作为参照,录制那一局的 token 如果按 Jev 公布的每百万输入 token $0.042 的标价计算,约为 $0.38;这只是一个参照点,并不是对这两种服务在这一工作负载上的测量。

这些游戏之后的 Bobcat

上面的游戏是 Bobcat 1.1 玩的,战斗由 Bobcat Flash 1.1 负责。我们最新的版本 Bobcat 1.3(2026-10-11)没有玩过这些游戏。它改为在 Jev Decision Index 上接受测量:这是一个面向决策模型的公开排行榜,其 Full 分数中有 80% 来自维护者的私有测试,而这些测试由维护者亲自运行。Bobcat 1.3 得了 62.8 分,与 Perplexity Decider v1.1(62.8)和 Darwin-27B-ZTC(62.5)并列第三:在 166 个参赛条目中按分数排第五,并且在相同用例上高于 Jev 的 60.1。它是怎么做到的,请看Bobcat 的故事。

Jev Decision Index 0.3.2 排行榜的 Full 分数,筛选为 Jev 及以上的模型。十二根柱子从 66.3 一路降到 Jev 的 60.1,按名次分组:#1 并列,vLLM-SR d3 (27B) 66.3 和 linne-oak 1.0 (31B) 65.6;#2 并列,Decider 31B (NVFP4) 64.6 和 Sieve 31B 63.8;#3 并列,Bobcat 1.3 (31B) 62.8、Perplexity Decider v1.1 (27B) 62.8 和 Darwin-27B-ZTC 62.5;#4 并列,MORJ 1.0.1 61.0、AnyJev L0 60.2、Fastino GLiDE no-thinking 60.2、Sieve 27B 60.2 和 Jev 60.1。
2026-10-14 的 Decision Index 排行榜,Full 分数,打开了它自带的“Jev and above”筛选。Bobcat 1.3 是第五根柱子,位于 #3 组;Jev 是右侧的黑色柱子。所有基准测试的结果都在它的 Bobcat 1.3 页面上。

局限

  • 40 局新游戏中有 85% 通关,低于我们自己十局九胜的标准,而且四十局是一个很小的样本。
  • 同一批的二十局都从同一个新游戏开始,彼此之间的差异只来自繁忙的模型服务器带来的微小数值差异。它们并不是二十个独立的玩家:这些游戏的前几章往往玩得差不多,卡住的情况也是成类出现,而不是一局一个样。
  • 两个 commit 都是针对这款游戏调出来的:每一处修复和提示都来自这款游戏之前的对局。没有留作检验的游戏,换一款游戏也需要它自己的框架。
  • 攻略是我们写的,里面包含游戏中固定谜题的答案和要抓的队伍。
  • 录制的对局是在分批测试之后、用 B 批的 commit 玩的,因为分批测试本身没有录制;视频展示的是其中最先通关的那一局。

代码、攻略和决策日志都在 github.com/foxl-ai/bobcat 的 demos/pokemon 下。你需要自己的卡带转储;我们不公开任何 ROM 或游戏素材。Pokémon(宝可梦)是 Nintendo、Creatures 和 GAME FREAK 的商标。这是一个独立的研究演示,与它们以及 TypeSafe AI 均无关联,也未获其认可。模型的介绍见 Bobcat: Typed Decisions from One Forward Pass(英文)。

本文也有韩文版。

参考资料与延伸阅读

  1. 代码、攻略和决策日志(GitHub)参考
  2. Bobcat 1.1 权重,玩这些游戏的模型参考
  3. Bobcat Flash 1.1 权重,负责大部分战斗招式参考
  4. Bobcat 1.3 权重,最新版本参考
  5. Jev Decision Index 排行榜参考
  6. Continual Harness(arXiv)参考
  7. PyBoy 模拟器参考
  8. pret/pokegold 反汇编参考