GithubHelp home page GithubHelp logo

fatwang2 / search2ai Goto Github PK

View Code? Open in Web Editor NEW
1.0K 11.0 155.0 3.27 MB

Help your LLMs online

Home Page: https://sum4all.site/telegram

License: MIT License

JavaScript 100.00%
online openai openai-api search functioncalling gemini groq llama mistral toolcall

search2ai's Introduction

简体中文 · English

用户交流

telegram频道

友情赞助

Buy Me A Coffee

版本更新

  • V0.2.6,20240425,支持 SearXNG 免费搜索服务,有损支持 Moonshot 流式模式
  • V0.2.5,20240425,为了解决隐私担忧,开源搜索接口部分的代码
  • V0.2.4,20240424,支持 Groq 的llama-3、mistral等模型,速度起飞
  • V0.2.3,20240423,Cloudflare Worker版本支持Azure OpenAI;支持授权码,可自定义用户的请求key
  • V0.2.2,20240420,支持 Moonshot 的非流式模式
  • V0.2.1,20240310,支持Google、Bing、Duckduckgo、Search1API新闻类搜索;支持通过环境变量MAX_RESULTS调整搜索结果数量;支持通过环境变量CRAWL_RESULTS调整希望深度搜索的数量
  • V0.2.0,20240310,优化openai.js,cloudflare worker版本,这次速度真的更快了!

更多历史更新,请参见 版本记录

S2A

让你的 大模型 API 支持联网,搜索、新闻、网页总结,已支持OpenAI、Gemini、Moonshot(非流式),大模型会根据你的输入判断是否联网,不是每次都联网搜索,不需要安装任何插件,也不需要更换key,直接在你常用的三方客户端替换自定义地址即可,也支持自行部署,不会影响使用的其他功能,如画图、语音等

效果示例 效果示例
效果示例 效果示例

功能

模型 功能 流式输出 部署方式
OpenAI 联网、新闻、内容爬取 流式、非流式 Zeabur、本地部署、Cloudflare Worker、Vercel
Azure OpenAI 联网、新闻、内容爬取 流式、非流式 Cloudflare Worker
Groq 联网、新闻、内容爬取 流式、非流式 Cloudflare Worker
Gemini 联网 流式、非流式 Cloudflare Worker
Moonshot 联网、新闻、内容爬取 部分流式、非流式 Zeabur、本地部署、Cloudflare Worker(流式)、Vercel

使用

替换客户端自定义域名为你部署后的地址

效果示例

部署

Zeabur一键部署

点击按钮即可一键部署,修改环境变量

Deploy on Zeabur

如需保持项目更新,建议先fork本仓库,再通过Zeabur部署你的分支

Deployed on Zeabur

本地部署

  1. 克隆仓库到本地
git clone https://github.com/fatwang2/search2ai
  1. 复制.env.template为.env,配置环境变量
  2. 进入api目录,运行程序,实时显示日志
cd api && nohup node index.js > output.log 2>&1 & tail -f output.log
  1. 端口3014,拼接后的完整地址如下,可根据客户端的需求配置apibase地址使用(如需https,需用nginx进行反代,网上教程很多)
http://localhost:3014/v1/chat/completions

Cloudflare Worker部署

  1. 复制search2openai.js或者search2gemini.js或者search2groq.js的代码,不需要任何修改!在cloudflare的worker里部署,上线后的worker的地址可作为你接口调用时的自定义域名地址,注意拼接,worker地址仅代表v1前的部分
  2. 在worker中配置环境变量 效果示例
  3. worker里配置触发器-自定义域名,国内直接访问worker的地址可能会出问题,需要替换为自定义域名 Alt text

Vercel部署

特别说明:vercel项目暂不支持流式输出,且有10s响应限制,实际使用体验不佳,放出来主要是想等大神给我pull request

一键部署

Deploy with Vercel

为保证更新,也可以先fork本项目后自己在vercel上部署

环境变量

该项目提供了一些额外的配置项,通过环境变量设置:

环境变量 是否必须 描述 例子
SEARCH_SERVICE Yes 你的搜索服务,选择什么服务,就需要配置什么服务的key search1api, google, bing, serpapi, serper, duckduckgo, searxng
APIBASE No 三方代理地址 https://api.openai.com, https://api.moonshot.cn, https://api.groq.com/openai
MAX_RESULTS Yes 搜索结果条数 10
CRAWL_RESULTS No 要进行深度搜索(搜索后获取网页正文)的数量,目前仅支持 search1api,深度速度会慢 1
SEARCH1API_KEY No 如选search1api必填,我自己搭建的搜索服务,又快又便宜,申请地址 https://search1api.com xxx
BING_KEY No 如选bing搜索必填,请自行搜索教程,申请地址 https://search2ai.online/bing xxx
GOOGLE_CX No 如选Google搜索必填,Search engine ID,请自行搜索教程,申请地址 https://search2ai.online/googlecx xxx
GOOGLE_KEY No 如选Google搜索必填,API key,申请地址 https://search2ai.online/googlekey xxx
SERPAPI_KEY No 如选serpapi必填,免费100次/月,注册地址 https://search2ai.online/serpapi xxx
SERPER_KEY No 如选serper必填,6个月免费额度2500次,注册地址 https://search2ai.online/serper xxx
SEARXNG_BASE_URL No 如选searxng必填,填写自建searXNG服务域名,教程 https://github.com/searxng/searxng,需打开 json 模式 https://search.xxx.xxx
OPENAI_TYPE No openai供给来源,默认为openai openai, azure
RESOURCE_NAME No 如选azure必填 xxxx
DEPLOY_NAME No 如选azure必填 gpt-35-turbo
API_VERSION No 如选azure必填 2024-02-15-preview
AZURE_API_KEY No 如选azure必填 xxxx
AUTH_KEYS No 如果希望用户请求的时候单独定义授权码作为key,则需要填写,如选azure则必填 000,1111,2222
OPENAI_API_KEY No 如果希望用户请求openai的时候也单独定义授权码作为key,则需要填写 sk-xxx

后续迭代

  • 修复Vercel项目流式输出问题
  • 提升流式输出的速度
  • 支持更多垂类搜索

search2ai's People

Contributors

cheungchazz avatar fatwang2 avatar rinex20 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

search2ai's Issues

units文件夹里的三个后端是什么

我看见units文件夹里三个js文件负责向后端(比如说搜索引擎)发请求,但使用是你自己的后端,比如https://search.search2ai.one,请问这是个什么后端,是否安全?

在Zeabur部署后发起对话时出现“请求处理时发生错误: Error: OpenAI API 请求失败”

使用不同的代理地址或者默认的openai api都会出现这一情况:

请求处理时发生错误: Error: OpenAI API 请求失败

at handleRequest (/src/api/search2ai.js:107:15)

at process.processTicksAndRejections (node:internal/process/task_queues:95:5)

at async module.exports (/src/api/index.js:87:24)

at async /src/api/index.js:145:13

Sending response as a string or Buffer

image
以下是我配置的环境变量
image

请问该如何解决?

最近使用searxng搜索服务提示 “在 news 函数中捕获到错误: ReferenceError: MAX_RESULTS is not defined”

2号部署后可以正常使用,但是昨天发现联网查询就报错。
{ role: 'user', content: '微软最近发布了哪些新产品?' }, { role: 'assistant', content: null, tool_calls: [ [Object] ] } ] 开始检查是否有函数调用 正在使用查询进行新闻搜索: "微软最近发布的产品" 在 news 函数中捕获到错误: ReferenceError: MAX_RESULTS is not defined 结束检查是否有函数调用 返回流 Sending response as a stream
使用search1api搜索服务就没问题

怎么获得中间搜索结果

融合搜索后,得到的结果看起来是大模型基于搜索结果做的回答,能不能够拿到中间搜索结果信息呢

使用GPT4o,发现不支持图片了

发图片过去会报错,如下:
[openai_api_compatible] Error: API request failed with status code 500: OpenAI API 请求失败,状态码: 400

Usage guide

Hi, I am trying to use this api for function calling?

I am encountering these issues:
When I using the deploy to Zeabur, it gives internal server error

I also tried using local deployment, it gives Authorization header is missing when I try to open the api address?

Can you share some instructions how to use the api for function calling in python?

如果请求 v1/audio/ 下的接口会因为解析 json 报错

const server = http.createServer((req, res) => {
    if (req.method === "POST") {
      let body = []; // 使用数组来收集数据块
      req.on("data", chunk => {
        body.push(chunk); // 收集数据块
      });
      req.on("end", () => {
        // 将数据块组合成完整的数据
        const combinedData = Buffer.concat(body);
        // 如果请求是音频,直接使用二进制数据
        if (!req.url.startsWith("/v1/audio/")) {
          try {
            // 尝试解析JSON
            req.body = JSON.parse(combinedData.toString());
          } catch (error) {
            res.statusCode = 400;
            console.error("Invalid JSON:", error);
            res.end("Invalid JSON");
            return;
          }
        } else {
          // 对于音频请求,直接使用二进制数据
          req.body = combinedData;
        }
        processRequest(req, res);
      });
    } else {
      // GET 和其他类型的请求直接处理
      processRequest(req, res);
    }
  });

这里已经直接改好了如果请求的是音频接口的话,那么直接使用二进制,避开因为强制解析成 JSON 而报错。

这样可以让 whisper + gpt + tts 的方案也可以直接过滤走您的服务,不用单独在开发层面做设置。这样在适配到 OpenCat 上的语音对话功能时就不会报错啦。

1个流程图,4个问题:如何判断要不要搜索?谁把搜索结果组织成“人话”?付费的moonshot API-key写在哪?

我现使用付费版的moonshot API,如果想要加上search2ai的搜索,应如何操作?

阅读了本站说明,我画了个流程图,似乎是这样,不知是否有误:

Screenshot 2024-06-03 at 07 01 27

问题 1: 关于 第4步
search2ai 是怎样 根据 moonshot API 的返回值来判断是不是要进行搜索的?

问题 2: 关于 第6步
search2ai 是怎样 根据 搜索的结果(结合用户的问题)组织成“人话” (通顺的回答)语句的呢 ?
search2ai 会自动内部去调用另一个 LLM GPT 去把搜索结果组织成“人话”吗? 或 search2ai 内含【自然语言处理】能组织答案?

问题 3:
我付费的moonshot API-key 要写在search2ai的哪里?否则search2ai如何转发用户的问题到moonshot?或者要把付费的moonshot API-key告诉search1api吗?

问题 4:
如果大模型moonshot不需要搜索,直接回答了问题。那么问答同样是经 search2ai 中转的?那是否还要给 search1api 计费并付费?

function call失败

cf搭建的互联网搜索,0.2.5后,function call网络搜索的数据获取不到,同样的在search2all中SERPER工作正常,测试了SERPAPI和bing均失败,api调用测试显示function call的q可以发出,网络数据读取失败

大佬请看这里bug反馈。

第一,我已经在cf里面实现了域名的绑定,如下:
image
image
最后
image
image
在next里面一直显示:正在输出,如下
image

使用google有报错

报错信息如下:
"在 news 函数中捕获到错误: TypeError: Cannot read properties of undefined (reading 'slice')"

而使用duckduckgo时没有问题,请问这该是什么问题呢?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.