Datawhale干货
获奖:元贞、小罗,Datawhale优秀学习者
前 言
大家好,我是 2023 寻找游戏大模王 AI 原生应用大赛的 Top1 荆轲刺秦王团队的小罗,很高兴能在这里与大家分享我们这次比赛的经验,同时也希望以后有机会可以和大家一起交流学习~
图1.左二是我
初遇
首先,怀着对创作游戏和学习大模型的那么一份憧憬,作为 Datawhale 鲸英助教的我大胆地报名了 Datawhale 智能云大模型游戏应用开发活动的助教招募,准备和学习者一起探索大模型在游戏领域的应用,内心还是很希望能玩上自己亲手做的游戏~如下图所示我是二群的专业助教。
图2.助教团队
在学习群里,大家根据以往组队的经验,主动进行自我介绍,包含了所具备的技能点,想做的方向、组队的意向等。我也主动表达了愿意组队,随后,就被后来的队员拉进了一个小群,集齐队伍就开始了属于我们的游戏开发故事。
我们最开始讨论的是我们想要开发什么样的游戏以及如何分工。尽管我们六个人都没有游戏开发相关的经验,但我们都怀着学习和实践的态度,并且愿意投入时间和精力来学习和运用自己所学的知识来创建我们自己的游戏。
于是,我们开始了一次次头脑风暴和协作来不断优化我们的想法和项目计划。我们相信,通过团队的努力和持续地学习,我们一定能够开发出一款与众不同的、属于自己的游戏~
比赛过程
团队构成
成功的项目离不开一个成功的团队,离不开团队的协作和帮助。我们的团队构成基本如下:主要有六人组成:分工为剧本、美术、prompt 工程师、游戏主程、大模型对接工程师、视频剪辑师。(后续考虑到完善性,还应包括音效设计,动作设计)。
游戏方向选择
图3.赛事说明
从赛事说明中可以看出,这个比赛给参赛者提供了很高的自由度,可以任意发挥脑洞进行创作。所以最初,我们团队有很多想法,包括做三体游戏、破壁人和面壁者、无限流 CYOA 游戏等。但由于时间和技能点的限制,我们决定先开发一款基于文字+图片的 2D 游戏,再逐步扩展剧情、增加玩法以及优化美术。以下是我们 11.20 头脑风暴的一点记录。
随后,我们在讨论游戏的玩法时想到了将我们的小游戏与历史故事结合起来。正好,我们团队中有一位擅长写剧本的成员,可以为我们的游戏提供精彩的故事和角色!《荆轲刺秦王》是一部广为人知的历史经典故事,我们认为,如果能通过 AI 与这些经典历史人物进行交流,将会非常有意思(我真的很想知道项羽为何乌江不渡?)。在技术方面,由于团队成员之前没有游戏开发经验,所以最初我们考虑的是先去学 Unity 的基本操作,再使用 Unity 进行开发,并逐步进行优化。
与此同时,作为助教,我在前期整理了 RPG 游戏的相关案例开发流程教程。这无形中为我们几个没有接触过游戏开发的成员提供了一条新的思路。我们可以直接使用 RPG maker 来创建场景变换、人物移动等,而不必重新学习 Unity,从而减轻了一定的代码工作负担。这种方法可以说是另辟蹊径,为我们游戏开发过程提供了新的可能性。
感兴趣的小伙伴可以看看,RPG maker 小白入门教程:
https://saeikvpfb9v.feishu.cn/docx/XPFxdicdpoVUQ8xp6PEcLnqcntd
在游戏开发过程中,鉴于 RPG maker 在实现剧本部分内容方面存在困难,团队决定结合 RPG 游戏的特点,设想了一个更为宏大的背景,那就是加入两个势力的博弈,增加更丰富的剧情,让玩家和 AI 的交互具有更多的主观能动性。此外,我们决定使用 AI 生成人物立绘、让 AI 生成游戏情节等方式,使游戏变得更加丰富。下图所示是我们利用文心大模型生成的游戏人物宁姬的形象立绘(真的好美,我好爱这版宁姬):
图4.文心大模型生成的游戏人物形象立绘
与 AI 结合
接下来,我们考虑如何将游戏与 AI 结合起来,为玩家提供更具沉浸感的体验,同时也是这次比赛的要求之一。我们将此过程分为四个模块,包括游戏与大模型的结合、接入大模型接口、使用 RPG Maker 插件以及开发自己的游戏 npc。在这些模块中,生成个性化的 AI NPC 和利用大模型进行事件流控制是关键步骤。通过这样的方法,我们能够赋予游戏中的 NPC 独特的情感、行为方式和对话能力,从而提升游戏的沉浸感!
prompt 设计
为了生成拥有独特性格和背景故事的 NPC,我们使用自定义 Prompt 进行设计。以下是我们在设计 Prompt 时的一些讨论和想法:
图5.设计 Prompt的讨论
-
独特性格:我们通过在 Prompt 中描述 NPC 的特定性格特征,例如善良、乐观或内向等,以及他们的行为方式和态度来塑造 NPC 的独特性格。 -
背景故事:我们在 Prompt 中加入 NPC 的背景故事,包括他们的成长经历、家庭背景、职业经历等。这些细节能够帮助模型生成具有丰富而具有深度的 NPC 角色。 -
对话风格:我们通过在 Prompt 中设定 NPC 的对话风格,如幽默风趣、正式严肃或温柔体贴等,来使 NPC 更加生动有趣。 -
目标和愿望:我们将 NPC 的目标和愿望融入到 Prompt 中,描述他们追求的梦想、渴望的改变或追寻的价值观,以增加角色的动机和情感驱动力。
插件开发
我们利用了 RPG Maker 和百度智能云千帆大模型来开发一个 NPC 对话插件。然而,我们遇到了一个问题,即无法在流程上进行控制,导致剧情无法推进,只能进行一次对话而无法连续对话。为了解决这个问题,我们开发了一个根据历史聊天记录进行流程控制的插件,使角色可以与 AI NPC 连续对话。同时,我们还通过对话和事件驱动的方式来增强沉浸感和游戏体验。这样的优化大大地提升了游戏的体验效果。下图展示了玩家与 AInpc 对话输出的情况,让你能够体验仿佛就在与荆轲本人对话一般的真实感受!
图6.玩家与 AInpc 对话
在前两个插件完成之后,在我们的《荆轲刺秦王》游戏的初版和升级版都已经开发完成的情况下,我和元贞萌生了一个大胆的想法——那就是制作一款大侦探游戏,这也是我前段时间一直心心念念的游戏。受到《荆轲刺秦王》的开发经验启发,我们希望让多个 NPC 之间发生的事件和对话内容能够共享。然而,要让游戏中的 NPC 通过积累事实记忆并更真实地生活在游戏世界中,成为了当时我们面临的最大难题。
图7.游戏截图
例如上图,这个人物设定为艾米莉亚,但当与她对话时却自称为汤姆,这就是出现了记忆混乱的情况,真的开始怀疑自己是不是来搞笑的了。
图8.开发截图
再比如,跟它对话它说自己是人工智能语言模型,直接就跳出了游戏人物设定,这会让玩家直接出戏,从而影响游戏的整体体验!
为了解决这些问题,我和元贞在学习群里询问,看有没有什么好的解决方法让在这个圆桌上的所有 AI npc 都能知道当时侦探与每一位 AInpc 角色的所有对话,实现共享记忆。经过讨论最终获得了斯坦福小镇的思路,我们恍然大悟!在开始和 npc 对话的代码之前先调用了一次千帆 API。通过分析之前的对话和现有的事实性文本(从文本文件中读取),使千帆生成了事实性文本描述,并将生成的文本保存到本地的文本文件中。然后,我们将这些事实性文本加载到 system 中,作为额外的一段 Prompt,再与对话一起传递给模型,这样做的目的是让模型能够更好地理解上下文,并实现共享记忆的效果。插件部分代码截图,是我在原有插件的基础上写的!
图9.插件代码
以下是我们文件中的事实性文本和对应的文本描述:
图10.事实性文本和对应的文本描述
也就是说我们又开发了一个事实构造与记忆共享的插件,利用了事实构建、场景发掘和知识广播的技术,这使得所有 AI 角色都能了解我们跟其他角色之间的对话内容,类似于剧本杀或者狼人杀的机制。这样一来,NPC 们可以根据积累的事实记忆进行推理和互动,从而增加了游戏的复杂性和真实感。
这一插件为我们的大侦探游戏带来了全新的可能性,使得 NPC 之间的交互更加有趣和出人意料。玩家可以通过与 NPC 对话和推理事实来解开谜题找出真凶,体验到更加沉浸式的游戏体验。也就是说 i 人玩家可以一个人沉浸式地体验剧本杀的快乐啦~
图11.通过与 NPC 对话和推理事实来解开谜题找出真凶
最终我们是提交了三个视频如下(算两个游戏,第二个视频是在第一个视频的基础上升级剧情)
-
【打破次元壁,用百度千帆大模型开发一款《穿越秦朝·荆轲刺秦王》AI NPC 的剧情触发游戏!】 https://www.bilibili.com/video/BV1iC4y1c7S5
-
【【寻找游戏大模王】《穿越秦朝:荆轲刺秦王》全新更新!揭秘新剧情与开放源代码!-哔哩哔哩】 https://b23.tv/9dJbHiH
-
【【寻找游戏大模王】? 新游戏速递:48 小时极限开发的款大侦探解密游戏 v1.0《庄园密案——谁是真凶?》-哔哩哔哩】 https://b23.tv/1BS2DHS
结果
现在回想,还是超级开心!这个结果真的很出乎我的意料,看到我们两款游戏 demo 能够进入优质作品前十五名,并且《荆轲刺秦王》最终赢得了 2023 百度智能云游戏大赛的一等奖,这真是太棒了!!!!(虽然在我学校加不了量化
技术干货
我们团队完成了赛事组的 4 条参赛要求,包括
-
调用了千帆平台的大模型截图 NPC
-
使用大模型完成流程控制影响剧情发展
-
使用 comate 辅助代码
-
使用文生图模型画人物立绘图
并且为游戏引擎开发了可直接使用的插件,插件已经上传至 git 并开源,地址如下:https://github.com/npcAiGame/npcAiGame。
因为团队中一开始并没有人员参加过游戏开发,所以并没有选择 unity 或者其他比较复杂的游戏引擎,而选择了 rpg maker mz 作为了本次过程中使用的游戏引擎。Rpg maker 操作简单,功能多样,且绝大多数情况下不用编写代码,使得游戏制作过程大大简化,这样也保证了游戏进度可以在比赛时间内被较好地完成。
在确定了游戏引擎之后,便交由剧本开始编写剧本,当剧本交出之后,开始由美术画人物立绘图,同时游戏主程开始开发游戏流程,大模型接入工程师开始编写相关代码。因为 rpg maker 只能通过插件的方式植入代码,所以我们编写了相关的将大模型接入 npc 的插件,并且为了使与 npc 的对话能够推动流程的良好进行,我们还编写了相关的流程控制插件,其主要代码其实是通过另一个大模型接口,判断过去的对话中是否触发了某个条件。
我们利用全局变量作为连接大模型和游戏控制流程的关键。全局变量,一种在整个程序中均可访问和修改的变量,为我们提供了一种有效的方式来跟踪玩家的行动和游戏状态。例如,当大模型返回的 JSON 数据显示玩家完成了一个关键任务时,我们会将一个全局变量的值设置为 1,从而触发游戏中的下一个事件或转换。此外我们还开发了事件记忆的相关插件。
通过大模型,我们可以将玩家与游戏中的 NPC 之间的对话进行分析和总结,提取出关键的信息点,并将它们转化为“事实”。这些事实不仅包括玩家所做的选择和行动,也包括与 NPC 之间交流的具体内容。这种方法的核心在于,这些事实被保存在全局变量中,这使得游戏中的所有 NPC 都可以访问和参考这些信息。
这种设计的优势在于,当玩家与某个 NPC 进行下一次对话时,这些全局变量中的事实可以作为对话的 prompt 传递给 NPC。这意味着每个 NPC 在与玩家互动时,都能够根据之前发生的事件和对话做出更加合理和真实的反应。例如,如果玩家之前帮助了一个 NPC,那么这个行为的信息会被保存,并影响到未来与其他 NPC 的互动。
此外,这种技术还使得 NPC 能够“记住”玩家的行为和选择,并据此做出策略性的反应。这不仅增强了游戏的沉浸感,也提高了游戏的可玩性和复杂度。玩家的每个选择和行动都可能对游戏世界产生连锁反应,从而创造出独一无二的游戏体验。
我们通过编写详细的算法和编程逻辑来实现这一功能。例如,我们开发了一种机制,能够让大模型根据玩家与 NPC 的互动自动更新全局变量。同时,我们也确保这些变量能够在游戏的不同环节和场景中被有效地调用和应用。
参赛心得
图14.相信自己,相信队友
当你真正着手做的时候思路才变得逐渐清晰起来,行动,可以克服一切犹疑和思想障碍,带你走向真实的成功!
意外发现自己还蛮有策划天赋?被水哥称赞比一些游戏主策还厉害开心耶哈哈(斯突然意识到自己以前曾是学校英语爱好者协会策划部一员,没白费老部长的一番苦心教导~
感谢
非常感谢 Datawhale 提供这样一个平台,正是因为有了 Datawhale,我们才得以相遇,有机会走到一起成为一个 Team,因为 Datawhale&&在问&&chatTests 的支持,我们才能获得这个 Top1,并且遥遥领先!!!
图15.投票结果
同时感谢本次比赛的主办方-百度,提供了百度智能云千帆大模型平台,让我们将大模型技术融入游戏设计、创造出独一无二的游戏世界引爆创意的火花并重新定义游戏体验。以及感谢百度智能云游戏大赛的评审团队,他们对我们的作品给予了高度评价和认可。这为我们的项目带来更多的关注和机会,让更多的人了解和使用我们的创意和技术,颁奖是在智算大会时颁的也算是参加了百度智算大会!!!
最后,感谢我们团队中的每一位成员,从完成这个比赛,到入选前 15,最后荣获 Top1,每一次成就都凝聚着我们每一位成员的付出与默契协作。
Datawhale 不仅仅是一个开源平台,它更像是一座灯塔,引领着我们这群对知识有着无尽渴望的探索者,驶向更加广阔的技术海洋。正是 Datawhale 的理念和使命,鼓励并推动了开源文化的发展,让我们这样的团队能够在开放、共享的环境中成长,不断学习和进步。在这个平台上,我们不仅提升了知识和技能,而且更重要的是,我们还培养了团队协作和共同创造的价值观念,恰如那句“Datawhale 在学习路上伴你同行,我们本可以不那么孤单”。Datawhale 的每一次活动、每一次挑战,都激励着我们去超越自我,去追求卓越~
总体上来看,使用大模型进行游戏 npc 的制作,使之有血有肉,充满感情,这个是以后历史发展之必然,但是在此之前,依然很大程度上依赖于各家大模型基座的性能。在这次活动中,从一个完全没有游戏制作经历的队伍到最后获奖,队伍中的每个人都至关重要。游戏,作为每个人生活中不可或缺的部分,其根本的目的,不是为了使我们获得跟日常生活中一样的感受,而是为了使我们感到快乐,或者悲伤,以能充分调动我们的情感。像机械一般喋喋不休的智能机器人,远远不是最终的样子。