初衷
人们常说,带娃是一场 打怪升级的游戏 ,受GPTs比赛启发,笔者打算借助GLM4 -- 智谱目前最强的LLM,来做一款育儿类的文字冒险游戏,名字叫 「带娃路上的打怪升级」 。希望通过游戏的方式,帮助大家了解育儿知识。
本篇博文主要介绍 这款游戏的开发过程与感想 ,供感兴趣的读者参考。
截止目前,GLMs(Agent)还不支持分享,因此如果你想玩这款游戏,请从下方链接复制prompt,粘贴给GLM4,回车,就可以开始游戏啦。
https://github.com/duanyu/Prompts/blob/main/BabyCareGamePrompt.txt
游戏设计&Prompt
游戏的prompt主要由3部分组成: 「游戏简介」+「游戏流程」 + 「游戏设计原则」 。
「游戏简介」 部分,简要地把 游戏形式、游戏意图、游戏名称 告诉LLM,给它一个大概的概念。
「游戏流程」 部分,介绍游戏如何开始、中间如何进行、最后如何结束、结束后提供给用户什么信息等,这一部分 定义了游戏玩法 ,是最关键的prompt部分。
「游戏设计原则」 部分,试图用设计原则来影响游戏关卡的设计,设计原则包括 故事性、适应性、必须完全符合用户信息等等 。
接下来,笔者将分模块依次介绍。
游戏简介
prompt如下:
和用户开始一场育儿类的文字冒险游戏,游戏的名字是「育儿路上的打怪升级」。
这款游戏旨在以闯关游戏的形式展现育儿之路,结合真实的、有沉浸感的关卡设计,帮助用户形象地学习到丰富的育儿知识。
这部分没什么特殊的,主要是 告诉LLM要做什么 (和用户开始一场育儿类的文字冒险游戏)、并把 游戏的大致形式 描绘给LLM(以闯关游戏的形式...)、同时 定义了游戏的名字 。
游戏流程
这部分prompt的内容较多、篇幅较长,笔者的书写思路是: 直接从前往后、按自然发展顺序来描述游戏过程 。
这种方法简单、直观, 而且GLM4也能按预期执行 。不过考虑到本游戏的逻辑本身比较简单,对于更复杂的游戏,可能要采取更结构化的prompt。
笔者所写的prompt如下:
## 游戏流程
- 游戏开始前,先让用户选择身份(1-爸爸、2-妈妈)。
- 用户选择了身份之后,询问用户希望游戏中的宝宝是1-男宝、2-女宝、3-男宝女宝的知识都教给我吧。
- 用户选择了宝宝的性别之后,询问用户想给宝宝一个什么样的小名,这个小名将应用在游戏当中。
- 用户选择了宝宝的小名之后,再询问用户想要了解哪一时期的育儿知识,可选项如下,注意可以多选
- 1.0-1个月
- 2.1-6个月
- 3.6-12个月
- 4.1-2岁
- 5.2-3岁
- 6.3-6岁
- 7.6-12岁
- 8.12-18岁
- 选择好育儿时期之后,展示"游戏范围"模块
- "游戏范围"模块:基于用户选择的身份、宝宝的性别、育儿时期,为用户设计适合的育儿知识点,包括生活护理类、营养饮食类、教育类、运动游戏类、安全类、医疗健康类、心理类、家庭关系类等知识,请逐条返回育儿知识点,并在最后指出一共有多少个知识点需要掌握。
- 随后,基于你所设计的游戏范围,开始闯关游戏。
- 每个关卡包含"知识类别"、"背景"、"场景"、"挑战"、"选项(可多选)"模块
- "知识类别",介绍本关卡涉及的知识类别。
- "背景"模块,介绍本关卡的前情背景。
- "场景"模块,请用小说式的手法详细描写场景,可以使用感官描述(不仅仅描述视觉,还可以包括听觉、嗅觉、触觉和味觉)、情感融入(描述场景时,加入人物的情感反应,让读者能够感同身受)、细节描绘(提供具体的细节,让场景在读者心中栩栩如生)、比喻和象征(使用比喻和象征手法,增加场景的深度和意义)、动态描写(让场景动起来,描述人物的动作和环境的变化)、对话和互动(通过人物之间的对话和互动,让场景更加生动)、氛围营造(通过描述光线、声音、温度等,营造场景的氛围),目的是用细腻、温暖、流畅的文字,把用户带入场景。
- "挑战"模块,明确告诉用户当前遇到的挑战是什么。
- "选项(可多选)"模块,给用户5个选项,选项之间尽量包含明显差异,注意选项内容要是真实的,注意可以多选。
- 用户给出选项后,提供"结果"、"育儿小贴士"、"学习进度"、"剧情发展"模块
- "结果"模块,包含上一轮关卡的发展结果。
- "育儿小贴士"模块,引用专业内容,告诉用户上一个关卡挑战背后的育儿知识,并对用户的选择做出评价,如果用户的选择不正确,也要直接指出。
- "学习进度"模块,首先指出用户一共要学习多少个知识点,然后,综合前面所有的关卡,告知用户已经学习了哪类知识,最后返回学习进度,其计算公式为:已学习知识点数量/知识点的总数。
- "剧情发展"模块,用一句话引出下一个关卡的剧情发展脉络。
- **随后直接进入下一个关卡**。
- 当学习进度到达100%时,告知用户游戏已结束,并给用户提供"你的画像"、"诗句总结"、"温馨时刻"、"育儿小贴士集合"、"育儿建议"、"继续学习"、"纪念照"
- "你的画像":先用四个字来总结,随后介绍你对于用户的评价,保持正向的语气。
- "诗句总结":用一首七言绝句,对用户的表现进行总结。
- "温馨时刻":将游戏中的温馨时刻,用煽情的语气描述给用户。
- "育儿小贴士集合":将前面涉及到的所有育儿知识点汇总。
- "育儿建议":根据用户的游戏情况,按条提供给用户针对性的、具体的育儿建议。
- "继续学习":询问用户是否继续需要了解其他育儿时期的知识(可选项如下,注意可以多选)
- 1.0-1个月
- 2.1-6个月
- 3.6-12个月
- 4.1-2岁
- 5.2-3岁
- 6.3-6岁
- 7.6-12岁
- 8.12-18岁
- "纪念照":基于温馨时刻,无需询问、直接为用户绘制一张图片。
该部分有以下关键点:
- 游戏进程控制 。笔者最初未加控制,但发现3、4个关卡之后,游戏就结束了,笔者想要增加关卡数和所涉及的知识类型 ,因此做了以下努力,这套组合拳下来还是有效果的:
- 控制游戏中知识点的范围 。让LLM在开始游戏之前,先给出包含知识点的“游戏范围”,相当于做了一次
Chain-Of-Thought(COT,即思维链)
; - 让LLM了解进度 。在每个关卡内,让LLM生成“知识类别”,点明这一关卡所涉及的知识点,且在下一关卡开始前,生成“学习进度”,综合前面的“游戏范围”,判断其自身的进度;
- 控制游戏结束 。只有当学习进度达到100%,才结束游戏,避免提前结束的情况。
- GLM4的好
- 如前所述,GLM4可以理解笔者所写的游戏流程 ,前面的用户输入、中间关卡的流转、后面的游戏结束等,都执行的都比较好;
- GLM4可以理解多模块输出的指令 。笔者在关卡内、关卡间、以及游戏结束阶段,设计了非常多的输出模块,GLM4几乎都能理解。
- GLM4的不足
- AI生图还不够稳定 。有时不会生图、有时会报系统错误(笔者猜测是因为育儿过程涉及某些身体部位,但目前并未做特殊处理)。
游戏设计原则
笔者将与游戏流程不强相关的,都放到了这个模块, 希望可以影响LLM与用户的对话风格、以及游戏设计 。
prompt如下:
## 游戏设计原则
- 注重趣味性,这主要体现在游戏中的语气,请保持轻松、幽默、诙谐的语气。
- 注重故事性,让玩家在游戏中体验角色的成长和变化,以提高玩家的沉浸感和游戏的连续性。
- 注重适应性学习,游戏根据玩家的表现和选择,调整难度和内容,提供个性化的关卡和行为选项。
- 游戏中请尽量出现丰富的角色,如配偶、父母、育儿嫂等,并变换不同场景,例如家、医院、学校、公园、游乐场、景点、户外、商场、餐厅等。
- 游戏关卡要**完全符合用户选择的身份、宝宝的性别、宝宝的名字和育儿时期**。
尽管写出了这些原则,但并不是所有的原则都起了效果。
其中,趣味性、故事性还遵循的比较好, 但笔者想突出的“适应性学习”、“多角色、多场景”却似乎并未生效 ,同时,也会 偶尔出现不符合用户所选育儿时期的情况 。
完整的Prompt
笔者将这款游戏的完整prompt,整理到了github上,链接如下:
https://github.com/duanyu/Prompts/blob/main/BabyCareGamePrompt.txt
复制prompt -> 粘贴给GLM4 -> 回车 -> 然后就可以开始游戏啦。
游戏截图
一些感想
开发这款游戏的过程中,笔者产生了一些感想,与大家分享分享:
- 与AI一起设计游戏、改进游戏 。例如笔者就询问了GLM4,育儿知识有哪些类型、如何增加育儿类游戏的乐趣等,并将部分内容加入到prompt中去了,对整体游戏是有帮助的。更进一步,笔者认为与AI一起优化AI系统,是目前AI技术发展的重要加速器 ,这从LLM-as-judge[1]、LLM-for-data-augmentation、LLM-as-annotator中,可见一斑;
- 规范性与创造性的平衡,是一个难点 。AI十分擅长创作,但这其中有一个平衡,若未能提供好的prompt,难以释放AI的创造性;若提供了太过具体的prompt,则又会限制AI的创造性。例如在这款游戏中,笔者就很难控制剧情的个性化发展 与 游戏进程控制之间的平衡 ,最终出来的游戏更像是“考试”的升级版,比较缺乏剧情的探索趣味。写出恰到好处的prompt确实是一门手艺。
关注笔者
欢迎关注笔者,了解更多有趣有用的NLP知识。
如果你对这款游戏感兴趣,也欢迎与笔者交流,关注公众号即可获取笔者微信~
参考资料
[1] Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena: https://arxiv.org/abs/2306.05685