【大语言模型应用】复刻GPT-4实时网页搜索&浏览功能

0. 引言

GPT-4的知识库涉及领域丰富、涵盖范围广泛,但是一直有一定的实效滞后,例如最新的GPT-4知识更新截止于2023年4月。为了跨越这个限制,今年OpenAI相继为GPT-Plus的用户开放了接入网页搜索的插件,和GPT-4自主根据需求决定搜索网络信息的功能。例如,我们可以问GPT一些根据知识库无法回答的问题,例如波士顿明天的天气怎么样:

GPT执行搜索后的回答:

自此,GPT可以根据具体问题的需要来联网获取最新信息,增强模型对实时数据检索的相关性和时效性。这篇文章就是对GPT内置的这个功能的一个实现,并且比网页端 GPT 自带的网络浏览功能更加迅速。

你也可以把它视为一个对 new BingBard 的最小化的后端实现,一种搜索搜索引擎和AI问答的高度结合。

完整的代码可以查看:GitHub: GPT-4 Enhanced with Real-Time Web Browsing如果喜欢的话欢迎给这个仓库点一个⭐️。

1. 主要功能

  • 1. 通过 Serper (Google API) 快速实时的网络搜索

  • 2. 根据输入自动调整网络搜索和回答语言

  • 3. 从多个网页中多线程提取主体内容,以降低embedding中token数量的花费

  • 4. 通过 OpenAI Embedding 和 ChromaDB 实现相关语义的搜索

  • 5. 大模型根据参考的网络信息生成回答

  • 6. 支持自定义模型AI的角色输出格式的要求

  • 7. 将大语言模型回答中带引用的句子源网站的标题、摘要和链接进行匹配

2. 总体架构

​​​​​​​

3. 运行效果

Demo for LLM Web Browsing

4. 模块介绍

4.1. 搜索引擎服务 🔍

用过GPT-4网络搜索功能的朋友应该发现了,GPT使用的搜索引擎是Bing,原因其实很好理解,Bing和OpenAI的背后是同一位“Daddy”。经过作者实测,相比于Google官方的API,Bing的API在相应速度、相应稳定性方面比谷歌官方的强太多了,虽然不排除和一些网络因素有关,但是仍然强烈建议在国内想使用官方API的朋友优先选择Bing

注册谷歌和Bing的搜索API的复杂程度差不多,有需要的朋友可以具体去查一下相关的教程。这里作者想安利另外一个提供SERP服务(Search Engine Results Pages)的网站:Serper

以下是Serper官网的slogan,快速、便宜、稳定,就是选择和推荐它的理由,另外!每个新注册的用户都会赠送2,500条API查询的次数,真的很良心很够用了:

Serper的背后搜索引擎其实就是谷歌。下面是Serper返回json的示例:

    {
      "title": "Apple",
      "link": "https://www.apple.com/",
      "snippet": "Discover the innovative world of Apple and shop everything iPhone, iPad, Apple Watch, Mac, and Apple TV, plus explore accessories, entertainment, ...",
      "sitelinks": [
        {
          "title": "Support",
          "link": "https://support.apple.com/"
        },
        {
          "title": "iPhone",
          "link": "https://www.apple.com/iphone/"
        },
        {
          "title": "Apple makes business better.",
          "link": "https://www.apple.com/business/"
        },
        {
          "title": "Mac",
          "link": "https://www.apple.com/mac/"
        }
      ],
      "position": 1
    },
    {
      "title": "Apple Inc. - Wikipedia",
      "link": "https://en.wikipedia.org/wiki/Apple_Inc.",
      "snippet": "Apple Inc. is an American multinational technology company specializing in consumer electronics, software and online services headquartered in Cupertino, ...",
      "attributes": {
        "Products": "AirPods; Apple Watch; iPad; iPhone; Mac",
        "Founders": "Steve Jobs; Steve Wozniak; Ronald Wayne",
        "Founded": "April 1, 1976; 46 years ago in Los Altos, California, U.S",
        "Industry": "Consumer electronics; Software services; Online services"
      },
      "sitelinks": [
        {
          "title": "History",
          "link": "https://en.wikipedia.org/wiki/History_of_Apple_Inc."
        },
        {
          "title": "Timeline of Apple Inc. products",
          "link": "https://en.wikipedia.org/wiki/Timeline_of_Apple_Inc._products"
        },
        {
          "title": "List of software by Apple Inc.",
          "link": "https://en.wikipedia.org/wiki/List_of_software_by_Apple_Inc."
        },
        {
          "title": "Apple Store",
          "link": "https://en.wikipedia.org/wiki/Apple_Store"
        }
      ],
      "position": 2
    },
...

除了Serper以外,还有另外一个同样非常流行的SERP API服务提供者:SerpApi

大家可以自行去他们俩的官网的playground用自己的输入体验一下。

作者在这部分加入了以下功能,具体的代码请访问GitHub

(1)获取至少10条谷歌搜索引擎的网页链接

(2)按顺序保存其相应的标题、摘要和url,以供后续使用

(3)加入输入的中英识别,支持俺地区搜索和返回该语言的结果

4.2. 网页爬取 📑

(1)选用了OpenAI官方Cookbook中相同的BeautifulSoup

(2)内置Windows和MacOS的User-Agent,可以绕过大部分的自动检查

(3)提速的优化:多线程+超时丢弃

(4)只保留网页中主体内容,过滤过短内容和连续的换行,以节省后续embedding处理的花费

这部分的代码很长,同样,具体请参考GitHub

4.3. 语义搜索+整理信息 ℹ️

4.3和4.4部分的代码调用了一些LangChain🦜🔗库中的函数。LangChain 是一个用于构建语言模型驱动的应用程序的开源库,使得代码与 GPT 等大型语言模型的连接和开发变得更加容易。

最核心部分部分都包含在了GitHub中,如果想更详细了解的可以去查看:官方文档

这部分原理是,将网页爬取到的内容的每一个单词进行向量化(即每个单词都用一组向量来表示),向量化可以理解成把单词转换成机器能够看得懂的表示方法,而每个向量本身都是这个词语本身意思的抽象化表示(即机器在面对向量化的单词时还看懂了这些内容的自然语义

因为我们输入大模型的长下文长度有限制,例如GPT-3.5-turbo-16k的token数量的长度限制的16,000,我们需要选取网页内容中和query最相关的内容来“喂给”大语言模型。

我们的Embedding模型(用于向量化单词)选取的是OpenAI官方的text-embedding-ada-002。有一些同学反应这个embedding模型在处理中文的时候会报错,故作者在代码中保留了对中文区分度比较好的embedding模型:HuggingFace上的text2vec-base-chinese。这是一个同时支持中英文的模型。它在代码中目前是被注释掉了需要换用的同学取消注释即可直接用

以上两种模型各有优劣势,OpenAI的Embedding优势是更快,比text2vec-base-chinese快一倍左右;而text2vec-base-chinese优势是它是免费的😂,OpenAI的价格是$0.0001 / 1K tokens。综合考虑优先推荐OpenAI Embedding

存储向量的数据库选用的ChromaDB,更习惯Pinecone的同学可以根据自己的需要来调整。

具体代码请参考GitHub

4.4. 导入Prompt模板 + 大模型回答 🚀

这部分出于用户体验的考虑,为大模型的回答实现了“流动式”输出,具体的效果大家在demo视频里也可以看到。在排版好从ChromaDB中索引出的相关内容之后,就可以把他们整理好发送给大模型了,GPT在回答之后会显示标好序号的引用列表。

翻译后的提示词大致如下:

指示:您是一个{...}。 使用提供的网络搜索结果,针对给定的问题撰写全面且详细的回复。
   确保在参考文献后使用[数字]符号引用结果。
   在答案的最后,列出相应的参考文献和索引,每个参考文献都包含网络搜索结果中的网址和引用的句子,按照上面答案中标记的顺序排列。


   回答语言:{...}
   查询:{...}
   输出格式:{...}
   请根据输出格式来组织输出。 如果输出格式为空,则可以忽略它。

 从提示词模板可见,大模型回答的部分支持用户自定义AI角色输出格式等等。

具体代码请参考GitHub

*4.5. 匹配回答中带引用的句子及其源网站的标题、摘要和链接 📍

这部分的目的是让用户可以通过点击大语言模型回答中每个含有引用的句子就可找到其来源,例如:

代码中每个“引用卡片”展示的效果示例如下,使用的方法主要是正则表达式:

{
        "titles": "Tencent's Silent Pursuit of Global Gaming Domination - Niko Partners",
        "snippets": "Tencent is the world's largest games company and continuing to grow organically as well as through investments and acquisitions.",
        "index": 1,
        "sent": "Tencent Games, a leading Chinese game developer and publisher, has been making significant strides in expanding its global market share. While China remains the largest gaming market for Tencent, the company has been actively pursuing international growth and aims to have half of its players overseas",
        "url": "https://nikopartners.com/tencents-silent-pursuit-of-global-gaming-domination/",
        "source": "While China is the largest gaming market in the world with 33% of PC and mobile games revenue derived from mainland China gamers, Tencent wants to be a global giant. The firm stated that its target is to have half of its players overseas, but we note that only 21% of its total games revenue in 2020 was from outside China."
    }

由于有些时候GPT会不完全按给出的例子回答,以及很多朋友可能没有这部分定位来源的需求,所以这部分代码的调用默认是被注释掉的。

 具体代码请参考GitHub

5. 运行

5.1 要求和环境

 - “稳定的”网络连接以访问Serper (Google API)和OpenAI API

 - Python 3.11.5(不一定要相同)

 - Serper API Key: 在👉官网获取

        - 2,500条免费的query次数,对小型项目组和开放来说真的很够用了

 - OpenAI API Key:网址同样也放这里👉官网

       -  新用户包含5美元的免费额度(推荐模型GPT-3.5-turbo-16k、GPT-4-32k)

5.2 安装

1. 安装所需的包(在国内可以考虑加上 -i https://pypi.tuna.tsinghua.edu.cn/simple):

pip install -r requirements.txt

2. 将你的 API Keys 输入到配置文件 `config.yaml` 中并保存

3. 运行`main.py`或者 `llm_answer.py`,你可以在其中修改你的query

6. 完整代码

完整的代码可以查看:GitHub: GPT-4 Enhanced with Real-Time Web Browsing​​​​​​​。欢迎 fork 这个仓库或者给这个仓库点一个⭐️ 

-END-

  • 40
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值