本篇先搭建一个网站的后端——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的,就证明你配置完毕了。如下图
如何使用?
正常发请求调用的话,这里贴一贴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恰好默认就是轮询方式。
除了谷歌的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构建了全部索引,你依然得不到和知识库对话的机会(悲)