ChatGPT 人工智能:增强 ChatGPT 进行数学计算的能力(难度:3)
-
简介
像 ChatGPT 这样的大型语言模型非常擅长处理文本和解决问题,这使得它们看起来几乎聪明得可怕。然而,随着你使用它们越来越频繁,你会发现它们在许多其他任务上表现得很糟糕。
其中一项任务就是数学计算。例如,假设我们用一个乘法问题测试 ChatGPT:
使用任何计算器,我们都可以轻松算出 3516 乘以 357 等于 1255212。ChatGPT 犯这个错误是因为它实际上并没有计算结果。相反,它在其训练数据中见过许多类似的乘法,所以它试图猜测输出数字应该是什么样子。由于数学计算在许多任务中都至关重要,我们必须找到一种方法来帮助 ChatGPT 正确计算。在本教程中,你将学习一个简单的解决方案。基本思想是,我们将教会 ChatGPT 在计算方面寻求帮助,我们将在代码中帮助它计算出正确的答案。
第 1 步 - 初始项目
我们将使用以下项目作为起点。请将其改编为你自己的项目,并将项目命名为“ChatGPT with Calculation Help”:play.creaticode.com/projects/6531b7e60fdce080a4481c1d
第 2 步 - 验证问题
在我们进行任何改进之前,请尝试在这个项目中使用数学问题来验证 ChatGPT 在没有我们的帮助下无法正确计算:
第 3 步 - 序列图
在我们进行任何更改之前,让我们使用序列图来讨论这个项目的设计。
我们的项目中有 3 个实体:
- 用户:输入问题的用户
- ChatGPT:回答用户问题的 AI 模型
- 系统:这是我们的代码
目前,系统只是在用户和 ChatGPT 之间转发消息,如下所示:
为了帮助 ChatGPT 进行数学计算,我们可以更改图表,以便有时 ChatGPT 可以与我们的系统对话并获得答案,如下面 2 个额外的蓝色箭头所示:
这种设计的美妙之处在于,系统和 ChatGPT 之间的新消息可以对用户隐藏,因此在用户看来,ChatGPT 正在正确回答。
第 4 步 - 更新初始提示
由于我们将编写一个相当长的提示,让我们仍然使用“注释”区域来编写提示。首先,通过右键单击绿旗块添加注释区域:
接下来,将以下提示复制到注释区域:你是一个友好的助手。 当你需要进行数学计算时,你可以使用特殊的标签“CALC:”后跟要计算的表达式来响应系统,而不是响应用户。系统将向你提供答案,然后你可以生成对用户的响应。 现在说“你好”
此提示包含 3 个部分:- 它首先介绍了上下文,其中 ChatGPT 扮演友好助手的角色。
- 然后,向 ChatGPT 发出特殊指令,以便在需要进行数学计算时响应系统。还指定了确切的语法。
- 最后,我们让 ChatGPT 说“你好”并等待用户输入。
接下来,你可以将整个提示从注释区域复制到请求块中,然后按 Enter 键确认:
现在让我们再次测试相同的问题,我们将从 ChatGPT 获得“CALC:”响应:
这是一个很大的进步:ChatGPT 承认它需要帮助! 它没有猜测答案,而是谦虚地询问系统如何进行此计算。
第 5 步 - 控制输出格式
由于 ChatGPT 根据概率生成每个输出词,因此它有时可能会决定更改响应格式。这不好,因为我们的代码假定了一个固定的格式。
例如,如果你尝试运行该程序几次,你可能会得到如下响应:
同样,ChatGPT 可能会决定在表达式之后说些什么。现在,你能想想如何解决这个问题吗?理想情况下,我们希望 ChatGPT 始终以“CALC:3516 * 357”的固定格式生成响应。请在查看下面的解决方案之前尝试一下。
有很多方法可以控制 ChatGPT 的响应格式,但在大多数情况下,最好的解决方案是给出一个示例。ChatGPT 在从示例中学习方面训练有素。
对于这个特定问题,我们可以给出用户、ChatGPT 和我们的系统之间的示例对话,如下所示:
你是一位友好的助手,帮助一名 K-12 学生进行一些计算。你的回答简洁明了。不要说任何不恰当的话。
当你需要进行计算时,你可以使用特殊的标签“CALC:”后跟要计算的表达式来响应系统管理员,而不是响应用户。系统管理员将向你提供该表达式的答案,然后你可以生成对用户的响应。
例如:
用户:2345 乘以 3456 是多少?
助手:CALC:2345*3456
系统:8104320
助手:2345 乘以 3456 的答案是 8104320现在说“你好”
现在请将这个新提示复制到你的注释区域,然后将其复制到系统请求块中。
现在如果你尝试再次提出问题,它几乎总是使用正确的格式:
第 6 步 - 检查响应是否以“CALC:”开头
接下来,我们将根据 ChatGPT 的响应是否包含特殊标签“CALC:”来不同地处理 ChatGPT 的响应。只有当 ChatGPT 的响应以“CALC:”开头时,我们才会添加一些额外的步骤。
第 7 步 - 进行计算
当我们发现 ChatGPT 要求我们进行计算时,我们可以计算答案并将其存储在一个变量中。
逻辑如下:- ChatGPT 的响应以“CALC:”开头,我们只需要后面的表达式。因此,我们可以使用“substring”块来获取从第 6 个字母开始的响应的子字符串。例如,如果响应变量为“CALC:3516 * 357”,则子字符串将为“3516 * 357”。
- 我们可以使用“计算表达式”块来计算此表达式,这将产生一个数字,如 1255212
- 我们可以将该数字存储在一个名为“答案”的新变量中。
第 8 步 - 告诉 ChatGPT 答案
现在我们已经完成了计算,我们需要将其返回给 ChatGPT。请注意,我们应该使用**“系统请求”块发送答案,这使 ChatGPT 清楚地知道此答案来自系统,而不是用户**。我们仍然会要求 ChatGPT 将响应存储在“响应”变量中,这将覆盖先前的响应。
在此步骤之后,“响应”变量包含基于我们计算的新响应,我们可以继续将其追加到聊天记录中。如果你再次测试相同的问题,你将得到正确的答案!
创意点子
在本教程中,你学习了一种非常有用的技术来增强 ChatGPT 的新能力。你能尝试一些其他方法来帮助 ChatGPT 吗?以下是一些供你参考的想法:
今天的日期:
信不信由你,如果用户询问 ChatGPT 今天的日期,它会给出一个随机且错误的日期。你可以使用“当前 [年/月/日]”块帮助获取答案。
最长公共子串:
ChatGPT 也不擅长执行算法。例如,它错误地回答了这个问题:
你可以使用“最长公共子串”块提供帮助,正确答案应该是“1357911”。 -