ChatGPT 人工智能 - 填空游戏(难度:4)
-
简介
在“完形填空游戏”(也称为“完形填空测试”)中,你需要填补句子中缺失的单词。 这是学习相似单词之间差异的一个很好的练习。
在本教程中,你将构建一个应用程序,该应用程序使用 ChatGPT 为用户输入的任何单词生成完形填空游戏。 你将学习如何设计对 ChatGPT 的请求(提示),以便在代码中轻松处理响应。
完成的项目将如下所示:

步骤 1 - 一个新项目
在 CreatiCode 游乐场中,创建一个名为“完形填空游戏”的新项目。 删除“Sprite1”,因为我们只需要“Empty1”块。
步骤 2 - 发送提示并打印响应
在前几个步骤中,我们将专注于为 ChatGPT 设计一个好的提示。 之后,我们将添加用于处理 ChatGPT 响应的块。由于我们的用户不会直接与 ChatGPT 对话,因此我们不需要发送任何系统请求。 我们只需要一个普通的请求块,如下所示:

回想一下,在“等待”模式下,我们等待整个响应存储在“响应”变量中,然后运行下一个块,该块在控制台中打印出来。
步骤 3 - 从一个简单的提示开始
由于完形填空游戏(或完形填空测试)是一种非常常见的学习方法,ChatGPT 已经看到了很多这方面的例子。 我们可以先直接要求 ChatGPT 为我们创建完形填空游戏。 我们稍后将根据我们得到的内容改进我们的提示。对于这一步,我们可以自己简单地“硬编码”3 个单词,例如“run, runs, ran”。 我们稍后将处理用户输入。

请尝试多次运行你的项目。 观察 ChatGPT 输出中的问题,并思考如何通过改进提示来解决这些问题。
步骤 4 - 分析 ChatGPT 的响应
以下是 ChatGPT 的一些示例输出:





以下是关键问题的总结:- 响应可能太长。 这不仅会超过字数限制,还会让用户等待太久。
- 问题数量不固定,有时会给出一个段落而不是问题列表。 这使得我们以后更难创建用户界面。
- 有时没有给出答案,有时给出答案。 我们不想向用户显示答案,但我们的程序确实需要从 ChatGPT 获取答案。
前两个问题相当容易解决。 在进入下一步之前,你能试一试吗?
步骤 5 - 解决标记计数和问题计数问题
我们可以使用以下请求来相当容易地解决一些问题:
用 60 个单词,为这些单词创建一个包含 3 个问题的完形填空游戏:run, ran, runs
以下是一些新的示例输出:


步骤 6 - 指定响应格式
为了使我们的程序易于处理响应,我们需要使响应严格遵循一些预定义的格式。 为此,最好的解决方案是我们自己指定格式。 例如,这是一个更新后的请求。 请注意,你可以在项目中使用注释作为文本编辑器,以便可以使用多行来格式化输出格式。
用 60 个单词,为这些单词创建一个包含 3 个问题的完形填空游戏:run, ran, runs 使用此输出格式: 问题: 1. 2. 3. 答案: 1. 2. 3.
现在输出看起来更好(仍然不完美):


为了简单起见,我们需要答案是隐藏的单词本身,而不是句子。 此外,较短的答案会缩短 ChatGPT 的响应时间。 你能尝试进行此更改吗?
步骤 7 - 答案格式
至少有两种方法可以告诉 ChatGPT 我们需要的答案格式。
首先,我们可以这样描述:对于每个答案,只显示隐藏的单词。
其次,我们可以修改输出格式示例以向 ChatGPT 显示我们需要的内容。
这是一个更新后的请求,其中包含两项更改:
用 60 个单词,为这些单词创建一个包含 3 个问题的完形填空游戏:run, ran, runs 使用此输出格式(对于每个答案,只显示隐藏的单词): 问题: 1. 2. 3. 答案: 1. 隐藏的单词 2. 隐藏的单词 3. 隐藏的单词有了这个新请求,ChatGPT 的响应将相当一致地格式化为如下所示:

现在我们已经完成了优化 ChatGPT 请求,因此我们可以开始处理用户界面。
步骤 8 - 单词输入
首先,我们需要允许用户输入 3 个单词。 这可以使用“文本框”小部件完成。 我们还将使用标签小部件将这些单词标记为“A”、“B”和“C”。 因此,稍后用户在尝试猜测隐藏的单词时只需要从 A/B/C 中进行选择。

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

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

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

步骤 10 - “选项”列表
舞台底部将包含供用户选择哪个单词对应哪个问题的下拉列表。 我们需要创建一个名为“选项”的新列表,并将字母“A”、“B”和“C”添加到其中。
你可能会遇到的一个问题是舞台已经被小部件覆盖,因此你将看不到该列表。 要清理舞台,技巧是在不运行任何块的情况下单击绿旗按钮,如下所示:

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

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

到目前为止,我们已经完成了游戏界面。 对于最后几个步骤,我们需要在 ChatGPT 的帮助下处理用户操作。
步骤 12 - 编写 ChatGPT 请求
在前几个步骤中,我们将 3 个单词“硬编码”为“run, runs, ran”。 现在我们需要使我们的请求“动态化”:无论用户输入什么单词,我们都将它们包含在请求中。 为了使我们的代码易于阅读,我们将创建 3 个变量并将它们连接在一起:任务、单词和格式。 我们将最终请求存储在另一个名为“请求”的新变量中。
- 任务将是 3 个单词之前的请求部分。 它描述了我们需要的内容:
用 60 个单词,为这些单词创建一个包含 3 个问题的完形填空游戏:- 单词将包含来自用户输入的 3 个单词,用逗号分隔。
- 格式将描述 ChatGPT 的输出格式:
使用此输出格式(对于每个答案,只显示隐藏的单词): 问题: 1. 2. 3. 答案: 1. 隐藏的单词 2. 隐藏的单词 3. 隐藏的单词
以下是当用户单击“创建”按钮时编写请求的块:
步骤 13 - 从 ChatGPT 获取响应
现在我们可以使用 ChatGPT 块发送请求,然后我们将在“问题”文本框中显示响应以进行查看:

尝试用一些新单词进行测试:
步骤 14 - 删除“问题:”标题
让我们先解决响应中的一个小问题。 它总是以“问题:”开头,这使得我们的问题编号不对齐。 虽然我们可以调整对 ChatGPT 的请求来解决这个问题,但使用“替换”运算符块也很容易解决,如下所示:

请注意,你可以将这些块与 ChatGPT 请求分离,这样我们就不需要重新运行请求。 现在我们得到了一个格式更好的问题列表:
步骤 15 - 提取问题和答案
由于响应同时包含问题和答案,我们需要将其分成两部分,并且只向用户显示问题。 我们可以使用“拆分”运算符,并使用“答案:”作为分隔符。 “答案:”之前的所有单词都将存储在“问题”变量中,“答案:”之后的所有单词都将存储在“答案”变量中。

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

例如,假设 3 个单词是 A) “word1”,B) “word2”和 C) “word3”。 如果用户为第一个问题选择了“B”,则“用户答案”将被设置为“1. word2”。 请注意,点后面有一个空格。
步骤 17 - 验证用户的答案
现在我们可以检查此用户的答案是否是 ChatGPT 提供的答案的一部分。 根据用户是否回答正确,我们可以将下拉列表设置为不同的颜色:

以下是如何实现这一点:
步骤 19 - 检查其他 2 个答案
最后,我们只需要以类似的方式检查答案 2 和答案 3。

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


- 修正“run”与“runs”:有时用户输入的一个单词包含另一个单词。 例如,假设单词是“run, ran and runs”,并且一个答案是“1. runs”。 然后当我们检查正确答案是否包含“1. run”时,我们会得到匹配,尽管那是错误的答案。
-
I 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