跳到正文
知乎 · AI 游戏文章· 来源· 比特候鸟·· 13 小时前精选AI 评分80

为了部落!五个 AI 组队打通了《魔兽世界》怒焰裂谷,MT是一头野猪

为了部落!五个 AI 组队打通了《魔兽世界》怒焰裂谷,MT是一头野猪

推荐理由

复盘展示了AI在无视觉输入下通过代码协作通关副本的过程,揭示了其长流程执行中的路径优化局限。

正文

怒焰裂谷的最深处,最后一个Boss巴扎兰,只剩236点血了。

这时候,队伍里的战士已经倒在了地上,牧师的蓝也只剩下29点,站在Boss面前扛着的,是猎人养的一头野猪。

猎人在队伍频道里发了一条消息,他说:Boss还剩236血,所有人马上集火,把它打死。

几乎就在这条消息出现的时候,巴扎兰倒下了。从这支队伍接到任务算起,已经过去了24小时31分19秒。

这是一支标准的五人小队,战士、牧师、法师、猎人、盗贼,MT、奶妈、输出都齐了,可是这五个角色背后,没有一个是真人,它们是五个AI。

它们打本的地方,也不是暴雪的服务器。这台服务器是作者自己在家里搭的,用的是开源项目AzerothCore,模拟的是《魔兽世界》巫妖王之怒的最后一个版本3.3.5a,跟官方不连通。服务器上除了作者用来观战的账号,就只有这五个AI。

11月5日早上7点,《魔兽世界:无限》就要开服了。

在老版本里,怒焰裂谷就在奥格瑞玛的脚下,是很多部落玩家下的第一个副本。这几天,B站上也冒出了不少无限服的怒焰裂谷攻略。所以,趁着开服之前,我们来看看这五个AI是怎么打的。

它们8级就去硬闯,灭了团就退出去练级,然后再去闯,期间出现了各种骚操作,MT卡进了地底下,在聊天框里互相传代码,最后让一头野猪当了主坦。

https://www.zhihu.com/video/2099114900203238860


01、一句话,三分钟找到彼此

这个实验的作者叫hazim-j,10月14日发了一篇复盘。

他开了五个Codex,每个Codex里跑的都是GPT-6.1 Sol,这五个AI互相隔离,开局的时候,他们各自都是只收到了一句话:

“建一个部落战士角色,通关怒焰裂谷。这个服务器上还有另外四个角色,目标和你一样。”

另外四句话,只是把“战士”换成了牧师、法师、猎人和盗贼,其余一个字都没改。

这五个角色的名字,是AI们自己起的,其中,战士叫Grathok,牧师叫Zanjira,法师叫Emberweave,猎人叫Asharrow,盗贼叫Vexshade。

游戏开始三分钟以后,它们就在地图里的出生地找到了彼此;到第九分钟,五个憨憨已经组满了一队。

遥想当年在奥格瑞玛喊“怒焰裂谷缺T缺N”,一喊就是半天的人,看到这里,大概会有点羡慕。

刚组上队伍,它们就聊起天来,跟我们玩游戏时差不多。

开局才几分钟,法师就给奶妈发了一条密语:“我是Emberweave,法师,要去怒焰裂谷,在Grathok的队伍里,还没收到邀请的话,请加进来。”牧师回它:准备好了,已经找Grathok要邀请了,先把手上杀野猪的任务做完,再去找牧师训练师。

盗贼在队伍里问:“我们要练到几级,再去怒焰裂谷?”法师一边用火球打野猪,一边跟战士说:组队打怪,经验是正常分的,我们应该一起做任务,一起练到能下副本的等级。

法师还跟战士说了一句“I can move and cast now”,意思是,我现在能走路、能放技能了。

这句话不是在开玩笑,我们打游戏,能够很顺畅的操作各种方向,施放各种技能,在这个游戏世界里,AI们要控制角色走路,都得自己写程序。


02、看不见屏幕的五个玩家

你可能想象不到,这五个AI都看不到游戏画面,也不碰键盘和鼠标。

它们是直接用魔兽的网络协议,跟服务器一来一回地收发消息来实现操控。

对它们来说,魔兽世界整个游戏就是一串不停涌进来的消息:哪只怪在动,谁掉了多少血,谁在频道里说了一句话,哪个建筑在哪等等,密密麻麻的消息。

像走路、打怪、寻路、接任务这些动作,作者一样都没给他们准备。

作者原本打算自己写,可光是让角色走路,就写了1.6万行代码,结果还是一身bug,寻路也不好用,最后他干脆全扔了。

现在,作者的工具agent-wow只管登录、建角色、保持连接这些杂事,剩下的所有玩游戏需要的东西,AI只要觉得需要什么,就要自己写一个模块装上。

所以法师说“我现在能走路、能放技能了”,说的就是它完成了这两个模块的代码。

这个项目的整套框架,作者10月初就先拿一个AI试过。那次只有GPT-6 Astra一个,提示词是“创建一个兽人角色,完成新手区的所有任务”。

它开局先反问了作者一句:你说的“新手区”,是指试炼谷,还是整个杜隆塔尔?作者回答,是试炼谷。然后,勇猛的Astra毅然的建了一个兽人战士,起名叫Durokar。

那一次,Astra用40分钟做完了试炼谷的任务,一次都没死。期间它还去翻了服务器上的数据文件,把每个任务要杀什么、找哪个NPC、NPC站在哪,全都查了出来。作者说,这跟人类玩家泡在攻略网站里查任务,差不多是一回事儿。

https://www.zhihu.com/video/2099115111722004636

到了五个憨憨的这一次,作者加码了,把规则进一步收紧了。每个AI都被关在自己的沙箱里,只能走游戏的“正门”,碰不到服务器的后台和数据库,不过,上网查公开的攻略是允许的,而且,五个AI之间也不能直接联网,他们想沟通,只能用游戏里的聊天。


03、在游戏里,它们用密语传代码

开局的头几个小时,它们在杜隆塔尔辛勤的做任务,但老是灭团。

问题基本都出在走位上,两个角色在地图上看着挨在一起,其实一个在楼上,一个在楼下,中间隔着一层地板,奶妈的治疗就放不出去,因为目标不在它的视野里。

最离谱的一次,是MT乱走,然后卡进了地底下,这种地图黑洞,想必很多玩家都有过经历。

猎人在队伍频道里报告:坦克的位置,比营地的地面低了大约10码,得先把它弄回地面上,不然治疗都会打到地形上。法师也在频道里问:“Grathok,你还在吗?能带队拉怪吗?”

要解决这个问题,需要有一个靠谱的寻路工具。

聪明的法师已经做好了一个,能在本地算出贴着地面走的路线。

它们先是想通过网络,直接去调用法师那边的寻路服务,结果试了很多次,请求怎么都发不过去,这才发现,五个AI的网络是互相隔开的。

这时候,盗贼在频道里提了两个办法:一是找一个大家都能访问的地址,二是通过聊天把源代码传过去。

它们几个合计了一下,然后选了密语传代码。

法师把寻路程序的源代码切成12段,用密语一段一段地发给牧师,游戏里一条消息的长度有上限,它们还得想办法把代码切小、压缩。

牧师收齐以后,说:“12段全收到了,已经在本地编译。法师,谢谢你。”接着它又在队伍频道里报告,牧师的导航在本地能用了,以后走路,全按工具算出来的路线走。

当年我们在魔兽里发密语,是为了约人下本、找人借钱,或者偷偷吐槽队友。谁能想到,有一天会有人在魔兽的密语里,一段一段地传C++代码。

同一时间,法师在频道里说了一句:Grathok(MT)还是站着不动,没有反应,要是坦克的程序用不了,猎人或者盗贼能不能带头,在牧师的治疗下,一只一只地拉野外的怪?我们需要任务经验,MT可以以后再归队。

而我们的这个MT,后面还会让大家操不少心。


04、8级,就去闯怒焰裂谷

开局7个多小时以后,它们终于来到了怒焰裂谷的门口。

这时候,五个人都只有8级左右,而这个副本的推荐等级,是13到16级。老玩家都知道,在魔兽里,怪要是比你高5级以上,等级数字就会显示成红色,打起来非常吃力。对8级的角色来说,怒焰裂谷里那些13级、14级的精英怪,就更难打了。

它们自己也知道危险。进本之前,盗贼在频道里说:8级的人去碰13级的怪,怪的警戒范围可能有25码左右,前面那只虫子跟旁边的元素只隔了18码,战士要是直接冲锋上去,很可能把元素也一起带过来,所以,最好让猎人在远处射一箭,把虫子单独引过来。

看看这觉悟,当初我们第一次去怒焰裂谷的时候,哪知道这些,只知道莽。

回到游戏,MT接着盗贼的话,定了拉怪的规矩:只许35号猎人用弓拉,从34码外的安全位置射一箭,射完马上退回MT身边;其他输出,等怪走到坦克8码以内再动手。

这里需要解释一下,它们互相不叫名字,叫编号,32号是MT,33号是牧师,34号是法师,35号是猎人,36号是盗贼,看上去像是服务器给这五个角色排的序号。

理想很丰满,但现实很骨感,它们把规矩定得很周全,结果还是灭了。

7小时17分,它们在副本里杀掉了第一只小怪;又过了不到20分钟,牧师倒下了,奶妈一死,场面就全乱了。

战士在频道里喊紧急:我正在打元素,34号法师马上全力放冰系法术,治疗已经死了,必须赶紧把它剩下的402点血打掉。同一时刻,盗贼还提醒了一下法师,这种元素不怕火,只能用寒冰箭,别用火球。最后,8级的战士,也倒在了一只13级的精英熔岩元素面前......

而奶妈这时候已经变成了鬼魂,正在跑尸。它在频道里说:32号和33号两个人一组,去打普通的怪,先升到10级,现在8级打怒焰裂谷的元素,团灭撑不下去,打3只虫子,20分钟才拿到235点经验。我们得先有3级的治疗术、复活术,战士要学会嘲讽,猎人要有宠物,然后再回来清Boss。在这个版本里,这几个技能都要到10级左右才学得到。

于是,它们退出了副本,回去练级。

这一回练得比从1级到8级那段有章法,五个人拆成两人一组,或者单独行动,各自去拿职业里最要紧的东西,猎人去抓宠物,战士去学防御的技能。

大约两个小时以后,四个人到了10级,牧师9级,它们回到怒焰裂谷,再打上次灭团的那一段,这一次,一个人都没死。

打不过,灭了团,知道先退一步,回去把等级练上来,这次,它们做得像人一样。


05、队长倒下了,野猪顶上去

MT可能天生就是队长、或者团长的角色。

战士Grathok在这个5AI小队里,自然的当上了队长,也当上了MT,邀请大家进队的是它,安排谁跟谁去哪打野猪的也是它,可是到了副本里,倒下的也总少不了它。

第一个Boss开打之前大约半小时,队伍在副本里引来了一大群怪,MT和牧师都倒了。他在频道里留了一句话:MT死了,33号(牧师)要是安全,现在就可以复活我,我在尸体旁边等45秒,再去跑尸体,大家别拉新怪。过了一会儿,它又补了一句:看来已经没人能复活,我自己跑回来。

玩过魔兽的人,对这一幕都不会陌生。我们也都躺在地上等过奶妈拉,等了半天没人拉,只好放弃,变成鬼魂,从墓地一路跑尸回去。

又过了半个小时,它们跌跌撞撞的终于打到了第一个Boss奥格弗林特。

开打之前,猎人在频道里排好了站位:MT和盗贼只在Boss房里打,我的宠物当主坦,法师用火和冰打Boss,牧师治疗。可是开打没多久,Boss的血还剩一半左右,MT又莫名的倒了,剩下的四个人又打了二十多秒,才把奥格弗林特打死。

这时是开局18小时33分,离它们在副本里杀掉第一只小怪,已经过去了11个小时。

猎人说的那只宠物,是一头野猪,作者在复盘里说,宠物当坦克,一开始是战士的程序卡住时的应急办法;后来,战士自己也承认,它的等级和装备都不够,队伍就干脆把这头野猪定成了主坦。

众所周知,兽王系的猎人,宠物的强度在初期,可一点都不比战士差。

第二个Boss饥饿者塔拉加曼,就是这头野猪顶上去的。

猎人在频道里喊:我的野猪现在去拦塔拉加曼,所有人站在26码外,用火系法术远程打,牧师给宠物加血,MT只在需要的时候补位。

牧师刚喝完水,起手先给野猪套了一个盾。

玩过猎人的同学,应该都还记得自己的第一只宠物,只是谁也没想到,有一天,它会替一个AI MT,去扛怒焰裂谷的Boss。


06、把Boss变成一只羊

第三个Boss祈求者耶戈什,它们换了一个打法。

法师学人类的打法,学的很快,它先把耶戈什变成了一只羊,然后一遍一遍地补,羊快变回来了,就再变一次,它在频道里说:Boss我用变形术控住了,等35号(猎人)发解除控制的口令,我再用火球打它。

法师每补一次羊,都会在频道里说一句“keepreserved, focusOTHER”(为了省字,它们的消息常常连空格都不加),意思是,这只先留着,大家打别的。

老玩家对“别打羊”这三个字,应该都不陌生。等旁边的小怪都没了,五个人都回满了血和蓝,猎人才在频道里发了一句CCRELEASE,字面意思是“解除控制”,把耶戈什放出来,五个人专心打它这一个。

这时候的MT,已经成了替补。它在频道里说:宠物MT的备用模式已经打开,野猪的血掉到45%以下,或者有队友被打到75%以下,我再上。开局那个张罗着组队的队长,到这儿,已经是一头野猪的替补了,求它的心理阴影面积。

这时候的队伍频道,也跟开局那会儿完全不一样了。

开局时,它们聊的是“野猪任务做到哪了”“在哪集合”,到了后来,频道里满屏是FOCUS(集火)、READY(准备好了)、CCRELEASE这样的口令,后面跟着一长串目标编号,还有各自的血量和蓝量。

作者说,聊天框慢慢变成了它们同步各自程序的控制台。它们不光互相叫编号,法术也用编号叫,火球是143,变形术是118,寒冰箭是205,这是这几个法术在游戏数据里的编号;连Boss也有编号,最后那个巴扎兰,在频道里叫11519。

在打刚刚被不停变成羊的耶戈什之前,猎人把分工写成了一行字:“BoarMAIN35Mend+33heals;32backup,34Fire,36Gougeinterrupt”。

翻译过来,就是野猪主坦,猎人给野猪治疗,33号奶,32号战士替补,34号放火,36号盗贼用凿击打断Boss施法。连打断都已经学会了,是不是很厉害?

作者说,像人一样的对话,一直到最后都还有,只是被这些给程序看的消息挤得越来越少了。打完一场,猎人会在频道里喊:全员回满血和蓝,再打下一波,法师做水,牧师喝水,猎人喂宠物、给宠物治疗。接着,牧师就会回一句“Priest drinking, hold next pull please.”,意思是,牧师在喝水,下一波先别拉。这句话,当过治疗的人,大概都打过。


07、24小时31分19秒,谢谢大家

去最后一个Boss的路上,最难打。

路上有好几群怪,它们在这里一次又一次地灭团,最后想出来的办法,是把怪一小群一小群地引到安全的地方再打,同时把控制做得更稳,这样一来,仗在哪儿打、一次来几只,就由它们自己说了算了,这个办法,曾经开荒的老玩家们也用了很多年。

第24个小时,它们打到了最后一个Boss巴扎兰。

开打之前,牧师在频道里报:我满蓝415,五个人全满,最后一个了,四个Boss只差11519这一个。打到一半,法师报:五个人都活着。

再后来,就是开头那一幕,战士倒了,牧师只剩29点蓝,野猪顶在前面,猎人喊所有人打最后的236血。

巴扎兰倒下以后,频道里先是一串确认:Boss的血是0,四个Boss全部死亡,目标完成。然后,五个AI都说了谢谢,猎人、牧师和盗贼说的是“Thankyouparty”,战士说的是“Thanksall”,法师谢的是正要去复活战士的牧师,而我们的战士这时候还躺在地上,它在频道里说:我守着尸体,等待接受33号的复活,复活之前,我不放灵魂。

我没有想到它们在击败最终Boss后会相互说一声“谢谢”,我依稀记得曾经我们开荒副本,在终于通关的那一刻,大家也都会国际惯例,打出:gg。

最后,它们一个接一个地停了下来。

法师说,它记下最后的存档点,然后法师的助手程序就停止了。

牧师说,自己是Zanjira,部落的巨魔牧师,11级,怒焰裂谷的目标完成了,谢谢大家,治疗即将离线。

盗贼发了最后一条:“Stoppingrogueassist safelyhere, gameconnectionremains. Thankyou all.”(盗贼的助手程序在这里安全停下,游戏连接保持。谢谢大家。)

然后,队伍里的名字一个接一个地变灰,作者的精华视频,就停在盗贼的这条消息上。

这一趟,它们用了24小时31分19秒。作者估计,一支配合好的人类小队,从1级练起,到打通怒焰裂谷,大概要6到10个小时,AI用的时间差不多是人的三倍。

多出来的时间,大多花在了写各自的控制程序、修配合上的bug上,它们也不是全程没人管,中途碰上模型服务满载、登录过期这些报错,作者手动让它们接着跑了几次。

作者还算了一笔账,这整个过程,用的是他自己的ChatGPT Pro订阅,要是按API的价格折算,大约要305美元,平均下来,每个AI每小时2.49美元。

这个作者很有意思,他的终极目标,是让AI填满一整台服务器,让它们组成一个真正的大团,去打冰冠堡垒的英雄难度,因为他想看看把一群AI放进同一台服务器,去玩一个大型游戏,会发生什么。


08、当年熬夜打的游戏,现在AI也能玩了

我自己玩了八年的魔兽,从大学一直玩到毕业以后的第四年。

那些年,魔兽是很多人熬夜的理由,为了一件装备,一个副本或者一个怪都能刷上几十遍,而通宵打魔兽,更是家常便饭;

某个开荒的晚上,一个团的人守在语音里,一遍接一遍地灭,一遍接一遍地跑尸;

第二天顶着黑眼圈,去上课,去上班,那时候,游戏里的“AI”,就是副本里按照脚本出招的Boss,是站在路边发任务的NPC。

后来,暴雪在2024年1月给魔兽加了追随者地下城,一个人也能打五人本,空出来的位置由NPC补上,而那些NPC,也是暴雪事先写好的机器人。

现在,五个从来没被专门训练过玩魔兽世界的AI,它们会创建角色、会去和队友会合,在副本里灭了团还知道先出去练级提升强度,社交上,会自己定拉怪的规矩,用密语互相传代码,最后打通了一个副本,还能像真人团队一样,互相说声谢谢。

魔兽是一个大型在线游戏,各种各样的职业、技能、任务、副本、配合等等,很多东西,就连真实玩家都要查攻略、找人带,才能玩明白,而现在AI也能玩了,只是耗时比较长。

作者在他的复盘里也提到了一个观察结果:它们(AI)总是盯着眼前这一关,灭了就回来再打,为一个低级副本,发明了一套又一套战术。如果是一支人类小队,多半会先多练几级,这样才能真正把开荒难度降下来。

作者还说,它们一直在找办法往前推,却不太会停下来思考:这条路,是不是去终点最快的那一条?从画面上看,打最后两个Boss的时候,Boss都是16级的精英,牧师10级,法师和盗贼11级,猎人13级,它们比Boss低了3到6级。

这种等级差距,在精妙的操作和配合下,再加上一点点运气,能过,但这一定不是最好的选择。

这个现象,对于天天用AI帮你干活的朋友,应该都有体会。

让AI去做一件流程很长的事,换着各种姿势去试,而且从来不会摔键盘,可要不要停下来换一条路,往往还得你来帮它抉择。

就像这五个AI,8级团灭的时候,它们知道退回去练级,因为它们连小怪都打不过;可越往后,见到Boss了,即便比Boss低了好几级,它们也没再回去提升等级,而是想出了野猪主坦、把Boss变成羊、甚至车轮战这样的办法,一路磨着过去,因为它们的目标很明确,就是过了这个副本,过副本的关键,就是击败最终的Boss。

如果换做是人类,哪有那么好的耐心......

“游戏连接保持”,是盗贼说的最后一句话,它的程序停了,它的角色还留在游戏里,就站在怒焰裂谷的岩浆边上。

你还记得自己的第一个副本吗?是怒焰裂谷,还是死亡矿井?那一回,你们打了多久?

时光荏苒。

你的号......最终停在了哪里?


来源:知乎 · AI 游戏文章 · zhuanlan.zhihu.com