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。
-
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