在Linux中编译安装开源版COAI搭建一站式多模型AI平台

大家好!沉寂了3年多,香菇肥牛博客终于要更新啦!

如今,ChatGPT等AI平台在我们的日常生活中得到了越来越广泛的应用。今天我就来介绍一下如何搭建自己的一站式多模型AI平台。本文作者为香菇肥牛,原文链接为https://qing.su/article/linux-ai-platform-with-coai.html,转载需注明原文链接。谢谢大家的支持!

和官方网站相比,自己搭建的多模型平台有着如下显著优势:

  1. 可以调用最新版本的模型,且价格更低。以ChatGPT为例,每月的订阅会员是$20刀或者$200刀。而自己搭建的平台是按次付费,除非是用量特别高,否则肯定是比每个月的订阅会员便宜的。
  2. 可以整合多模型,比如GPT, Claude, MidJourney, 月之暗面,等等,按需选择即可,无需在每个平台上分别开会员。
  3. 更方便地在家人和朋友间共享。
  4. 更好地自定义预设会话等等。

国内外的一站式多模型AI平台程序有很多种,今天我们介绍ChatNIO/COAI这款国产程序。COAI免费开源(当然它也有付费版,不在讨论范围内),支持国内外各类大语言模型厂商和自行添加新模型,支持上游中转API,有完善的用户管理机制,拥有(我认为)不错的用户使用界面。而且它的会话分享功能做得很不错。

COAI可以使用docker-compose一键搭建(https://github.com/coaidev/coai)。但是,出于一些后续源码修改及功能自定义的需求,我这里选择编译安装部署。如果没有这类需求,也可以直接用Docker (参考链接),这里我就不再介绍了。

本次部署环境为Ubuntu 24.04 LTS.  安装运行时内存占用仅约为700 MB左右,但是编译过程中需要3 GB左右的内存;如果内存不足,请自行添加足够的SWAP,防止编译失败。

1. 安装配置MySQL和Redis

COAI需要用到MySQL和Redis.  首先,安装Redis.

1
2
3
4
5
6
7
8
apt-get install lsb-release curl gpg git
curl -fsSL https://packages.redis.io/gpg | gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
chmod 644 /usr/share/keyrings/redis-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/redis.list
apt-get update
apt-get install redis
service redis-server start
systemctl enable redis-server

安装完毕后,检测一下是否正常运行。

接下来,安装MySQL.  需要注意,Ubuntu 24.04默认的MySQL版本是8.x,部分SQL指令和MySQL 5.x有所差异(比如不能用GRANT指令新建用户、需要先新建用户再GRANT)。

1
apt-get install npm golang-go mysql-server

安装完毕后执行下面的命令,进行一些安全设定;全部选择Yes即可。

1
mysql_secure_installation

执行完毕后,先进入数据库:

1
mysql -u root -p

然后,设置root用户的密码,并且新建数据库coaidb和用户coaiuser给COAI使用。请将passwordpassword2替换为你自己要设定的密码。

1
2
3
4
5
6
ALTER USERER 'root'@'localhost' IDENTIFIED BY 'password';
CREATE DATABASE coaidb;
CREATE USER 'coaiuser'@'localhost' IDENTIFIED BY 'password2';
GRANT ALL ON coaidb.* TO 'coaiuser'@'localhost';
FLUSH PRIVILEGES;
QUIT;

这样,Redis和MySQL就安装设定完毕了。

2. 编译安装COAI

下面,我们开始从Github下载源码并编译安装COAI.  首先下载源码。

1
2
3
4
cd /opt
git clone https://github.com/coaidev/coai.git
cd coai
cp config.example.yaml config.yaml

编辑config.yaml文件,填入刚才设置的MySQL数据库信息。SECRET那里随便填写一串字符作为密钥。编辑完成后,开始编译安装。

1
2
3
4
5
6
cd app
npm install -g pnpm
pnpm install
pnpm build
cd ..
go build -o coai

如果没有报错,会在当前目录中(/opt/coai/)生成一个名为coai的可执行文件。我们用SystemD来运行这个程序。编辑文件/etc/systemd/system/coai.service, 输入下面的内容:

1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=COAI Service

[Service]
Type=simple
User=root
WorkingDirectory=/opt/coai
ExecStart=/opt/coai/coai
Restart=always

[Install]
WantedBy=multi-user.target

保存退出,然后运行并设置开机启动。

1
2
3
systemctl daemon-reload
systemctl start coai.service
systemctl enable coai.service

这样,COAI程序就安装好了。此时,我们访问http://Server_IP:8094,就能打开COAI的界面了;如果打不开,说明安装有问题,可以查看chatnio.log排查。

3. 设置Nginx反代

COAI安装在服务器的8094端口;因此,我们可以安装配置Nginx来反代这个COAI实例,并且使用Let’s Encrypt来设置安全证书。将你的域名example.com解析到服务器的IP上,然后安装Nginx.

1
2
apt-get install nginx certbot python3-certbot-nginx -y
cp /opt/coai/nginx.conf /etc/nginx/conf.d/coai.conf

然后编辑/etc/nginx/conf.d/coai.conf,在listen 80;下面添加一行

1
server_name example.com

保存退出,重新加载Nginx使配置生效。

1
2
nginx -t
service nginx reload

最后,配置Let’s Encrypt安全证书。

1
certbot --nginx --redirect --hsts --staple-ocsp -d example.com

这样,就配置好了Nginx反代与SSL.  此时,用浏览器访问https://example.com,就能直接打开COAI的界面了。

4. 安装文件解析服务(可选)

搭建的COAI平台依赖额外的文件解析服务来分解用户上传的文件(图片, PDF, Excel等等)。我们可以选择用默认的第三方文件解析平台,缺点是服务器距离较远会导致解析速度慢,且上传的文件在第三方中转,可能会有安全性考虑。因此,我们也可以在同一台服务器上部署这个轻量的文件解析服务。

文件解析服务的部署也可以用Docker (https://github.com/zmh-program/blob-service),或者编译安装。这里简单介绍下编译安装。

在新版本的Debian/Ubuntu中,Python一般在虚拟微环境(VENV)中部署,而不是在系统全局中部署。

1
2
3
4
apt-get install python3-pip python3 python3-dev python3.12-venv
cd /opt
git clone --branch=main https://github.com/Deeptrain-Community/chatnio-blob-service
cd chatnio-blob-service

在文件夹中生成Python3微环境,并在微环境中安装依赖:

1
2
python3 -m venv python-venv
./python-venv/bin/pip3 install -r requirements.txt

编辑文件/opt/chatnio-blob-service/install.sh,将其中第9行的uvicorn执行路径替换为微环境中的uvicorn执行路径。在第9行开头添加/opt/chatnio-blob-service/python-venv/bin/.

1
/opt/chatnio-blob-service/python-venv/bin/uvicorn main:app --host 0.0.0.0 --port 8100" > start.sh

然后开始安装:

1
2
chmod +x install.sh
./install.sh

此时,访问http://Server_IP:8100,如果能打开如下的界面,说明安装成功了。

5. 安装联网搜索服务(可选)

据官方说明,使用联网搜索服务可以提升AI回答的质量。然而,实际使用过程中,我并没有体会到有什么变化。因此,这一部分也是可选的。下面是简易的SearXNG元搜索引擎的安装步骤;也可以直接通过Docker安装(https://github.com/zmh-program/searxng)。

1
2
3
4
cd /opt
git clone https://github.com/searxng/searxng.git searxng
cd searxng
./utils/searxng.sh install all

安装完毕后,打开http://Server_IP/searxng,如果能打开如下的界面,说明安装成功了。

6. 配置和使用COAI

至此,全部安装完毕。下面我来简要介绍一下COAI的配置和使用。

首先,我们用使用用户名root, 密码chatnio123456登录,并进入管理后台。

点击左侧“系统设置”,然后“修改Root密码”。

在“后端域名”中,填写自己的服务器域名https://example.com/api

如果之前安装了文件解析服务,那么找到“文件解析服务”这一行,填写地址http://127.0.0.1:8100.

如果之前安装了联网搜索服务,那么找到“搜索接入点”这一行,填写地址http://127.0.0.1/searxng.

然后,我们来添加各种AI平台渠道。这里以ChatGPT为例,首先在官网上申请获得API,或者去第三方API中转平台拿到API.  一般来说,第三方中转平台的价格比官方更低,我用的是OAIBEST这个平台,可以点击下面的链接注册https://api.oaibest.com/register?aff=JrwM;注册后可以免费获得$1的金额用来体验($1可以用很久了)。

拿到API之后,在COAI后台,点击左侧“渠道设置”,选择“创建渠道”。然后,填写想要使用的模型,比如gpt-4o-latest, gpt-4o-mini, 等等。需要注意的是,o1和o1-mini模型的请求参数不一样,不能和其他模型一起添加,需要分开添加;我将在下一节单独介绍。在“密钥”中,填写从官方或者中转平台取得的API Key.  然后,在“接入点”中,填写API接入点。如果是官网API,就写https://api.openai.com; 如果是OAIBEST,就填写https://api.oaibest.com.  然后点击“确认”保存。可以根据自己的需求来设定需要接入的所有模型,比如Claude-3.5, MidJourney, 月之暗面,文心一言,等等。

接着,点击左侧“模型市场”,之前添加的模型会出现在“部分模型未使用”的列表中。依次点击后,模型会出现在下方使用区;可以自行更改顺序、说明、图标等。保存并退出。

再点击左侧“价格设定”,选择模型并且设定点数消耗,保存并退出。

最后,点击用户管理,选择自己用户右边的“操作” – “点数操作”,给自己设定点数余额。

至此,我们的多模型一站式AI平台就搭建完毕,可以自由使用了。下面是一些简单示例。

7. 配置o1-preview和o1-mini模型

前面提到,OpenAI/ChatGPT的o1-preview和o1-mini模型的API将max_tokens参数替换成了max_completion_tokens参数,这会导致API请求失败。在COAI程序更新彻底解决这一问题之前,我们需要使用额外的方式来解决修改COAI向接入点提交的请求。这里,我们使用第三方小工具o1convert来解决这个问题。

1
2
3
4
docker run -d --name o1convert \
-p 8000:8000 \
-e SERVER_URL=https://api.openai.com \
htnanako/o1convert:latest

装好这个docker之后,再回到COAI后台,在渠道设置中添加一个新的渠道,接入点填写http://127.0.0.1:8000,即可使用o1-preview和o1-mini模型了。

 

这样,我们完整地搭建部署了多模型一站式AI平台,并配置了API.  如果有任何疑问,欢迎在这里留言讨论。本文作者为香菇肥牛,原文链接为https://qing.su/article/linux-ai-platform-with-coai.html,转载需注明原文链接。谢谢大家的支持!

Leave a Comment