ChatGPTNextWeb / ChatGPT-Next-Web

A cross-platform ChatGPT/Gemini UI (Web / PWA / Linux / Win / MacOS). 一键拥有你自己的跨平台 ChatGPT/Gemini 应用。
https://app.nextchat.dev/
MIT License
73.36k stars 58.21k forks source link

[Feature] Plugin Web Search: 可以增加联网搜索功能吗? #165

Open yuntian123456 opened 1 year ago

yuntian123456 commented 1 year ago

在这个项目里发现有联网搜索功能,可以实现类似的功能吗? https://github.com/GaiZhenbiao/ChuanhuChatGPT

Yidadaa commented 1 year ago

目前还不太清楚浏览器里是否能直接获取搜索引擎结果,后续再加吧

Winner-Nick commented 1 year ago

https://github.com/circlestarzero/EX-chatGPT 这个实现了联网功能,调用的是谷歌的接口,每天有20次免费的机会,可以参考一下~

Winner-Nick commented 1 year ago

https://github.com/circlestarzero/EX-chatGPT 这个实现了联网功能,调用的是谷歌的接口,每天有20次免费的机会,可以参考一下~

写错了,谷歌搜索引擎的api每天应该是100次免费机会

yuntian123456 commented 1 year ago

我不懂,问下了chatgpt,给出了这样的答案哈哈 image image

HenMie commented 1 year ago

https://github.com/qunash/chatgpt-advanced 这个插件也是可以参考一下的

gakaki commented 1 year ago

这些功能langchain js 都有 连sql 都有 大模型也有

gakaki commented 1 year ago

当然在js圈子看不到的 这个库最早来自于py 上面说的功能都是agents里的功能

Maddaxman commented 1 year ago

川虎的实现逻辑,我估计是这样的,gui调搜索引擎搜索关键词,然后以一定规则爬取某些网页,和网页的内容,然后喂给gpt,所以川虎会有以下两种情况。 1、就算不填key,开了联网功能后,gui也会回复内容,就是gui调用搜索引擎搜索出的内容 2、结果不稳定,不知道他的抓取规则是什么,每次问爬的网站都不一样。

Maddaxman commented 1 year ago

@Yidadaa

paobo commented 1 year ago

我是直接扔给chatgpt对话框google网址,让它帮我搜索

doveppp commented 1 year ago

川虎用的是duckduckgo这个库获取的搜索结果

iRubbish commented 1 year ago

https://chat1.aichatos.com/#/chat/1681292288748 这个网址实现了联网功能,但我不知道它是怎么实现的。比川虎的结果更清晰好用

HenMie commented 1 year ago

https://chat1.aichatos.com/#/chat/1681292288748 这个网址实现了联网功能,但我不知道它是怎么实现的。比川虎的结果更清晰好用

看了一下,它后端是在service里的,但这个仓库没有service的提交

liujuntao123 commented 1 year ago

https://chat1.aichatos.com/#/chat/1681292288748 这个网址实现了联网功能,但我不知道它是怎么实现的。比川虎的结果更清晰好用

看了一下,它后端是在service里的,但这个仓库没有service的提交

这个作者有个ddg的仓库,大概率应该也是用的ddg的引擎。

nuclearn commented 1 year ago

https://github.com/circlestarzero/EX-chatGPT 这个实现了联网功能,调用的是谷歌的接口,每天有20次免费的机会,可以参考一下~

这个是真厉害,希望能实现。

iRubbish commented 1 year ago

https://chat1.aichatos.com/#/chat/1681292288748 这个网址实现了联网功能,但我不知道它是怎么实现的。比川虎的结果更清晰好用

看了一下,它后端是在service里的,但这个仓库没有service的提交

这个作者有个ddg的仓库,大概率应该也是用的ddg的引擎。

我怀疑是 别人在 chatgpt-web 的基础上做了二开吧

idjj commented 1 year ago

https://chat1.aichatos.com/#/chat/1681292288748 这个网址实现了联网功能,但我不知道它是怎么实现的。比川虎的结果更清晰好用

image 我刚才去试了一下,这样

vicacheung commented 1 year ago

https://github.com/Significant-Gravitas/Auto-GPT 这个是通过Google 的Custom Search API搜索

sleep2death commented 1 year ago

https://github.com/circlestarzero/EX-chatGPT/blob/main/chatGPTEx/prompts/APIExtraPrompt.txt 试用prompt返回api的json对象就可以了

Undertone0809 commented 1 year ago

https://chat1.aichatos.com/#/chat/1681292288748 这个网址实现了联网功能,但我不知道它是怎么实现的。比川虎的结果更清晰好用

看了一下,它后端是在service里的,但这个仓库没有service的提交

这个作者有个ddg的仓库,大概率应该也是用的ddg的引擎。

我怀疑是 别人在 chatgpt-web 的基础上做了二开吧

是做二开的,加上了一些自己的功能,并且把自己的收款码放进去了(狗头)

Hk-Gosuto commented 1 year ago

https://github.com/Hk-Gosuto/ChatGPT-Next-Web 我在自己fork的仓库里试着加了联网搜索功能的代码,感兴趣的老哥可以先用着 prompt用 https://github.com/GaiZhenbiao/ChuanhuChatGPT 项目里改的 先部署个 https://github.com/binjie09/duckduckgo-api 然后加个环境变量 WEB_SEARCH_BASE_URL 指向 duckduckgo-api 的 URL 就行了

开关如图: image

Yidadaa commented 1 year ago

@Hk-Gosuto 效果如何,能否提供几个问答的截图?

Hk-Gosuto commented 1 year ago

@Hk-Gosuto 效果如何,能否提供几个问答的截图?

效果取决于duckduckgo本身返回的内容,默认只取了3条结果 部分场景返回的数据来源标注的有点问题,如图3,虽然标记了引用但没关联url

image image image

Yidadaa commented 1 year ago

效果很不错

Hk-Gosuto commented 1 year ago

效果很不错

Quicker_20230503_214630

应该是搜索接口没配置好,确定下 WEB_SEARCH_BASE_URL 环境变量是否配置有误,可以在问问题的时候看下接口 /api/web-search 是否正常返回,正常的返回内容如下:

[
    {
        "body": "北京天气预报,北京7天天气预报,北京15天天气预报,北京天气查询 北京 城区 今天 7天 8-15天 40天 雷达图 2日(今天) 晴转多云 29 / 16℃ <3级 3日(明天) 多云 27 / 16℃ <3级 4日(后天) 阴转小雨 22 / 14℃ <3级 5日(周五) 多云 26 / 14℃ 3-4级转<3级 6日(周六) 多云转晴 23 / 12℃ <3级 7日(周日) 晴 24 / 12℃ <3级 8日(周一) 晴转多云 26 / 14℃ <3级 分时段预报 生活指数 蓝天预报 天气资讯 湖南今明天雨水在线北部局地有暴雨 4日开始降水增强 中国天气网湖南站 2023-05-02 11:25 哈尔滨:满城春色关不住 百花齐放醉游人 中国天气网 2023-05-02 09:09",
        "href": "http://www.weather.com.cn/weather/101010100.shtml",
        "title": "北京天气预报,北京7天天气预报,北京15天天气预报,北京天气查询"
    },
    {
        "body": "北京天气预报,北京7天天气预报,北京15天天气预报,北京天气查询 城区 今天 7天 8-15天 40天 雷达图 不限行 1日白天 晴 27°C <3级 日出 05:15 1日夜间 小雨 16°C <3级 日落 19:08 生活指数 少发 感冒指数 无明显降温,感冒机率较低。 适宜 运动指数 天气较好,尽情感受运动的快乐吧。 (粒/千平方毫米) 花粉过敏指数 暂无 舒适 穿衣指数 建议穿长袖衬衫单裤等服装。 不宜 洗车指数 有雨,雨水和泥水会弄脏爱车。 强 紫外线指数 涂擦SPF大于15、PA+防晒护肤品。 天气资讯 假期天气大转折! 华东华中由晴转雨 湖北安徽等地雨量或破5月极值 中国天气网 2023-05-01 16:05",
        "href": "http://www.weather.com.cn/weather1d/101010100.shtml",
        "title": "北京天气预报,北京7天天气预报,北京15天天气预报,北京天气查询"
    },
    {
        "body": "每小时本地天气预报、天气情况、降水、露点、湿度、大风 - 尽在 Weather.com 和 The Weather Channel",
        "href": "https://weather.com/zh-CN/weather/hourbyhour/l/71ca347e2948ee9490525aa5433fa91da6973ae51ea0f765fbe8e85b9f16c5df",
        "title": "北京市每小时天气预报 - The Weather Channel | Weather.com"
    }
]
lannychan commented 1 year ago

https://github.com/Hk-Gosuto/ChatGPT-Next-Web 我在自己fork的仓库里试着加了联网搜索功能的代码,感兴趣的老哥可以先用着 prompt用 https://github.com/GaiZhenbiao/ChuanhuChatGPT 项目里改的 先部署个 https://github.com/binjie09/duckduckgo-api 然后加个环境变量 WEB_SEARCH_BASE_URL 指向 duckduckgo-api 的 URL 就行了

开关如图: image

我用自己的key在大佬你的网站里试了下,不开联网模式它还是乱回答,而且生成的主题名字也乱七八糟的 image

lannychan commented 1 year ago

https://github.com/Hk-Gosuto/ChatGPT-Next-Web 我在自己fork的仓库里试着加了联网搜索功能的代码,感兴趣的老哥可以先用着 prompt用 https://github.com/GaiZhenbiao/ChuanhuChatGPT 项目里改的 先部署个 https://github.com/binjie09/duckduckgo-api 然后加个环境变量 WEB_SEARCH_BASE_URL 指向 duckduckgo-api 的 URL 就行了

开关如图: image

同一个对话,先开搜索问一个“你好”,回答没问题,关搜索问“北京今天天气怎么样”,它还是在搜索,而且回答的是“你好”这个问题 image

Hk-Gosuto commented 1 year ago

https://github.com/Hk-Gosuto/ChatGPT-Next-Web 我在自己fork的仓库里试着加了联网搜索功能的代码,感兴趣的老哥可以先用着 prompt用 https://github.com/GaiZhenbiao/ChuanhuChatGPT 项目里改的 先部署个 https://github.com/binjie09/duckduckgo-api 然后加个环境变量 WEB_SEARCH_BASE_URL 指向 duckduckgo-api 的 URL 就行了 开关如图: image

同一个对话,先开搜索问一个“你好”,回答没问题,关搜索问“北京今天天气怎么样”,它还是在搜索,而且回答的是“你好”这个问题 image

未开启联网模式时消息传递错误的问题我修复了,你这个问题我没能复现。 建议把我的库作为联网功能正式发布前的临时替代方案吧,作为正式功能要考虑更多的问题,比如:连续对话时token超长、temperature参数对结果的影响、prompt优化等问题。

Yidadaa commented 1 year ago

@Hk-Gosuto 我不会直接内置联网模式,联网搜索会作为插件推出

tjpicole commented 1 year ago

nice!期待,这就是所谓的如虎添翼了

orwell-slyboys commented 1 year ago

https://github.com/Hk-Gosuto/ChatGPT-Next-Web 我在自己fork的仓库里试着加了联网搜索功能的代码,感兴趣的老哥可以先用着 prompt用 https://github.com/GaiZhenbiao/ChuanhuChatGPT 项目里改的 先部署个 https://github.com/binjie09/duckduckgo-api 然后加个环境变量 WEB_SEARCH_BASE_URL 指向 duckduckgo-api 的 URL 就行了

开关如图: image

直接拉下来用可以吗?需要做其他操作吗?

Hk-Gosuto commented 1 year ago

https://github.com/Hk-Gosuto/ChatGPT-Next-Web 我在自己fork的仓库里试着加了联网搜索功能的代码,感兴趣的老哥可以先用着 prompt用 https://github.com/GaiZhenbiao/ChuanhuChatGPT 项目里改的 先部署个 https://github.com/binjie09/duckduckgo-api 然后加个环境变量 WEB_SEARCH_BASE_URL 指向 duckduckgo-api 的 URL 就行了 开关如图: image

直接拉下来用可以吗?需要做其他操作吗?

  1. vercel 部署 duckduckgo-api,记住生成的网址
  2. vercel 部署 ChatGPT-Next-Web,增加一个环境变量 WEB_SEARCH_BASE_URL 指向步骤 1 产生的地址 image
  3. 在每次对话中,点击图中的按钮开启联网搜索功能
orwell-slyboys commented 1 year ago

https://github.com/Hk-Gosuto/ChatGPT-Next-Web 我在自己fork的仓库里试着加了联网搜索功能的代码,感兴趣的老哥可以先用着 prompt用 https://github.com/GaiZhenbiao/ChuanhuChatGPT 项目里改的 先部署个 https://github.com/binjie09/duckduckgo-api 然后加个环境变量 WEB_SEARCH_BASE_URL 指向 duckduckgo-api 的 URL 就行了 开关如图: image

直接拉下来用可以吗?需要做其他操作吗?

  1. vercel 部署 duckduckgo-api,记住生成的网址
  2. vercel 部署 ChatGPT-Next-Web,增加一个环境变量 WEB_SEARCH_BASE_URL 指向步骤 1 产生的地址 image
  3. 在每次对话中,点击图中的按钮开启联网搜索功能

好的,谢谢,我去试试

yuntian123456 commented 1 year ago

https://github.com/Hk-Gosuto/ChatGPT-Next-Web 我在自己fork的仓库里试着加了联网搜索功能的代码,感兴趣的老哥可以先用着 prompt用 https://github.com/GaiZhenbiao/ChuanhuChatGPT 项目里改的 先部署个 https://github.com/binjie09/duckduckgo-api 然后加个环境变量 WEB_SEARCH_BASE_URL 指向 duckduckgo-api 的 URL 就行了 开关如图: image

直接拉下来用可以吗?需要做其他操作吗?

  1. vercel 部署 duckduckgo-api,记住生成的网址
  2. vercel 部署 ChatGPT-Next-Web,增加一个环境变量 WEB_SEARCH_BASE_URL 指向步骤 1 产生的地址 image
  3. 在每次对话中,点击图中的按钮开启联网搜索功能

很棒!搜索结果也挺靠谱的。 但是,时间怎么不太对。。。 image

nuclearn commented 1 year ago

我也写了一个,整合了一些插件,就是比较费token 2023-05-09_071734

Hk-Gosuto commented 1 year ago

https://github.com/Hk-Gosuto/ChatGPT-Next-Web 我在自己fork的仓库里试着加了联网搜索功能的代码,感兴趣的老哥可以先用着 prompt用 https://github.com/GaiZhenbiao/ChuanhuChatGPT 项目里改的 先部署个 https://github.com/binjie09/duckduckgo-api 然后加个环境变量 WEB_SEARCH_BASE_URL 指向 duckduckgo-api 的 URL 就行了 开关如图: image

直接拉下来用可以吗?需要做其他操作吗?

  1. vercel 部署 duckduckgo-api,记住生成的网址
  2. vercel 部署 ChatGPT-Next-Web,增加一个环境变量 WEB_SEARCH_BASE_URL 指向步骤 1 产生的地址 image
  3. 在每次对话中,点击图中的按钮开启联网搜索功能

很棒!搜索结果也挺靠谱的。 但是,时间怎么不太对。。。 image

我试了一下,程序是根据duckduckgo搜索返回回复的,有可能是搜索引擎本身的缓存导致的,也可以修改prompt优化这部分功能。 image

pessimo commented 1 year ago

还有后续么,目前chatgpt 开放插件功能了

ClarenceDan commented 1 year ago

前面那个时间不准的问题,可以试试搜索引擎设定搜索最近一个月的内容,这样精度会更高一些

xiangdyzz commented 1 year ago

https://github.com/Hk-Gosuto/ChatGPT-Next-Web 我在自己fork的仓库里试着加了联网搜索功能的代码,感兴趣的老哥可以先用着 prompt用 https://github.com/GaiZhenbiao/ChuanhuChatGPT 项目里改的 先部署个 https://github.com/binjie09/duckduckgo-api 然后加个环境变量 WEB_SEARCH_BASE_URL 指向 duckduckgo-api 的 URL 就行了

开关如图: image

NB,当时我使用chuanhuGPT他的实施搜索有问题啊,并不像你给的截图那样回答,还有个问题,gpt4能调吗,我是plus用户但使用key和4model会报错

xiangdyzz commented 1 year ago

我是直接扔给chatgpt对话框google网址,让它帮我搜索

xiangdyzz commented 1 year ago

不行,很抱歉,作为一个AI模型,我无法直接访问或浏览网页。但您可以尝试访问Google搜索页面,输入“流浪地球2上线时间”,然后查看搜索结果以获取相关信息。

同时,您还可以关注电影相关的官方消息来源,如电影制作公司、导演和演员的社交媒体帐户,以了解关于《流浪地球2》的最新发布信息。

tiamohf commented 1 year ago

https://github.com/Hk-Gosuto/ChatGPT-Next-Web 我在自己fork的仓库里试着加了联网搜索功能的代码,感兴趣的老哥可以先用着 prompt用 https://github.com/GaiZhenbiao/ChuanhuChatGPT 项目里改的 先部署个 https://github.com/binjie09/duckduckgo-api 然后加个环境变量 WEB_SEARCH_BASE_URL 指向 duckduckgo-api 的 URL 就行了

开关如图: image

@Hk-Gosuto  duckduckgoapi用不了了 https://github.com/binjie09/duckduckgo-api/issues/7
Hk-Gosuto commented 1 year ago

https://github.com/Hk-Gosuto/ChatGPT-Next-Web 我在自己fork的仓库里试着加了联网搜索功能的代码,感兴趣的老哥可以先用着 prompt用 https://github.com/GaiZhenbiao/ChuanhuChatGPT 项目里改的 先部署个 https://github.com/binjie09/duckduckgo-api 然后加个环境变量 WEB_SEARCH_BASE_URL 指向 duckduckgo-api 的 URL 就行了 开关如图: image

@Hk-Gosuto  duckduckgoapi用不了了 https://github.com/binjie09/duckduckgo-api/issues/7

我fork了这个仓库并修复了不能搜索的问题,请使用我修改后的项目重新部署一个搜索服务: https://github.com/Hk-Gosuto/ddg-api

Hk-Gosuto commented 1 year ago

不行,很抱歉,作为一个AI模型,我无法直接访问或浏览网页。但您可以尝试访问Google搜索页面,输入“流浪地球2上线时间”,然后查看搜索结果以获取相关信息。

同时,您还可以关注电影相关的官方消息来源,如电影制作公司、导演和演员的社交媒体帐户,以了解关于《流浪地球2》的最新发布信息。

我修改的版本只是将问题扔到了搜索引擎并返回给AI来进行解析,想实现你想要的效果只能通过插件的形式来实现,让GPT自己选择调用不同的插件来处理不同的问题,关于是否能使用GPT-4,这个项目只是调用了官方的接口,与你账户是否为plus无关,API接口能力和plus是分开的,API的GPT-4能力需要申请加入waitlist,请参考:https://openai.com/waitlist/gpt-4-api

wushunzhou commented 1 year ago

所以,哪位大佬二开了这个的功能?川虎大佬的界面不太喜欢。还是想咱们这边能开发个联网插件

un-pstar7 commented 1 year ago

不行,很抱歉,作为一个AI模型,我无法直接访问或浏览网页。但您可以尝试访问Google搜索页面,输入“流浪地球2上线时间”,然后查看搜索结果以获取相关信息。 同时,您还可以关注电影相关的官方消息来源,如电影制作公司、导演和演员的社交媒体帐户,以了解关于《流浪地球2》的最新发布信息。

我修改的版本只是将问题扔到了搜索引擎并返回给AI来进行解析,想实现你想要的效果只能通过插件的形式来实现,让GPT自己选择调用不同的插件来处理不同的问题,关于是否能使用GPT-4,这个项目只是调用了官方的接口,与你账户是否为plus无关,API接口能力和plus是分开的,API的GPT-4能力需要申请加入waitlist,请参考:https://openai.com/waitlist/gpt-4-api

duckduck go search results always show chinese language please tell me how to change it i want to change it to my country language.

hong47 commented 1 year ago

https://openai.com/blog/function-calling-and-other-api-updates 现在chatgpt已经支持通过API的方式调用插件了,可以考虑直接加进插件功能里面。

image

Hk-Gosuto commented 1 year ago

不行,很抱歉,作为一个AI模型,我无法直接访问或浏览网页。但您可以尝试访问Google搜索页面,输入“流浪地球2上线时间”,然后查看搜索结果以获取相关信息。 同时,您还可以关注电影相关的官方消息来源,如电影制作公司、导演和演员的社交媒体帐户,以了解关于《流浪地球2》的最新发布信息。

我修改的版本只是将问题扔到了搜索引擎并返回给AI来进行解析,想实现你想要的效果只能通过插件的形式来实现,让GPT自己选择调用不同的插件来处理不同的问题,关于是否能使用GPT-4,这个项目只是调用了官方的接口,与你账户是否为plus无关,API接口能力和plus是分开的,API的GPT-4能力需要申请加入waitlist,请参考:https://openai.com/waitlist/gpt-4-api

duckduck go search results always show chinese language please tell me how to change it i want to change it to my country language.

please modify this prompt https://github.com/Hk-Gosuto/ChatGPT-Next-Web/blob/e672b8c7716962968c727ccf1eb92a3ae7205140/app/store/chat.ts#L302

1395173231 commented 1 year ago

实际上川虎实现ddg搜索的代码非常简单,经过简单的转换就可以实现为TypeScript代码,你可以在浏览器或者边缘函数中使用它 请注意这个get方法是我所编写的通用反代方法,你可以使用原生的fetch替换它 你可以在我的镜像站中查看使用效果: EasyChat

import { get } from "@/app/utils/http";

const reply_language =
    "the same language as the question, such as English, 中文, 日本語, Español, Français, or Deutsch.";
const WEBSEARCH_PTOMPT_TEMPLATE =
    "Web search results:\n" +
    "\n" +
    "{web_results}\n" +
    "Current date: {current_date}\n" +
    "\n" +
    "Instructions: Using the provided web search results, write a comprehensive reply to the given query. Make sure to cite results using [[number](URL)] notation after the reference. If the provided search results refer to multiple subjects with the same name, write separate answers for each subject. Write the results to the next action_input\n" +
    "Query: {query}\n" +
    "Reply in {reply_language} And use the markdown syntax";

export const DdgSearch = async (
    searchQuery: string,
    region: string | undefined,
    headers: Headers,
):Promise<string> => {
    try {
        const response = await get(
            `https://duckduckgo.com/?q=${encodeURIComponent(searchQuery)}`,
            { ...headers },
        );
        const html = await response.text();
        const regex = /vqd=["']([^"']+)["']/;
        const match = regex.exec(html);
        const vqd = match && match[1].replaceAll('"', "").replaceAll("'", "");
        let safesearch_base = { On: 1, Moderate: -1, Off: -2 };
        let PAGINATION_STEP = 25,
            MAX_API_RESULTS = 200,
            page = 1;
        let payload = {
            q: searchQuery,
            l: region,
            p: safesearch_base["On"],
            s: Math.max(PAGINATION_STEP * (page - 1), 0),
            df: new Date().getTime(),
            o: "json",
            vqd: vqd,
        };

        let res = await get(
            "https://links.duckduckgo.com/d.js",
            { ...headers },
            payload,
        );
        let result = await res.json();
        let reference_results: any[] = [];
        if (result["results"]) {
            for (let row of result["results"]) {
                if (!row["n"]) {
                    let body = row["a"];
                    if (body) {
                        let domain_name = row["i"];
                        reference_results.push([body,row["u"]]);
                        if (reference_results.length > 5) {
                            break;
                        }
                    }
                }
            }
        }
        return WEBSEARCH_PTOMPT_TEMPLATE.replace("{query}", searchQuery)
            .replace(
                "{web_results}",
                reference_results.length > 0
                    ? reference_results.join("\n\n")
                    : `no web result`,
            )
            .replace("{reply_language}", reply_language)
            .replace(
                "{current_date}",
                new Date().toLocaleString("zh-CN", {hour12: false}),
            )
    } catch (e) {
        console.log(e)
        return `no web result`;
    }
};
zululu2023 commented 1 year ago

@Hk-Gosuto 您最近更新的这个链接:https://github.com/Hk-Gosuto/ddg-api 似乎还是无法正常部署,请查一下问题所在,谢谢!