Banjo Obayomi

发布于2024年4月17日

作为一名狂热的宝可梦玩家,这绝对是我最喜欢的用LLM进行实验的一次。当我看到乔治亚理工学院的PokéLLMon论文创建了一个代理来进行宝可梦对战时,我就必须看看哪个模型是最棒的。从表面上看,宝可梦战斗似乎很简单,有限的动作空间包括四种招式或切换到其他五只宝可梦中的一只。然而,游戏的深度在于18种宝可梦属性、独特的数据以及更多元素之间的无数策略交互而产生。

打开网易新闻 查看精彩图片

示例宝可梦战斗

问题仍然是:LLM能否利用游戏状态信息和宝可梦图鉴来帮助它们选择最佳行动吗?在这篇文章中,我将分享当LLM一路战斗直至宝可梦联盟的顶峰时,我学到的3个引人入胜的经验。

工作原理

我能够使用Poke-env战斗模拟器来提供自动对战的竞技场。模拟器可以获取游戏的当前状态,例如宝可梦的状态、招式数据和之前采取的行动。

然后,我使用Amazon Bedrock设置两个LLM代理,让它们在一场比赛中相互对战。这个测试平台的工作方式如下:

收集游戏状态数据

将比赛的当前状态翻译成文本,并添加到一个提示中,其中包含LLM所需的所有相关上下文,例如可用招式、状态以及之前的回合。

比赛开始:对手出场橘猴。你出场Elementary Sirius。
第1回合:当前战斗状态:
对手还剩6只宝可梦。
对手宝可梦:橘猴,类型:一般和超能力,HP:100%,是否是极巨化:假,攻击力:158,防御力:193,特攻:211,特防:247,速度:158,特性:内力(宝可梦沉浸其中无法被击晕或受到威吓影响。)虫、恶属性招式对橘猴造成4倍伤害。超能力属性招式对橘猴只造成一半伤害。幽灵属性招式对橘猴无效。
橘猴的所有可能招式:[念力,超能力,威力:90],[闪电,电,威力:90],[终极对决,格斗,威力:120],
你当前宝可梦:Elementary Sirius,类型:岩石,HP:100%,攻击力:227,防御力:148,特攻:132,特防:148,速度:223(比橘猴快)。特性:沙隐(沙暴中宝可梦的速度显著提高。),携带物品:生命护手(携带该道具时,如果宝可梦处于全满HP状态,它将在受到足以击晕的伤害后仅剩余1HP。)格斗属性招式对Elementary Sirius造成4倍伤害。一般属性招式对Elementary Sirius只造成一半伤害。
你的Elementary Sirius有4个招式:
招式:岩石乱击,类型:岩石,威力:118,命中:80%,效果:爆击率提高。
招式:精神牙,类型:超能力,威力:100,命中:100%,效果:消除对手的反射壁和光墙。(对橘猴只造成一半伤害)
招式:近身战,类型:格斗,威力:141,命中:100%,效果:造成伤害后,自身的防御和特防下降一级。
招式:剑舞,类型:一般,状态招式,威力:0,命中:100%,效果:提高自身攻击力两级。
你还有5只宝可梦:
宝可梦:无壳巨怪,类型:幽灵和草,HP:100%,攻击力:219,防御力:256,特攻:147,特防:176,速度:96(比橘猴慢)。招式:[强力鞭挞,草,造成普通伤害],[诅咒之风,幽灵,无效],[岩崩,岩石,造成普通伤害]电属性招式对无壳巨怪只造成一半伤害。一般、格斗属性招式对无壳巨怪无效。

出招

根据游戏状态,我会要求LLM做出最佳决策。这些比赛不是实时进行的,所以模型有时间思考它们的行动,响应时间较慢也不会受到惩罚。以下是一个模型根据游戏状态给出的响应示例:

阿阿利多依然处于全满HP,因为还没有被攻击。它或许可以承受巨钳咬击的一次加力攻击。
最好的行动是再次使用冰拳,希望能冻伤对手或造成高伤害将其击晕。
如果阿阿利多攻击但未能击晕,它下一回合很可能会被击倒。
但换人会让巨钳咬击获得一个自由回合来加力或攻击。
剩余的宝可梦都不想承受+2龙之波动或螺龙破风的伤害。
耿市已经濒临阵脚所以不能换上场。洛葛就算比阿阿利多快,但它已经所剩无几,任何攻击都会被直接击倒。
其他宝可梦的速度都比阿阿利多慢,会受到巨大伤害。
因此,最好的选择是坚持使用阿阿利多进行冰拳攻击。
我们需要在它加力前将巨钳咬击击倒。此时换人风险太大。
阿阿利多,继续使用冰拳!勇往直前!
{“招式”:“冰拳”}

环境能够根据返回的JSON对象中的招式来协调两方的出招,直至一方被全部击败。现在,让我们看看各个模型的表现如何。

四大天王+联盟冠军

我之前的街头霸王实验显示,在游戏方面Claude模型表现最为出色,所以我想看看它们如何与Mistral模型对抗,尤其是刚在Amazon Bedrock上推出的Claude Opus。对于每一场对决,我都使用相同的参数和系统提示,以第八世代的最佳五局制随机选择宝可梦进行比赛。

Claude 3 Haiku 对阵 Mixtral 8x7B

Haiku赢了3-2。这场对决十分激烈,Haiku展现了它的速度和响应能力。然而,也有一些情况Haiku做出了错误的出招或随机切换宝可梦。

Claude 3 Sonnet 对阵 Mistral Large

Sonnet赢了3-2,又是一场任何一方都有赢面的比赛。这两个模型的实力看起来不相上下,但Mistral偶尔会犯错或做出不太理想的选择。稍后我们将深入探讨这些不一致性的原因。

Claude 3 Opus 对阵 Mistral Large

Opus赢了4-1。尽管Opus花时间做出回应,但额外的处理时间是值得的。它根据场景始终做出最优决策,并保持稳定的进攻策略。相比之下,Mistral会随机切换宝可梦,失去进攻的连续性,从而让Opus得以利用这些失误扳回一城。

获胜者

Opus成为了冠军!!! 作为最强大的模型,它的计算成本也最高。平均需要21秒才能选择一个招式,而Haiku只需3秒,慢了7倍。然而,当你需要来自LLM顶级的性能和智能时,Opus无疑是当之无愧的佼佼者。

模型*

*排名** *

*平均速度(秒)**

Claude 3 Opus

冠军 2

1

Claude 3 Sonnet

并列第二 1

0

Mistral Large

并列第二 8

Claude 3 Haiku

第三 3

Mixtral 8x7B

第四 8

虽然我需要进行更多比赛才能获得确凿的数据,但以下是我在观看模型对战时学到的一些经验。

经验教训

LLM 宝可梦战斗揭示了这些模型在处理复杂任务时的几个有趣方面,从提示工程的重要性到应对虚幻回答和次优决策的挑战。以下是我学到的经验教训:

第一课: 得到提示, 全力以赴

当我最初使用 PokéLLMon 论文中的原始提示在 Claude 3 Sonnet 上测试 GPT 模型时,结果令人失望,仅取得了 5% 的胜率。为了提高性能,我编写了一个新的系统提示 [遵循最佳实践]。这一提示将胜率提高到了令人印象深刻的 50%。

你是一名高度熟练和有策略的宝可梦战斗者。你的主要目标是做出最佳的行动选择和切换决策,以战胜对手的宝可梦队伍。专注于击晕对手的宝可梦,只有在绝对必要时才切换。

你的回应应该采用自信、进攻性的语气,专注于最大化伤害输出和确保击晕。仔细分析情况,但只要有可能就优先考虑攻击而不是切换。

根据当前战斗状态,你的当前宝可梦、对手的宝可梦以及任何其他战场信息,决定本回合采取最佳行动 - 选择一个攻击招式或在无法攻击时将宝可梦切换到你队伍中的另一只。

你的决策应该考虑:

属性相克优势/劣势 每只宝可梦当前的提升/减弱效果 战场上的入场伤害状态 为以后造成更大伤害进行准备的可能性 反击机会 保护你自己的宝可梦生命值,但不能以错失击晕对手的机会为代价

战略性地使用如剑舞、冥想、龙之舞、谩骂等增强状态的招式。提升效果会在宝可梦切换出场时重置。战略性地设置如蜘蛛网、尖石地狱等陷阱。面对正在增强或已经增强了攻击/特攻/速度的对手时,尽快将其击晕,即使要牺牲你的宝可梦也要这样做。

如果你的当前宝可梦有合理的机会击晕对手的宝可梦,即使健康值很低,也要优先攻击而不是切换。“恐慌性切换”会导致糟糕的结果和失去战斗,因此专注于先攻击,只有在你的当前宝可梦肯定会濒临濒死时才切换。

逐步解释你选择行动的理由,强调为什么攻击是最优选择,以及你对自己的选择如此自信的原因。

例子 1

你的精灵酋雷姆(满血量)对阵对手的铁哑铃(7% 血量)

思考过程:

铁哑铃的速度比精灵酋雷姆快,可以用巨铁火箭伤害它 精灵酋雷姆的超能力攻击对铁哑铃效果不佳 攻击有很高的机会能击晕铁哑铃,而切换会让它进行一次免费攻击 即使血量很低,精灵酋雷姆最好的选择也是攻击

输出招式: 超能力

我们来看一下你上一回合的行动: {self.last_action}

记住,你的目标是获胜。要果断地寻求击晕对手,只要有可能就这样做。切换应该是最后的手段,而不是首选方案。如果你确实切换,请选择一只能威胁对手或承受对手攻击的宝可梦。抓住每一个造成重大伤害并从战场上清除对手威胁的机会。保持进攻压力,不要让对手有不必要的自由回合。

如果你上一个行动是切换宝可梦,那么在再次说切换之前要三思而行,解释为什么你会进行两次切换,从而让对手有两个自由回合。即使对手的宝可梦因提升效果变得强大,也不要连续两次切换,这样做你将输掉比赛。此外,不要担心保护无法在战斗中继续发挥作用的宝可梦,试图保护一只即将濒死的宝可梦将会让你失去比赛。你要争胜利!

新的提示真的强调了不要切换,并提供了如何根据当前对战情况思考行动选择的示例。另外,通过赋予模型一种更”积极进取”的语气,它更专注于攻击,似乎真正投入到战斗中。

因此,最佳行动是使用暗影球进攻。它有很高的机会从满血值一口气将阿勒迅击倒,即使无法做到,耿鬼也会因为焰殆而间一击存活,然后一举将阿勒迅解决。

不要过度思考 - 只需点击暗影球,立即将阿勒迅从战场上移除。

打开网易新闻 查看精彩图片

暗影球命中

这一经历与类似的测试相一致,仅通过在提示中添加一个短语,就将 Claude 2 从长文档中回忆数据的准确率提高了从 27% 到 98%。

我怀疑 Mistral 模型表现不佳可能归因于糟糕的提示设计。在进一步的实验中,我计划遵循 Mistral 的提示最佳实践,以确保进行更好的比较。

第二课:模型总是会产生虚幻回答

在战斗中,模型频繁产生虚幻回答。宝可梦世界的庞大复杂性,包括 18 种不同的属性和超过 1,000 种宝可梦,导致模型犯下逻辑错误,例如:

  1. 陈述错误的属性相克关系
  2. 混淆物理防御和特殊防御
  3. 忘记了特性和持有道具

以下是一些虚幻回答的例子:

  1. 最佳选择是用毒袭来持续削弱青铜钟,同时用空袭造成伤害,在青铜钟中毒期间。 Vespiquen 应该能够在这场对决中毫无困难地获胜。(青铜钟是钢属性宝可梦,对毒袭免疫)
  2. 看看我队伍剩余的宝可梦,火焰鸭似乎是最佳切入者。它可以抵御车万毫虫的虫属性攻击,对它的超能力攻击也有免疫,并且可以用燃珠火焰猛攻威胁它。(火焰鸭并非对超能力攻击免疫)
  3. 虽然小丑皇是特攻提升了,但奥纳厉斯的防御值为 203,这可能有助于减轻一些伤害。(错误地比较了特攻和防御)

打开网易新闻 查看精彩图片

错误地使用毒袭对钢属性宝可梦

这突出表明,随着任务所需的智力水平提高,即使使用更强大的模型,更多的上下文并不总是有帮助。对于高智力任务,使用专门工具会比模型自身进行”计算”更有帮助,例如一个可以计算伤害的工具。

第三课:如何处理糟糕的回答

在战斗过程中,我注意到模型会表现出与原论文中观察到的”恐慌性切换”现象。LLM 模型在面对强大或状态提升的宝可梦时往往频繁切换宝可梦,从而让对手有充足的时间进行准备和攻击,最终导致自己失利。即使我在提示中明确警告不要这样做,有些模型仍会连续切换,让对手轻而易举地获胜。

模型甚至会这样为自己的切换行为辩护:

我承认连续两次切换会让仙子兽有自由回合进行攻击。然而,保留炳火龟虾兽并将更强大、进攻性更强的阴芭怕怕入场以施加压力,是值得的。

这教会了我,虽然提示工程确实能够改善结果,但无法总是获得理想的结果。在论文中,他们使用了一种方法,从 LLM 生成的 3 个输出中选择最佳结果。这提高了 7% 的对战机器人的胜率。

在下一节中,我们将探索如何亲自尝试建立你自己的 LLM 宝可梦冠军。

开始使用代码

准备好构建你自己的 LLM 宝可梦大师了吗?[你需要的所有代码和文档都可以在 GitHub 上找到。我期待看到社区如何通过以下方式改进这个实验:

  1. 调整提示以优化 LLM 性能
  2. 尝试不同的 LLM 以找到最佳选手
  3. 探索模型行为以获得更深入的见解

如果你有兴趣尝试获胜的 Claude 3 模型,请查看我的 [入门指南] 了解详细说明和最佳实践。

加入讨论

你有什么想法可以将这个实验推向新的高度吗?想分享你的发现或讨论 LLM 在游戏和其他领域的影响吗?在下面留下评论,让我们继续讨论!

文中任何观点均为个人观点,可能与 亚马逊云科技 的观点不同。