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”时,我们会得到匹配,尽管那是错误的答案。
-