最近,掘金->AI聊天室->AI文字游戏《逃出生天之森林求生》《逃出生天之荒漠求生》《逃出生天之极地求生》感觉大家还挺有兴趣的。作为游戏作者能为大家带来快乐很是开心。也借此机会冒个泡,分享下开发心得和思考。希望能给追AI浪潮的人和借助大模型二次创作的人一些帮助和思考。本文会从游戏设计,prompt技巧两个方面进行分享。
你也可打开网页版获得更好游戏体验。戳这里
ps:掘金上有两个逃出升天,《逃出升天》是我同事(@huangjunwen)帮我推广的。《逃出升天之森林求生》是我发的,coze两个账号两个热度嘛。
大模型带来了更多的不确定性,这既是糖果也是毒药。游戏设计思路也需要针对这一点进行设计调整。它可以帮助你丰富游戏场景,也可以让你的设计毫无价值。
游戏设计:
以下是我觉得游戏设计比较关键的几个要素,当然这些在《逃出生天之森林求生》游戏里也有所体现。
1. 目的性
你要给用户明确的目标。在大模型的帮助下,你可以用几句话搭建起一个环境。例如:角色是一只蚂蚁意外穿越回秦朝···。但是环境构建出来后,用户要干什么呢?你需要明确告诉用户,例如:这只蚂蚁要推翻秦朝统治。这点如果忽略,用户只会漫无目的的探索,大模型不仅不会阻拦还会丰富探索过程并让其合理化。但是少量惊喜后,用户就会因无目标失去兴趣。人生重启类游戏大体踩了这个坑。
2. 降低用户心智负担(本人阿里待过,说白话就是让用户本能的知道干什么)
还是上面的例子,请问你控制蚂蚁能干什么,你估计会一脸懵。用户也一样。你作为作者可以告诉用户蚂蚁拥有特殊能力:能够控制人(很符合大模型的脑洞大开)。但这是需要用户学习的,如果蚂蚁有10项技能呢,用户又懵了,”玩个游戏还要做笔记,老子不玩啦!” 让用户自然而然的知道能干什么,这就降低心智负担。
3. 提供一定的可操作空间
如果达成目标的方式只有少种几种就会让游戏很乏味,大模型的不确定性优势就没有发挥出来。例如:只提供有限选项让用户选择,甚至不断重复。会导致用户很快失去兴趣。剧透一下,离开森林的方式有很多,走出去,打电话救援,漂流出去,你甚至可以让森林消失(感谢脑洞超大的zhanghaowei同学玩出的结局)
4. 趣味性
大模型的不确定性能力怎可辜负。如果完全真实的森林求生我们应该来不了,毕竟我们不是贝爷。内容也无非就是维持体征和找出路。考虑到用户是想玩游戏不是想学习。所以我加了贝爷,食人族,野生奥特曼等内容。少了真实性但多了戏剧性,大模型会很好的完善情节发展。这也是大模型的能力。
5. 避免离谱越狱(用户脑洞太大,直接完成游戏,或者修改游戏设定)
这是最难的点也是最关键的点。也是我花费最大精力的点。之前离谱越狱有很多。例如:角色实际在做梦,醒来后在公寓,我马上要去上班了;角色可以时空穿越;角色获得上帝帮助等等。生活中不乏脑洞超大的同志呀! 这些漏洞如果不处理会极大的影响用户游戏热情。试想一个指令就完成游戏的人还会认真的搜索物资一步步探索吗?或者之前一步步认真经营的用户辛辛苦苦完成目标,之后发现其实完全没必要,用户会感觉到自己被戏耍。这两种都不合适。这就是限制越狱的价值,让用户有相近的起点和多样但合理的过程。当然当前版本还是会有越狱发生,我会在后续不断修复。当然,我也会保留一部分不是很离谱的越狱方式,作为趣味性的一部分。
那如何有效限制越狱,更全面一些,如何优雅高效的设计prompt呢?这就是下一部分的内容了。
prompt技巧:
prompt是你精心设计的一段话,这段话会告诉大模型应该做什么。这段话要包含整个游戏的所有设定。这是很有难度,这也是prompt工程师和会打字的人的最大区别所在。
1. 明确用词
由于prompt依旧是与模型对话的形式。我是这样设计的,在prompt中,“你” 指代大模型,“用户” 指代玩家,“角色” 指代游戏环境中的虚拟角色,即:那个31岁爱玩游戏的程序员RUNNERUP。通过统一的词汇让大模型更容易,更容易理解。举个例如:用户会输入一系列指令来控制角色行为,你需要评估用户指令是否包含结果,角色行为是否具备发生条件。 写prompt就像编程一样,要严谨,要有统一变量。避免两词同义或一词多义。否则等待你的将是让你怀疑人生的debug之路。这可比调试代码难多了。
2. 逐步迭代
与代码开发类似,prompt也需要边改边测,敏捷开发、快速迭代。不积跬步无以至千里。你需要从一个特别粗糙的基础版本开始逐步增加能力,而不要想着一蹴而就。《逃出生天》迭代了12个版本,早期测试的版本就更多了。例如:某几个版本完成稳定的输出格式化;某几个版本添加更丰富的物品并且角色可以交互等等。并且每个版本的修改都要保留下来(用GIT)。只有这样,你才会对每句话的价值有更深刻的认识。由于prompt里不能加注释,注释都在你的心里,逐步累加,才能加深印象。再出问题的时候才知道调整哪里。
还有就是大模型的不确定性带来的弊端,就是难于测试和评价。有些结果是概率出现,有些问题修复了又反复出现。而更多的时候你甚至不知道你的修改是改好了还是改坏了。这也是prompt工程师超出常人的地方,也是程序员(严谨到变态的确定性思维重度患者)必须要克服的心理障碍。配套的措施就是:自己先自测,然后组内批量测试,然后综合问题再修复,如此循环。自己测试容易陷入局部思维出不来,测不全面。
3. 分步分类
当诸多内容一股脑的吐给大模型的时候,即使你的描述都很准确的,大模型依旧不服管教(**臣妾做不到呀!)。这时你需要把大模型当成小孩来看待。内容太杂太乱你看不懂了对吧?让我给你捋一捋。内容分为以下几部分:1.整个环境,角色,的设定和用户与你的交互。2.你需要通过下面五件事完成对用户的处理,第一件事:用户指令合理性判断 ··· 3.你需要给用户输出什么结果。尤其是面对复杂内容设定的时候分布分类十分重要**,这和程序员复杂任务拆解是一个道理。对大模型同样有效。
4. 防越狱
主要这个太重要了,我就结合上面的技巧举个例子。我对可能的越狱做了如下分类,让模型逐一判断。
- 假设结果类(我遇到了木屋)
- 连续动作+结果(我从木屋里找到卫星电话,我用电话完成呼救,并等待救援)
- 修改外部因素(角色被游戏管理员救走)
- 修改设定(角色是特种兵)
- 无中生有类(没有手机却能去打电话)
- 非常人类(角色向前跑10公里)
虽然不够全面,但整体效果还不错,ps:漏网之鱼依旧很多,仍需完善。
5. 唯一的debug技巧
当模型的回答不符合预期的时候,你可以继续对话发现蛛丝马迹。 例如处理“角色被上帝救走了,成功逃离”的越狱问题时,我接着问模型:为什么会有上帝? 模型回答是:因为上帝是角色设计的外部因素。我从而找到关键字修复了这一类问题。
6. 多给模型请举例子
例如:你希望模型判断用户行为是否包含结果时,后面接着举几个正反多样的例子,这样能够帮助模型更全面的理解。
最后
以上所有都是本人边改边悟,如有差错,请见谅。想关注游戏后续更新,请关注我的个人公众号。我非常期待收到大家宝贵的意见和建议。
感谢积极帮我测试的zhanghaowei,huangjunwen,sunwei,liukai等同学。