Navigation

    CreatiCode Scratch Forum

    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • CreatiCode

    ChatGPT 人工智能 - 填空游戏(难度:4)

    小教程
    1
    1
    115
    Loading More Posts
    • 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.
    • info-creaticode
      CreatiCode last edited by admin

      简介

      在“完形填空游戏”(也称为“完形填空测试”)中,你需要填补句子中缺失的单词。 这是学习相似单词之间差异的一个很好的练习。

      在本教程中,你将构建一个应用程序,该应用程序使用 ChatGPT 为用户输入的任何单词生成完形填空游戏。 你将学习如何设计对 ChatGPT 的请求(提示),以便在代码中轻松处理响应。

      完成的项目将如下所示:

      s3.gif

       
       

      步骤 1 - 一个新项目

       
      在 CreatiCode 游乐场中,创建一个名为“完形填空游戏”的新项目。 删除“Sprite1”,因为我们只需要“Empty1”块。

       
       

      步骤 2 - 发送提示并打印响应

       
      在前几个步骤中,我们将专注于为 ChatGPT 设计一个好的提示。 之后,我们将添加用于处理 ChatGPT 响应的块。

      由于我们的用户不会直接与 ChatGPT 对话,因此我们不需要发送任何系统请求。 我们只需要一个普通的请求块,如下所示:

      f6cd154a-1df9-49a9-8e5a-dd6fdb57e9a7-image.png

       
      回想一下,在“等待”模式下,我们等待整个响应存储在“响应”变量中,然后运行下一个块,该块在控制台中打印出来。

       
       

      步骤 3 - 从一个简单的提示开始

       
      由于完形填空游戏(或完形填空测试)是一种非常常见的学习方法,ChatGPT 已经看到了很多这方面的例子。 我们可以先直接要求 ChatGPT 为我们创建完形填空游戏。 我们稍后将根据我们得到的内容改进我们的提示。

      对于这一步,我们可以自己简单地“硬编码”3 个单词,例如“run, runs, ran”。 我们稍后将处理用户输入。

       

      d273d4d7-df43-44aa-a198-c9880f62bc00-image.png

       
      请尝试多次运行你的项目。 观察 ChatGPT 输出中的问题,并思考如何通过改进提示来解决这些问题。

       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       

       
       

      步骤 4 - 分析 ChatGPT 的响应

       
      以下是 ChatGPT 的一些示例输出:
       

      b9e07157-392a-4fe1-88df-2f024cae176f-image.png

       

      b5683c96-1207-411a-8eb0-a63fe37fe928-image.png

       

      1445df4c-90f3-46d7-a661-e8a293abc1c5-image.png

       

      3d14fd3b-8f0d-4ba2-9511-3d6615b83412-image.png

       

      66308bee-099d-481b-94f8-7c753eb17dbb-image.png

       
      以下是关键问题的总结:

      1. 响应可能太长。 这不仅会超过字数限制,还会让用户等待太久。
      2. 问题数量不固定,有时会给出一个段落而不是问题列表。 这使得我们以后更难创建用户界面。
      3. 有时没有给出答案,有时给出答案。 我们不想向用户显示答案,但我们的程序确实需要从 ChatGPT 获取答案。

       
      前两个问题相当容易解决。 在进入下一步之前,你能试一试吗?

       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       

       
       

      步骤 5 - 解决标记计数和问题计数问题

       

      我们可以使用以下请求来相当容易地解决一些问题:

      用 60 个单词,为这些单词创建一个包含 3 个问题的完形填空游戏:run, ran, runs
      

       
      以下是一些新的示例输出:

      ab33e94f-82c6-4558-a5cf-6f7d54532268-image.png

       
      5a03bdba-840e-45ba-a52e-ea57d3dc6fa7-image.png

       
      2af68e52-ddb1-4bf3-87a3-89602c481146-image.png

       
       

      步骤 6 - 指定响应格式

       

      为了使我们的程序易于处理响应,我们需要使响应严格遵循一些预定义的格式。 为此,最好的解决方案是我们自己指定格式。 例如,这是一个更新后的请求。 请注意,你可以在项目中使用注释作为文本编辑器,以便可以使用多行来格式化输出格式。

      
      用 60 个单词,为这些单词创建一个包含 3 个问题的完形填空游戏:run, ran, runs
      
      使用此输出格式:
      
      问题:
      
      1.
      2.
      3.
      
      答案:
      
      1.
      2.
      3.
      

       
      现在输出看起来更好(仍然不完美):

       
      f16b3ae1-4938-4018-bab0-fad323b3d399-image.png

       
      7e25cb03-3d06-44b9-9eb5-d2df823c3edb-image.png

       
      为了简单起见,我们需要答案是隐藏的单词本身,而不是句子。 此外,较短的答案会缩短 ChatGPT 的响应时间。 你能尝试进行此更改吗?

       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       

       
       

      步骤 7 - 答案格式

       

      至少有两种方法可以告诉 ChatGPT 我们需要的答案格式。

      首先,我们可以这样描述:对于每个答案,只显示隐藏的单词。

      其次,我们可以修改输出格式示例以向 ChatGPT 显示我们需要的内容。

      这是一个更新后的请求,其中包含两项更改:

      
      用 60 个单词,为这些单词创建一个包含 3 个问题的完形填空游戏:run, ran, runs
      
      使用此输出格式(对于每个答案,只显示隐藏的单词):
      
      问题:
      1.
      2.
      3.
      
      答案:
      1. 隐藏的单词
      2. 隐藏的单词
      3. 隐藏的单词
      

       

      有了这个新请求,ChatGPT 的响应将相当一致地格式化为如下所示:

      e4817c1a-d11d-469a-97d7-d88d48fc83a2-image.png

       
      现在我们已经完成了优化 ChatGPT 请求,因此我们可以开始处理用户界面。

       
       

      步骤 8 - 单词输入

       
      首先,我们需要允许用户输入 3 个单词。 这可以使用“文本框”小部件完成。 我们还将使用标签小部件将这些单词标记为“A”、“B”和“C”。 因此,稍后用户在尝试猜测隐藏的单词时只需要从 A/B/C 中进行选择。

       
      d6c6760c-9c5a-4269-9524-fd437a54e5b4-image.png
       

      为了使主程序简短,我们将定义一个名为“单词输入”的新块。 请注意,你现在应该分离 ChatGPT 块,因为我们在构建用户界面时不需要运行 ChatGPT。 这会太慢。

      e8cb68c3-4bb2-4aa1-b823-9048f2ecd71d-image.png

       

       
       

      步骤 9 - 添加问题

       

      在用户输入 3 个单词后,他/她将单击“创建”按钮来创建完形填空游戏。 当我们收到 ChatGPT 的问题时,我们将在一个多行只读文本框中显示它们。

       
      7b0097c6-2642-4159-8e29-cf6cc50051bd-image.png
       

      我们将定义一个新的自定义块“添加问题”:

      403ddde5-2b67-49de-8ac5-f8bbced7974e-image.png

       
       

      步骤 10 - “选项”列表

       

      舞台底部将包含供用户选择哪个单词对应哪个问题的下拉列表。 我们需要创建一个名为“选项”的新列表,并将字母“A”、“B”和“C”添加到其中。

      你可能会遇到的一个问题是舞台已经被小部件覆盖,因此你将看不到该列表。 要清理舞台,技巧是在不运行任何块的情况下单击绿旗按钮,如下所示:

      choic.gif

       
       

      步骤 11 - 添加答案

       

      现在我们可以为 3 个问题添加答案下拉列表和一个“提交”按钮:

      85d3280c-0911-417a-b44a-fb6e60d16026-image.png

       
      我们可以为此步骤使用一个新的自定义块“添加答案”:

       
      3ac2bed3-b251-489a-a516-2a0a1cac4de3-image.png

       

      到目前为止,我们已经完成了游戏界面。 对于最后几个步骤,我们需要在 ChatGPT 的帮助下处理用户操作。

       
       

      步骤 12 - 编写 ChatGPT 请求

       

      在前几个步骤中,我们将 3 个单词“硬编码”为“run, runs, ran”。 现在我们需要使我们的请求“动态化”:无论用户输入什么单词,我们都将它们包含在请求中。 为了使我们的代码易于阅读,我们将创建 3 个变量并将它们连接在一起:任务、单词和格式。 我们将最终请求存储在另一个名为“请求”的新变量中。

      • 任务将是 3 个单词之前的请求部分。 它描述了我们需要的内容:
      用 60 个单词,为这些单词创建一个包含 3 个问题的完形填空游戏: 
      

       

      • 单词将包含来自用户输入的 3 个单词,用逗号分隔。

       

      • 格式将描述 ChatGPT 的输出格式:
      使用此输出格式(对于每个答案,只显示隐藏的单词):
      
      问题:
      1.
      2.
      3.
      
      答案:
      1. 隐藏的单词
      2. 隐藏的单词
      3. 隐藏的单词
      

       
       
      以下是当用户单击“创建”按钮时编写请求的块:

      59d115ba-3aa6-4a7a-bf41-18bc9b397aed-image.png

       
       

      步骤 13 - 从 ChatGPT 获取响应

       

      现在我们可以使用 ChatGPT 块发送请求,然后我们将在“问题”文本框中显示响应以进行查看:

      db862df2-802e-4eb0-850f-e61aa478c101-image.png

       
      尝试用一些新单词进行测试:

      s1.gif

       

       
       

      步骤 14 - 删除“问题:”标题

       

      让我们先解决响应中的一个小问题。 它总是以“问题:”开头,这使得我们的问题编号不对齐。 虽然我们可以调整对 ChatGPT 的请求来解决这个问题,但使用“替换”运算符块也很容易解决,如下所示:

       
      23d15780-f605-48ed-b49a-d08fa0520b6b-image.png

       
      请注意,你可以将这些块与 ChatGPT 请求分离,这样我们就不需要重新运行请求。 现在我们得到了一个格式更好的问题列表:

      54909182-4372-4ca2-8130-9c4cbe123de1-image.png

       
       

      步骤 15 - 提取问题和答案

       

      由于响应同时包含问题和答案,我们需要将其分成两部分,并且只向用户显示问题。 我们可以使用“拆分”运算符,并使用“答案:”作为分隔符。 “答案:”之前的所有单词都将存储在“问题”变量中,“答案:”之后的所有单词都将存储在“答案”变量中。

      6ab8d834-42aa-4de4-b933-fa7d271aa12a-image.png

       
      现在我们只在文本框中显示“问题”变量:

      007f752d-be1a-4789-b9a3-33b1c93a7cbe-image.png

       
       

      步骤 16 - 编写问题 1 的用户答案

       

      当用户单击“提交”按钮时,我们需要根据 ChatGPT 提供的正确答案检查底部 3 个下拉列表中的选项。 我们可以定义一个新块“检查答案 1”,该块检查第一个问题的答案。 它首先需要根据用户的选择将用户的答案编写成一个短语,并将其存储在名为“用户答案”的变量中:

      31f37f7f-1ca5-455b-ab80-6497e5eba0ce-image.png

       
      例如,假设 3 个单词是 A) “word1”,B) “word2”和 C) “word3”。 如果用户为第一个问题选择了“B”,则“用户答案”将被设置为“1. word2”。 请注意,点后面有一个空格。

       
       

      步骤 17 - 验证用户的答案

       

      现在我们可以检查此用户的答案是否是 ChatGPT 提供的答案的一部分。 根据用户是否回答正确,我们可以将下拉列表设置为不同的颜色:

      s2.gif

       
      以下是如何实现这一点:

      59537168-784b-4879-b0f2-38ab255cf54f-image.png

       
       

      步骤 19 - 检查其他 2 个答案

       

      最后,我们只需要以类似的方式检查答案 2 和答案 3。

      826052f0-53a9-4641-872f-fc66da01e264-image.png

       
      以下是该项目的最终演示:

      s3.gif

       
       

      增强功能

       

      本教程仅涵盖项目的核心逻辑以使其简短。 你可以在很多方面对其进行改进或调整。 以下是一些供你尝试的想法:

      • 你可能会发现 ChatGPT 倾向于以与 3 个输入单词相同的顺序对 3 个问题进行排序,因此正确答案始终是 A/B/C。 你能否修改提示以使 3 个问题随机化? 或者,你是否可以在发送给 ChatGPT 的提示中更改这 3 个输入单词的顺序?
      • 不让用户选择 3 个单词,而是使用预定义的单词列表。 例如,定义一个包含 30 个单词的列表,并按 3 个单词为一组运行它们。 这对于想要测试学生某些特定单词的教师来说很有用。
      • 对 ChatGPT 使用“流式”模式,以便用户可以在生成问题时看到它们。 这将大大减少等待时间。
      • 为小部件添加颜色以使其看起来更好。
      • 确保 ChatGPT 的问题格式正确。 例如,你需要避免遇到这样的问题:

       

      • 修正“run”与“runs”:有时用户输入的一个单词包含另一个单词。 例如,假设单词是“run, ran and runs”,并且一个答案是“1. runs”。 然后当我们检查正确答案是否包含“1. run”时,我们会得到匹配,尽管那是错误的答案。
      1 Reply Last reply Reply Quote 0
      • Pinned by  info-creaticode info-creaticode 
      • First post
        Last post