One API 统一接口来访问多种大型语言模型的部署和配置

72 min read

"One API" 是一个开源项目,它提供了一个统一的接口来访问多种大型语言模型,包括但不限于 OpenAI 的 ChatGPT 系列、Anthropic Claude 系列、Google PaLM2 系列等。这个项目旨在使得通过标准的 OpenAI API 格式访问所有这些大模型变得更加容易和直观。

以下是 "One API" 的一些主要特点和功能:

  1. 支持多种大模型:集成了多种流行的大型语言模型,使用户可以通过一个统一的接口来访问这些模型。

  2. 配置镜像和代理服务:支持配置镜像以及多个第三方代理服务,便于扩展和定制。

  3. 负载均衡:支持通过负载均衡的方式访问多个渠道,优化资源使用和提高响应速度。

  4. 多机部署和令牌管理:支持多机部署和令牌管理,包括设置令牌的过期时间和额度。

  5. 自定义设置:允许用户进行丰富的自定义设置,包括系统名称、logo、首页和关于页面等。

  6. 用户管理:支持多种用户登录注册方式,包括邮箱登录、GitHub 授权和微信公众号授权等。

  7. Docker 部署:项目可以基于 Docker 进行部署,简化了安装和配置过程。

  8. 环境变量和命令行参数:提供灵活的配置选项,允许用户通过设置环境变量或命令行参数来调整系统设置。

  9. 开源许可:项目使用 MIT 协议进行开源,要求在使用时保留署名和指向项目的链接。

"One API" 项目适用于希望通过单一接口访问多个大型语言模型的开发者和组织,它的设计目的是为了简化这些模型的集成和使用过程。由于这些模型通常用于复杂的自然语言处理任务,"One API" 提供了一个方便的方式来利用它们的能力,同时保持了对多种不同模型的访问能力。

下面介绍完整的"One API" 完整服务器配置和使用说明,请按下面的顺序进行相关的基础设施的安装和配置, 如果已安装或者配置可以跳过进行到下一步

使用官方安装脚本自动安装Docker

本次"One API"的安装将会使用docker, 安装Docker命令如下:

 curl -fsSL https://test.docker.com -o test-docker.sh
 sudo sh test-docker.sh

安装 Docker Compose, 可以通过运行以下命令来完成:

sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

上述命令中的版本号 v2.2.3 可能不是最新的。请访问 Docker Compose 的 GitHub 发行页面来查看最新版本,并替换为相应的版本号。

给下载的二进制文件添加执行权限

sudo chmod +x /usr/local/bin/docker-compose

测试是否安装成功。通过运行 docker-compose --version 来测试 Docker Compose 是否正确安装:

docker-compose --version

如果命令返回了版本号,表示 Docker Compose 已成功安装

安装和配置 Nginx

  1. 更新包索引

    打开终端并运行以下命令来更新您的包索引:

    sudo apt update
    
  2. 安装 Nginx

    通过运行以下命令安装 Nginx:

    sudo apt install nginx
    
  3. 启动 Nginx 服务

    安装完成后,启动 Nginx 服务:

    sudo systemctl start nginx
    
  4. 设置 Nginx 开机自启

    如果您想让 Nginx 在启动时自动运行,使用以下命令:

    sudo systemctl enable nginx
    
  5. 检查 Nginx 状态

    检查 Nginx 是否正在运行:

    sudo systemctl status nginx
    
  6. 配置防火墙

    如果您的服务器正在运行防火墙,请确保开放 HTTP 和 HTTPS 端口:

    sudo ufw allow 'Nginx Full'
    

配置 Nginx:

  1. 编辑 Nginx 配置

    Nginx 的全局配置文件位于 /etc/nginx/nginx.conf,但通常您会在 /etc/nginx/sites-available/ 下创建或修改站点配置文件。您可以使用文本编辑器来编辑这些文件。例如,使用 nano 编辑默认的配置文件:

    sudo vim /etc/nginx/sites-available/default
    

    如果您想要为不同的网站或应用程序设置不同的服务器块,可以在 /etc/nginx/sites-available/ 下创建新的配置文件,并创建一个符号链接到 /etc/nginx/sites-enabled/

    sudo ln -s /etc/nginx/sites-available/model.conf /etc/nginx/sites-enabled/
    
  2. 创建一个简单的服务器块配置

    在编辑器中,您可以定义一个服务器块,如下所示:

    server{
       server_name openai.justsong.cn;  # 请根据实际情况修改你的域名
    
       location / {
              client_max_body_size  64m;
              proxy_http_version 1.1;
              proxy_pass http://localhost:3000;  # 请根据实际情况修改你的端口
              proxy_set_header Host $host;
              proxy_set_header X-Forwarded-For $remote_addr;
              proxy_cache_bypass $http_upgrade;
              proxy_set_header Accept-Encoding gzip;
              proxy_read_timeout 300s;  # GPT-4 需要较长的超时时间,请自行调整
       }
    }
    

    这个配置指示 Nginx 监听 80 端口,并处理针对 example.comwww.example.com 的请求,文档根目录设为 /var/www/html

  3. 检查 Nginx 配置文件的语法

    保存并关闭文件后,检查您的配置文件语法是否正确:

    sudo nginx -t
    

    如果返回“syntax is ok”和“test is successful”信息,则配置文件无误。

  4. 重启 Nginx

    重新加载 Nginx 以应用配置更改:

    sudo systemctl reload nginx
    
  5. 确认 Nginx 正在正常服务内容

    在浏览器中访问您的服务器的 IP 地址或域名,您应该看到 Nginx 的欢迎页面或您设置的网页内容。

使用 acme.sh 配置自动续签的 SSL 证书

acme.sh 是一个集成了 ACME 客户端协议的 Bash 脚本,作者是 @neilpangxa,按照官方文档说明,我们直接在 Linux 下安装。

apt-get install cron
curl https://get.acme.sh | sh -s email=[email protected]

如果是国内的机器,可以使用拖回源码直接安装:

git clone --depth 1 https://github.com/acmesh-official/acme.sh.git
cd acme.sh
./acme.sh --install -m [email protected]

请注意替换 [email protected] 为你自己的邮箱,避免无法收到上游证书的邮件通知,比如 Let's Encrypt 偶尔会错发证书,然后就会邮件通知你,这时候就需要重新签发一次证书了。

安装完成后重新加载 Bash:

source ~/.bashrc

然后也可以开启自动更新:

acme.sh --upgrade --auto-upgrade

使用 HTTP 验证签发证书

首先我们要做一下准备工作,假设你域名是 example.com,解析到你的服务器让其生效后,我们建立一个目录:

mkdir -p /var/www/letsencrypt

我们的目的是绑定 http://example.com/.well-known/acme-challenge 到这个目录。

新建一个配置文件:

server {
	listen 80;
	listen [::]:80;
	server_name example.com;

	location /.well-known/acme-challenge {
		root /var/www/letsencrypt;
	}

	location / {
		rewrite	^/(.*)$ https://$host/$1 permanent;
	}
}

注意这里的 location 位置顺序很重要

我们以 Let's Encrypt 为例,直接在终端运行

acme.sh --issue -d example.com -w /var/www/letsencrypt

然后就等他执行完,直到出现 Cert success 的提示

然后我们可以安装证书

acme.sh --install-cert -d example.com \
--key-file       /etc/nginx/ssl/example.com.key  \
--fullchain-file /etc/nginx/ssl/example.com.crt \
--ca-file        /etc/nginx/ssl/example.com.ca.crt \
--reloadcmd     "systemctl restart nginx"
  1. 证书文件(.cer):这是您网站的公钥证书。它包含公钥信息和网站身份信息,由证书颁发机构(CA)签发。当用户访问您的网站时,浏览器会使用此证书中的公钥来加密与您网站的通信。因此,这个文件对外部是可见的。
  2. 私钥文件(.key):与证书文件相对应,这个文件包含您网站的私钥。私钥用于解密用户发送到您网站的加密数据。因为它是解密通信的唯一密钥,所以必须妥善保管,防止泄露。
  3. 中间CA证书(ca.cer):这个文件包含了签发您网站证书的中间证书颁发机构(CA)的证书。它是证书链的一部分,帮助客户端验证您的网站证书是由可信的CA签发的。
  4. 完整证书链(fullchain.cer):包含了您的网站证书和中间CA证书。在配置服务器时,通常需要使用这个文件,因为它提供了从根CA到您网站证书的完整验证路径。这有助于客户端验证证书的完整性和有效性。

对应的 Nginx 配置指定证书文件

ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
ssl_trusted_certificate /etc/nginx/ssl/example.com.ca.crt;

最后使用 sudo nginx -t 命令来测试配置文件是否正确

重启 Nginx 以应用更改 运行 sudo systemctl restart nginx 命令来完成

最后完整的配置如下

server {
    server_name ai.x.com;  # 请根据实际情况修改你的域名
    
    # 添加 SSL 配置
    listen 443 ssl;
    ssl_certificate /etc/nginx/ssl/ai.x.com.crt;
    ssl_certificate_key /etc/nginx/ssl/ai.x.com.key;
      ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
    ssl_prefer_server_ciphers on;
    
    # 其他服务器配置
    location /.well-known/acme-challenge {
        root /var/www/letsencrypt;
    }

    location / {
        client_max_body_size 64m;
        proxy_http_version 1.1;
        proxy_pass http://localhost:3000;  # 请根据实际情况修改你的端口
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header Accept-Encoding gzip;
        proxy_read_timeout 300s;
    }
}

使用方法

进行项目的根目录下 执行如下的命令

docker-compose up -d

服务启动成功后在渠道页面中添加你的 API Key,之后在令牌页面中新增访问令牌。

之后就可以使用你的令牌访问 One API 了,使用方式与 OpenAI API 一致。

你需要在各种用到 OpenAI API 的地方设置 API Base 为你的 One API 的部署地址

例如:https://openai.justsong.cn,API Key 则为你在 One API 中生成的令牌。

注意,具体的 API Base 的格式取决于你所使用的客户端。

例如对于 OpenAI 的官方库:

OPENAI_API_KEY="sk-xxxxxx"
OPENAI_API_BASE="https://<HOST>:<PORT>/v1"