Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • CreatiCode
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo

CreatiCode Scratch Forum

  1. CreatiCode Forum
  2. 知识库
  3. 小教程
  4. ChatGPT人工智能:谁是卧底?(难度:3级)

ChatGPT人工智能:谁是卧底?(难度:3级)

Scheduled Pinned Locked Moved 小教程
1 Posts 1 Posters 3.3k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • C Offline
    C Offline
    creaticodeteacher2-mail
    wrote on last edited by admin
    #1

    介绍

     
    游戏中传统的人工智能角色都比较“枯燥”。它们重复不断地说同样的语句,因为它们是由游戏开发人员提前编写好的“脚本”所驱动。

    现在这个问题可以用ChatGPT解决。ChatGPT能使游戏角色用自然语言与用户沟通,这可以让游戏更加有趣、更加不可预测。

    在这篇教程中,我们将制作一个简单游戏“谁是卧底?”。玩家和几个人工智能角色对话并猜测谁是间谍,我们用ChatGPT为这些角色生成回答内容。

    Animation12.gif

     
     

    第1步 - 改编模板项目

     
    从以下这个项目为起点,进行改编,该项目包含4个角色:一位博士和三个动物助理(狗、驯鹿和猴子)

    https://play.creaticode.com/projects/31abbb3f6b05f826173310d1

     
     

    第2步 - 为ChatGPT编写游戏规则描述

     
    当玩家开始游戏后,首先我们要向ChatGPT描述游戏。游戏描述应当包含以下几部分:

    1. 角色分配:我们让ChatGPT扮演“游戏主持人”,帮我们主持游戏。
    2. 游戏背景:我们将告诉ChatGPT这是一个猜谜游戏,及其背景故事。然后ChatGPT在整个游戏中帮我们主持故事情节。
    3. 游戏规则:我们要告诉ChatGPT非常详细的游戏规则——它应当做什么、不应当做什么。否则,玩家会很容易诱骗ChatGPT使其泄露答案。

     
    下面是一个游戏描述示例:

    你扮演一个游戏主持人,主持一个游戏《谁是卧底》。

    背景:

    “博士”运作一个神秘的实验室,实验室里有三个聪明的助理(小狗、驯鹿和猴子)。实验室设计了一个革命性的、能改变世界的机器人。最近,机器人的设计图纸在实验室被盗了。据传言,其中一个动物密探行为异常,是偷图纸的卧底。博士邀请游戏玩家找出谁是卧底。不知什么原因监控摄像头没有起作用,所以不能指望监控摄像头了。

    说明:

    你随机选择一个动物助理扮演卧底。只有你和卧底知道谁是卧底。玩家可以向医生和助理询问任意问题,你要替每个被询问的角色想出回答内容。注意,卧底会撒谎。 当你回答问题时,要始终用以下格式:

    “角色:回答内容”。

    游戏玩家猜过之后游戏就结束,然后你就公布谁是卧底。


     
    注意,我们给ChatGPT确定了回答问题的特定格式:“角色:回答内容”。原因就是,ChatGPT会向我们呈现任意一个角色的回答,所以为了便于处理回答,我们要让回答的格式固定。

     
     

    第3步 - 向ChatGPT发送游戏描述

     
    现在我们把游戏描述发送给ChatGPT。我们可以在博士角色中添加如下代码:

    1.png

     
    我们用的是“系统请求”,比普通请求的权重更强。我们把ChatGPT的回复保存在变量“回复”。

    现在请大家把游戏描述复制到积木“系统请求”。如果谁需要编辑描述,应该还记得可以用注释框来帮助编辑。

     
     

    第4步 - 打印ChatGPT的回复,用于调试

     
    为了在开发项目中回顾ChatGPT的回复,我们可以把回复内容打印到控制台面板,如下所示:

    2.png

     
    当你运行项目后,会停顿一会儿,然后就会看到这样一条回复(看不到的话就多尝试几次):

    3.png

     

    出现这种情况是因为,ChatGPT要给出一个非常长的回复,达到了字符数限制。比如,ChatGPT可能会重复说明游戏的描述,就是为了表明自己理解了游戏描述,也可能会生成一些玩家与角色之间的对话示例。

    我们应当避免这种情况发生,原因有二:

    • 现在我们还不需要ChatGPT生成回复内容,因为我们不能把这呈现给游戏玩家;
    • 回复内容越长,玩家就必须等得越久。

     
    为了避免这个问题,办法很简单。我们只需要优化提示语,告诉ChatGPT如何回复。比如,我们可以在系统请求提示语的末尾加上这句话:


    现在你只说“准备就绪!”,不要说其他内容。然后等待游戏玩家问问题。


     
    这是让ChatGPT尽量少说的常用办法。如果你再次运行项目,应该会很快就得到完整回复:

    Animation1.gif

     
     

    第5步 - 欢迎游戏玩家

     
    现在ChatGPT做好准备了,还要告诉玩家开始游戏。我们可以让“博士”欢迎游戏玩家并说明游戏规则。例如,我们可以加入一个积木“说( )”,积木中输入以下语句:


    欢迎侦探!正如我们之前在电话中所说的,一份高度保密的机器人设计图纸被盗了,我相信我的三个助理其中之一就是偷走图纸的卧底。你点击我们任意一员即可询问。


    得到如下结果:

    Animation2.gif

     
     

    第6步 - 点击博士进行询问

     
    我们让游戏玩家点击博士进行询问。具体而言,当玩家点击博士角色时,就会让玩家输入问题。我们还是用积木“打印( )到控制台”来回顾问题。注意,积木“回答”的值是玩家输入的内容,并不是ChatGPT的回答,这一点容易让人混淆。

    Animation3.gif

     
    之后控制台面板如下图所示:

    4.png

     
    如上图所示,如果用户不输入内容,积木“回答”的值为空。

     
     

    第7步 - 获取ChatGPT的回答

     

    现在我们把用户输入的内容发送给ChatGPT,ChatGPT就会为博士角色生成回答内容。仅当用户输入不为空时我们才能进行此操作:

    5.png

     
    说明:

    • 我们将“博士,”和用户输入内容连接起来,以便于ChatGPT知道我们在和博士对话。
    • 我们使用模式“完整回答”,这样的话,直到我们获得ChatGPT的完整回答并存入变量“回复”,我们才运行下一个积木。
    • 因为我们要让ChatGPT记住我们之前告诉它的游戏描述,所以会话类型设置为“继续”。
       
      现在博士就能和我们对话了,对话是完全自然的,完全没有预先编排。其实,作为游戏开发人员,此时我们也不知道答案,因为我们要求ChatGPT秘密选择一个动物作为卧底。

    Animation4.gif

     
     

    第8步 - 整理ChatGPT的回答

     

    目前,ChatGPT的回答以“博士:”开头。对于我们游戏开发人员来说是有好处的,但我们不应当向玩家展示这些内容。我们可以用这种办法来删除:用分隔符“:”把回答内容分开成两部分,只显示第二部分。

    15.png

     
    现在博士的回答就不包含前缀“博士:”:

    Animation13.gif

     
     

    第9步 - 用鼠标使医生高亮显示

     

    由于游戏是通过点击角色来玩的,普遍的做法就是,当鼠标悬停在角色上时高亮显示,这样的话玩家才知道哪个能点击。我们可以用积木“当碰到鼠标指针时”来触发此状态。为了使角色高亮显示,我们只需要将其“亮度”设置为一个正值。当角色高亮显示时我们还可以播放声效。

    6.png

     
    结果如下:

     
    Animation5.gif

     
     

    第10步 - 退出高亮显示

     

    当鼠标离开角色上方时,就应当退出高亮显示。我们可以用积木“等待( )不成立”一直检查角色是否还碰到鼠标指针。不再碰到鼠标指针以后,我们把亮度重置为0。

    7.png

     
    结果如下所示:

    Animation6.gif

     
     

    第11步 - 把代码复制到小狗角色

     

    至此,博士角色的代码就完成了。我们可以把整串代码复制到其他角色重新使用。首先从小狗角色开始。唯一要改的地方就是向ChatGPT发送问题时所显示的名称。也需要给小狗角色添加声效“Hit 5”。
     

    Animation7.gif

     
    现在小狗角色也有了高亮显示和回答问题动作:

    Animation8.gif

     
     

    第12步 - 把代码复制到驯鹿和猴子

     

    现在用同样的方式把代码复制到驯鹿角色和猴子角色。不要忘了修改向ChatGPT发送请求时的角色名称。

     
     

    第13步 - 隐藏对话气泡

     

    有一个新问题:当玩家切换不同的角色进行询问时,前一个角色仍然显示对话气泡。

    Animation9.gif

     
    为了解决这个问题,每当有角色被点击时我们就要让所有角色隐藏对话气泡。解决办法就是,当某个角色被点击向所有角色广播一条消息,并等待消息被处理完成。当收到广播消息时,角色只需要说0个字即可隐藏对话气泡。以防角色告诉玩家输入问题,我们还要用积木“停止提问”来使其隐藏问题。

    8.png

     
    提醒:全部4个角色都要完成此操作。

     
     

    第14步 - 用一个按钮提交答案

     

    此时,玩家为了调查案件,可以一直询问所有角色。我们还需要为玩家提供一种方式来提交最终答案。

    首先,我们回到舞台上,当项目开始时添加一个按钮:

    9.png

     
    不要忘了可以用工具“控件位置”来调整按钮的位置和大小。

    按钮如下所示:

    10.png

     
     

    第15步 - 显示选项

     

    当玩家点击按钮“谁是卧底?”,我们要显示几个单选按钮供玩家选择。除了3个动物以外,还要加一个选项,就是让用户能够回退一步并进一步思考。

    11.png

     
    输出结果如下:

    Animation10.gif

     
     

    第16步 - 处理玩家的选择

     

    为了处理玩家的选择,我们可以编辑单选按钮的“点击”事件。用积木“控件( )的值”能找出玩家的选项。如果玩家选择“让我再想想”,我们就应当移除单选框。

    12.png

     

    Animation11.gif

     
     

    第17步 - 把玩家的作答选项提交给ChatGPT

     

    如果玩家选择三个动物之一,我们就提交给ChatGPT,让ChatGPT告诉我们是否正确。

    13.png

     
    注意,现在我们呼叫“游戏主持人”,因为只有游戏主持人能裁定游戏结果。

     
     

    第18步 - 显示最终结果

     

    最后一步,我们用一个文本框显示ChatGPT的回答。我们要保证文本框足够大以显示完整。我们还要移除其他控件,让玩家不能重复提交作答。

    14.png
     
    游戏最终演示如下:

    Animation12.gif

     
     

    创意扩展

     

    以本项目为基础,可以按照以下思路进一步探索:

    • 博士有时候把自己称为“博士”,而不是“我”。想想如何改进提示语来避免。
    • 如果玩家向多个角色提问问题,比如“各位,图纸被盗的时候你们在哪里?”,我们要显示所有角色的回答。
    • 大家可以用“文字转语音”积木让角色和玩家对话。
    • 大家可以更改游戏的角色和背景故事,例如图书馆的书被盗、神秘朋友送的礼物盒子。甚至可以用历史人物玩游戏。
    1 Reply Last reply
    1
    • CreatiCodeI CreatiCode pinned this topic on

    Hello! It looks like you're interested in this conversation, but you don't have an account yet.

    Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

    With your input, this post could be even better 💗

    Register Login
    Reply
    • Reply as topic
    Log in to reply
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes


    • Login

    • Don't have an account? Register

    • Login or register to search.
    • First post
      Last post
    0
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • CreatiCode