背景
众所周知,OpenAI 开发了一款名为 "Web Browsing" 的插件,它利用 Bing 的 API 在互联网上搜索、整理、总结问题的相关信息,然后给出具体答案,然而ChatGPT4以下是不具备联网能力,这也许是很多人充值PLUS的原因,因为不能获取实时的信息,也有可能造成回答与实际环境脱节,但是大多数人没有那个预算,现实就摆在眼前,既要使用ChatGPT3.5的廉价的token能力,又想让他带上联网的功能,拼一拼,单车变摩托,这个可以实现吗?
很显然,这篇文章的出现,你应该已经猜到这个是可以实现的,下面,我带你来一步步实现。
原理
所谓的联网,就是基于从网络上搜索的信息作为上下文进行提问,一句话,就这呢简单,但是实现起来需要考虑两个点:
1、使用什么搜索引擎就行搜索,最好是开源的
2、搜索出来的内容如何传递给到 ChatGPT接口,是否会超过token的限制
3、怎么样组织好prompt
解决好以上3个问题,那这个问题自然就迎面而解了,别着急,我们问问ChatGPT,这些问题有没有答案。
第一个问题,找开源的搜索工具
对于这些21年就一定很成熟的技术,ChatGPT还不是手到擒拿,直接就给出了一个开源的搜索工具
duckduckgo_search,这里是他的官网 https://github.com/deedy5/duckduckgo_search
一看,还真不错,不仅仅支持搜索文本,还支持搜索图片,甚至视频
当然,我们关心的只是图片。
第一个问题,搜索的内容如何进行处理,把他作为上下文提供给到ChatGPT接口
这个嘛,就直接贴代码了
第三个问题,如何组织好prompt
还是直接给出代码,这就很清晰了,实际上就是把上面我们通过duckduckgo_search给到的关键字查到的内容,交给prompt中的占位符去重新组织一下
第四个问题,如果token超了怎么办
解决问题的办法是,我们可以使用langchain工具来做索引,做embedding,然后通过近似搜索来找到相关性比较大的上下文,或者,搜索工具,我们就取前面的2-3条的摘要,通常就不会超出。就如上面那个步骤,我的max_result设置的是5,保险的话,可以调整小点,比如到3。这是一个经验值,基本不会超。
总结
至此,一个代联网搜索能力的基于ChatGPT3.5 的工具就实现了,相信你在了解原理之后,自己也能轻松的完成一个。
推荐
这里也推荐一个代联网搜索能力的工具,bing就不说了,还有一个个人觉得做得非常牛逼。
https://www.perplexity.ai/ ,这个工具也支持使用ChatGPT4,限制是每3小时5次,都是免费的,可能是目前为止发现的最好的。