ChatGPT 人工智能:让ChatGPT 学会网页搜索(难度:4)
-
简介
像 ChatGPT 这样的大型语言模型从训练数据中学习所有知识,因此它们不知道训练数据截止日期之后的任何新信息。
例如,如果我们问 ChatGPT 这个问题:“哪支球队赢得了 2024 年美洲杯?” 它将无法回答,因为在撰写本文时,ChatGPT 的截止日期是 2023 年 10 月。
对 ChatGPT 的增强
为了解决这个问题,我们可以“教” ChatGPT 寻求帮助。为了说明这个想法,我们可以将 ChatGPT、用户和我们的程序想象成 3 个角色,他们的对话可能如下所示:
- 用户对程序:谁赢得了 2024 年美洲杯?
- 程序对 ChatGPT:嘿 ChatGPT,你能尝试回答这个问题吗:谁赢得了 2024 年美洲杯?顺便说一句,如果你发现你需要搜索网络以获取一些新信息,我可以提供帮助。
- ChatGPT 对程序:这个问题超出了我的截止日期。请在 Google 上搜索“谁赢得了 2024 年美洲杯?”
- 程序对 ChatGPT:好的。让我用 Google 搜索一下……好的,我明白了,这是研究结果:阿根廷
- ChatGPT 对程序:谢谢。根据搜索结果,以下是给用户的答案:阿根廷
- 程序对用户:阿根廷
现在,让我们一步一步地构建这个工作流程。
步骤 1 - Remix “Helpful Assistant” 项目
play.creaticode.com/projects/6531b7e60fdce080a4481c1d
步骤 2 - 更新初始提示
由于我们将编写一个相当长的提示,让我们仍然使用“注释”区域来编写提示。
首先,通过右键单击绿旗块来添加注释区域:
接下来,将以下提示复制到注释区域:你是一个友好的助手,而我是一个可以帮助你的代理。确保你的回应简洁易懂。不要说任何不恰当的话。 当你需要在回答用户问题之前进行网络搜索时,你应该使用特殊标签“WEB:”后跟要搜索的查询来回应我,而不是回应用户。我会把答案提供给你,然后你可以生成对用户的回应。 现在说“嗨”
此提示包含 3 部分:- 它首先介绍了上下文,其中 ChatGPT 扮演友好助手的角色,而我们(我们的程序)是帮助它的代理。
- 然后,向 ChatGPT 发出特殊指令,以便它在需要在线获取一些新信息时要求我们进行网络搜索。还指定了它应该使用的特殊语法,即“WEB:”标签。
- 最后,我们要求 ChatGPT 说“嗨”并等待用户输入。
接下来,您可以将整个提示从注释区域复制到请求块中,然后按 Enter 键确认:
现在让我们再次用同样的问题进行测试,我们将从 ChatGPT 获得“WEB:”响应:
这是一个很大的改进:ChatGPT 已经学会了它可以使用网络搜索工具来帮助它回答问题。 当然,我们不应该向用户展示这一点,因为最终答案尚未给出。让我们在下面更改它。
步骤 5 - 强制输出格式
ChatGPT 可能不会每次都使用相同的格式。例如,它可能会这样回应:
这种回应的问题在于,我们的程序将很难提取用于网络搜索的确切查询。为了强制 ChatGPT 使用正确的格式,我们可以对提示进行 2 处更改:- 添加注释,强调我们期望的格式。
- 举一个例子,演示正确的回应方式。
以下是更新后的提示:
你是一个友好的助手,而我是一个可以帮助你的代理。确保你的回应简洁易懂。不要说任何不恰当的话。 当你需要在回答用户问题之前进行网络搜索时,你应该使用特殊标签“WEB:”后跟要搜索的查询来回应我,而不是回应用户。我会把答案提供给你,然后你可以生成对用户的回应。请注意,当你需要进行网络搜索时,你必须以“WEB:”开头,除了查询之外什么也不要说。避免询问用户你是否应该进行网络搜索,因为用户不知道网络搜索工具。 例如: 用户:谁赢得了 2024 年奥运会男子 100 米短跑冠军? 你:WEB: 2024 年奥运会男子 100 米短跑冠军 系统:在 2024 年巴黎奥运会上,美国短跑运动员诺亚·莱尔斯在男子 100 米决赛中获胜 你:美国短跑运动员诺亚·莱尔斯 现在说“嗨”
现在请将此新提示复制到您的注释区域,然后将其复制到系统请求块中。这将有助于确保 ChatGPT 坚持我们指定的格式。
步骤 6 - 检查响应是否以“WEB:”开头
接下来,我们将根据 ChatGPT 的响应是否以“WEB:”的特殊标签开头来以不同的方式处理它的响应。我们只会在 ChatGPT 的响应以“WEB:”开头时添加一些额外的步骤。
步骤 7 - 运行网络搜索
当我们发现 ChatGPT 要求我们进行网络搜索时,我们可以从 ChatGPT 的响应中提取提取查询语句,然后使用该查询语句运行网络搜索。
逻辑如下:- ChatGPT 的响应以“WEB:”开头,我们只需要后面的表达式。因此,我们可以使用“substring”块来获取从第 5 个字母开始的响应的子字符串。例如,如果响应变量为“WEB: 2024 年奥运会男子 100 米短跑冠军”,则子字符串将为“ 2024 年奥运会男子 100 米短跑冠军”。
- 我们可以使用 AI 类别中的“web search”块来搜索网络并将前 3 个结果存储在“result_table”中。
现在,让我们尝试通过再次运行程序来获得一些搜索结果。要查看“result_table”,我们必须从舞台上删除聊天窗口。我们可以单独运行“remove all widgets”块。
之后,通过选中其复选框在舞台上显示“result_table”:您将看到 result_table 包含 3 列:标题、链接和摘要。摘要只是该网页的简短摘要。
步骤 8 - 聚合搜索结果
要将搜索结果返回给 ChatGPT,我们首先必须将 result_table 中的内容聚合到一个名为“answer”的变量中。例如,我们可以使用几个连接块来组成答案,如下所示,以包含排名第一的搜索结果:
请注意,“\n”表示换行符,这有助于更好地格式化答案文本。因此,“answer”变量将变为:
我们可以使用相同的代码来连接第二个和第三个搜索结果。最后,我们将告诉 ChatGPT 为用户生成响应:
步骤 9 - 将搜索结果提供给 ChatGPT
现在我们将结果传递回 ChatGPT。请注意,我们应该使用 “system request”块发送答案,这向 ChatGPT 表明此答案来自系统,而不是用户。我们仍然会要求 ChatGPT 将响应存储在“response”变量中,这将覆盖之前的响应。
在此步骤之后,“response”变量包含基于网络搜索结果的新响应,我们可以继续将其附加到聊天记录中。如果您再次使用相同的请求进行测试,ChatGPT 将产生正确的答案!
进一步改进
在本教程中,您已经学习了如何使用网络搜索工具增强 ChatGPT。您可以做些什么来使其更好?以下是一些值得尝试的想法:
-
改进提示:如果您更多地测试程序,您可能仍然会发现有时它无法运行网络搜索。如果您可以在提示中添加另一个示例对话,那将会很有帮助。您还可以尝试改进提示中的说明,以告诉 ChatGPT 预期的行为是什么。
-
获取页面内容:当前程序仅向 ChatGPT 提供搜索结果中每个网页的标题和摘要。对于更复杂的问题,这可能不包含用户所要求的信息。进一步的增强是为 ChatGPT 提供另一个工具:获取网页。 为此,您需要对提示进行一些更改:
- 为 ChatGPT 提供每个搜索结果的链接 URL
- 告诉 ChatGPT 如果它需要任何页面的完整内容,它可以发出另一个特殊命令“FETCH:页面的 URL”。
- 当我们收到 FETCH 请求时,使用 Cloud 扩展中的“fetch web page as markdown”块获取该页面的内容,然后将内容发送回 ChatGPT。
-