应老师的邀请,最近开一个部署AI聊天网站的系列教程。这个教程面向全部用户,不管你有没有编程基础,你都可以自己动手搭建一个自己的聊天网站。我们最终实现的结果如下
从零开始搭建一个AI聊天网站(一)—— API转发站

本篇先搭建一个网站的后端——API转发站。

API转发站

随着国内外各种大模型如雨后春笋般出现,出现了一个相当繁杂的问题,就是各厂商开放接口的格式不规范,各家有各家的接口格式,因此我们的程序想要用不同的模型,就需要分别请求各家的模型,拿到响应之后再去拆包,拿到我们想要的东西。

这个过程技术含量不高,麻烦的地方就是需要去看各家的API接口文档,然后发请求,不断地调试等等,非常繁杂(繁重、麻烦)。于是API转发站就应运而生。API转发站指的是一种能够将各家大模型的接口全部规范为OpenAI接口格式的项目,它提供了一个唯一地址,即此项目的本身的部署地址,来接受用户发出的请求,返回的响应全部为OpenAI单一格式,方便开发者获取大模型的回复。

这其中较为优秀的项目有one-api和new-api,在github上已经拿到了上千颗star。不过,这两个项目属于商业项目,如果仅仅我们自身使用的话,有许多功能对我们个人是不必要的。因此,我选择部署 uni-api。

以上是一些背景知识,不含教程,了解即可。接下来教程正式开始,首先你要确保你的电脑已经安装git和docker。如果没有安装,可访问 https://web.leebay.cyou 在ChatGPT的指导下,一步步完成安装,基本一遍过,不再赘述。

uni-api

 

uni-api是一位大佬写的项目,具体就不介绍了,地址贴在这里:

https://github.com/yym68686/uni-api

接下来执行命令

git clone https://github.com/yym68686/uni-api

如果遇到了网络问题,请将github.com 更改为 github.site

在根目录下,有两处要做修改。先打开docker-compose.yml 文件,添加以下内容,这一步的目的是让docker从镜像源拉取镜像。

另外在根目录创建api.yaml 这个文件,这个文件是整个项目的配置文件,你需要按照项目地址中这个文件的具体配置说明来填写。下面贴出我的项目配置示例:

这一部分是访问此程序的密钥配置。api是你自己填写的密钥 ,用于发请求,你可以设置多个密钥,role:admin 对应的密钥可用来登录前端。preference是高级设置,一般不用管。

这一部分是模型供应商的配置,api部分填写你在google处拿到的密钥,model对应gemini的模型,base_url一般不用改

都配置完成之后,在项目根目录打开cmd(命令行工具),输入以下命令:

docker compose up -d

这时候会自动拉取这个项目,等待拉取完成后,访问

http://127.0.0.1:8001

如果出现了一个前端页面,让你填入一个key的,就证明你配置完毕了。如下图

从零开始搭建一个AI聊天网站(一)—— API转发站

如何使用?

正常发请求调用的话,这里贴一贴js的请求代码,可以参照搞一搞;也可以下载APIfox或者Postman等接口测试工具调试。如果你不懂代码也没关系,只要访问 http://127.0.0.1:8001 能出现页面就行。

var myHeaders = new Headers();myHeaders.append("Accept""application/json");myHeaders.append("Authorization""Bearer sk-key");myHeaders.append("User-Agent""Apifox/1.0.0 (https://apifox.com)");myHeaders.append("Content-Type""application/json");myHeaders.append("Host""127.0.0.1:8001");myHeaders.append("Connection""keep-alive");var raw = JSON.stringify({  "model""gemini-1.5-flash"  "stream"true,  "messages": [   {     "role""system",     "content""You are a helpful assistant."   },   {     "role""user",     "content""Hello!"   }  ]});var requestOptions = {  method: 'POST',  headers: myHeaders,  body: raw,  redirect: 'follow'};fetch("http://127.0.0.1:8001/v1/chat/completions", requestOptions)  .then(response => response.text())  .then(result => console.log(result))  .catch(error => console.log('error'error));

技巧

为了在大模型浪潮中后来居上,占得一席之地,财大气粗的谷歌向开发者提供了免费调用次数,针对pro系列,每个key每天50次调用,每分钟两次;针对flash系列,每天1500次,每分钟10次调用。因此,假如我们有很多key,理论来讲,如果对key不断轮询发请求的话,就可以实现无限白嫖。而我们部署的uni-api恰好默认就是轮询方式。

从零开始搭建一个AI聊天网站(一)—— API转发站

        除了谷歌的gemini,还有很多免费的API供我们使用,这里稍稍列举一些:

Gemini

  • 全模型 gemini-2.0-flash-exp,gemini-2.0-flash-thinking-exp,gemini-1.5-flash-002,gemini-1.5-pro-latest,gemini-1.5-flash-latest,gemini-1.5-pro-0827-exp,gemini-1.5-flash-exp-0827,gemini-1.5-pro-002,gemini-1.5-pro,gemini-1.5-flash,gemini-exp-1206
  • 获取key的地址:https://aistudio.google.com/apikey
  • 完全免费,但有配额,参照上图

DeepSeek

  • deepseek-chat
  • 官网: www.deepseek.com
  • 注册送500Wtoken,体验最新v3模型

Siliconflow

  • 模型太多了,请到官网浏览
  • 邀请链接:https://cloud.siliconflow.cn/i/CooJN7Ek (图穷匕见 doge)
  • 从以上链接注册,你我各得2000w tokens!

github

  • gpt系列,mixtral系列等等
  • 地址:https://github.com/marketplace/models/azure-openai/gpt-4o/playground
  • 限制比较多,不过自用完全没问题
  • 补充一条,刚创建一个号,准备组建号池实现gpt系列自由,发现新创建的号能拿到同样格式的key,无法请求大模型,猜测可能需要github学生包(我大号申请过)

 

瑕疵

这个项目很好,能在大多数场景使用。但毕竟自用的多,有时候自己也会有并发较大的需求。比如GraphRAG。

这个变态的项目我之前提到过,它的优点相当明显,可以将一段非常长的长文本转为知识库,上下文衔接做的非常好;但贵也真贵。它每分钟并发得有上百次。假如这个项目填入我们部署的uni-api地址,结果是好多Network Error,起初我以为是我Gemini反代(在cloudflare上,对并发量有限制)的问题,结果切换到one-api发现没有这个问题,因此得出结论,uni-api不适合做超高并发。

如果有超高并发的需求,我更推荐用商业API服务,因为很多场景搞这个的都考虑到了,而且价格大多比官方便宜。我用的较多的是金石AI,这里1.6人民币可兑1美元额度,满足AI视频、AI音乐、AI对话、AI绘画以及各种广泛应用场景,并且支持无限并发,注册即送0.2刀的体验金,可以体验体验。

好了,不打广告了。有的同学要问,既然自己搭建的one-api也能支持高并发,为什么不自己搭建一个one-api,反而要花钱呢?这个问题问得好,能问出来这个问题说明对这篇文章很上心。one-api和uni-api一样,是一个API转发器,因此如果要实现所谓的免费,我们必须耗费大量的精力去找免费的key,我上面提到的白嫖的方法固然很好,但这种事情实在耗费精力。比如gemini,我知道gemini能白嫖,但光注册谷歌账号组建号池恐怕就得看很多文章了。另外,这里主要讲graphrag的场景,graphrag是微软团队出的,和谷歌是竞争关系,我不知道微软团队是不是埋了一些坑,总之,即便用gemini构建了全部索引,你依然得不到和知识库对话的机会(悲)

从零开始搭建一个AI聊天网站(一)—— API转发站