• Stars
    star
    355
  • Rank 115,564 (Top 3 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created about 1 year ago
  • Updated 12 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

All in one 的 OpenAI 接口,整合各种 API 访问方式,支持 Azure OpenAI API,也可作为 OpenAI API 代理使用,仅单可执行文件,已打包好 Docker 镜像,一键部署,开箱即用

中文 | English

one-api logo

One API

✨ All in one 的 OpenAI 接口,整合各种 API 访问方式,开箱即用✨

license release docker pull release GoReportCard

部署教程 · 使用方法 · 意见反馈 · 截图展示 · 在线演示 · 常见问题 · 相关项目 · 赞赏支持

Note:本项目为开源项目,使用者必须在遵循 OpenAI 的使用条款以及法律法规的情况下使用,不得用于非法用途。

Note:使用 Docker 拉取的最新镜像可能是 alpha 版本,如果追求稳定性请手动指定版本。

Warning:从 v0.3 版本升级到 v0.4 版本需要手动迁移数据库,请手动执行数据库迁移脚本

功能

  1. 支持多种 API 访问渠道:
  2. 支持通过负载均衡的方式访问多个渠道。
  3. 支持 stream 模式,可以通过流式传输实现打字机效果。
  4. 支持多机部署详见此处
  5. 支持令牌管理,设置令牌的过期时间和额度。
  6. 支持兑换码管理,支持批量生成和导出兑换码,可使用兑换码为账户进行充值。
  7. 支持通道管理,批量创建通道。
  8. 支持用户分组以及渠道分组,支持为不同分组设置不同的倍率。
  9. 支持渠道设置模型列表
  10. 支持查看额度明细
  11. 支持用户邀请奖励
  12. 支持以美元为单位显示额度。
  13. 支持发布公告,设置充值链接,设置新用户初始额度。
  14. 支持模型映射,重定向用户的请求模型。
  15. 支持丰富的自定义设置,
    1. 支持自定义系统名称,logo 以及页脚。
    2. 支持自定义首页和关于页面,可以选择使用 HTML & Markdown 代码进行自定义,或者使用一个单独的网页通过 iframe 嵌入。
  16. 支持通过系统访问令牌访问管理 API。
  17. 支持 Cloudflare Turnstile 用户校验。
  18. 支持用户管理,支持多种用户登录注册方式
  19. 未来其他大模型开放 API 后,将第一时间支持,并将其封装成同样的 API 访问方式。

部署

基于 Docker 进行部署

部署命令:docker run --name one-api -d --restart always -p 3000:3000 -e TZ=Asia/Shanghai -v /home/ubuntu/data/one-api:/data justsong/one-api

如果上面的镜像无法拉取,可以尝试使用 GitHub 的 Docker 镜像,将上面的 justsong/one-api 替换为 ghcr.io/songquanpeng/one-api 即可。

如果你的并发量较大,推荐设置 SQL_DSN,详见下面环境变量一节。

更新命令:docker run --rm -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower -cR

-p 3000:3000 中的第一个 3000 是宿主机的端口,可以根据需要进行修改。

数据将会保存在宿主机的 /home/ubuntu/data/one-api 目录,请确保该目录存在且具有写入权限,或者更改为合适的目录。

Nginx 的参考配置:

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 需要较长的超时时间,请自行调整
   }
}

之后使用 Let's Encrypt 的 certbot 配置 HTTPS:

# Ubuntu 安装 certbot:
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
# 生成证书 & 修改 Nginx 配置
sudo certbot --nginx
# 根据指示进行操作
# 重启 Nginx
sudo service nginx restart

初始账号用户名为 root,密码为 123456

手动部署

  1. GitHub Releases 下载可执行文件或者从源码编译:
    git clone https://github.com/songquanpeng/one-api.git
    
    # 构建前端
    cd one-api/web
    npm install
    npm run build
    
    # 构建后端
    cd ..
    go mod download
    go build -ldflags "-s -w" -o one-api
  2. 运行:
    chmod u+x one-api
    ./one-api --port 3000 --log-dir ./logs
  3. 访问 http://localhost:3000/ 并登录。初始账号用户名为 root,密码为 123456

更加详细的部署教程参见此处

多机部署

  1. 所有服务器 SESSION_SECRET 设置一样的值。
  2. 必须设置 SQL_DSN,使用 MySQL 数据库而非 SQLite,所有服务器连接同一个数据库。
  3. 所有从服务器必须设置 NODE_TYPEslave,不设置则默认为主服务器。
  4. 设置 SYNC_FREQUENCY 后服务器将定期从数据库同步配置,在使用远程数据库的情况下,推荐设置该项并启用 Redis,无论主从。
  5. 从服务器可以选择设置 FRONTEND_BASE_URL,以重定向页面请求到主服务器。
  6. 从服务器上分别装好 Redis,设置好 REDIS_CONN_STRING,这样可以做到在缓存未过期的情况下数据库零访问,可以减少延迟。
  7. 如果主服务器访问数据库延迟也比较高,则也需要启用 Redis,并设置 SYNC_FREQUENCY,以定期从数据库同步配置。

环境变量的具体使用方法详见此处

宝塔部署教程

详见 #175

如果部署后访问出现空白页面,详见 #97

部署第三方服务配合 One API 使用

欢迎 PR 添加更多示例。

ChatGPT Next Web

项目主页:https://github.com/Yidadaa/ChatGPT-Next-Web

docker run --name chat-next-web -d -p 3001:3000 yidadaa/chatgpt-next-web

注意修改端口号和 BASE_URL

ChatGPT Web

项目主页:https://github.com/Chanzhaoyu/chatgpt-web

docker run --name chatgpt-web -d -p 3002:3002 -e OPENAI_API_BASE_URL=https://openai.justsong.cn -e OPENAI_API_KEY=sk-xxx chenzhaoyu94/chatgpt-web

注意修改端口号、OPENAI_API_BASE_URLOPENAI_API_KEY

部署到第三方平台

部署到 Sealos

Sealos 可视化部署,仅需 1 分钟。

参考这个教程中 1~5 步。

部署到 Zeabur

Zeabur 的服务器在国外,自动解决了网络的问题,同时免费的额度也足够个人使用。

  1. 首先 fork 一份代码。
  2. 进入 Zeabur,登录,进入控制台。
  3. 新建一个 Project,在 Service -> Add Service 选择 Marketplace,选择 MySQL,并记下连接参数(用户名、密码、地址、端口)。
  4. 复制链接参数,运行 create database `one-api` 创建数据库。
  5. 然后在 Service -> Add Service,选择 Git(第一次使用需要先授权),选择你 fork 的仓库。
  6. Deploy 会自动开始,先取消。进入下方 Variable,添加一个 PORT,值为 3000,再添加一个 SQL_DSN,值为 <username>:<password>@tcp(<addr>:<port>)/one-api ,然后保存。 注意如果不填写 SQL_DSN,数据将无法持久化,重新部署后数据会丢失。
  7. 选择 Redeploy。
  8. 进入下方 Domains,选择一个合适的域名前缀,如 "my-one-api",最终域名为 "my-one-api.zeabur.app",也可以 CNAME 自己的域名。
  9. 等待部署完成,点击生成的域名进入 One API。

配置

系统本身开箱即用。

你可以通过设置环境变量或者命令行参数进行配置。

等到系统启动后,使用 root 用户登录系统并做进一步的配置。

Note:如果你不知道某个配置项的含义,可以临时删掉值以看到进一步的提示文字。

使用方法

渠道页面中添加你的 API Key,之后在令牌页面中新增访问令牌。

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

你需要在各种用到 OpenAI API 的地方设置 API Base 为你的 One API 的部署地址,例如:https://openai.justsong.cn,API Key 则为你在 One API 中生成的令牌。

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

graph LR
    A(用户)
    A --->|请求| B(One API)
    B -->|中继请求| C(OpenAI)
    B -->|中继请求| D(Azure)
    B -->|中继请求| E(其他下游渠道)

可以通过在令牌后面添加渠道 ID 的方式指定使用哪一个渠道处理本次请求,例如:Authorization: Bearer ONE_API_KEY-CHANNEL_ID。 注意,需要是管理员用户创建的令牌才能指定渠道 ID。

不加的话将会使用负载均衡的方式使用多个渠道。

环境变量

  1. REDIS_CONN_STRING:设置之后将使用 Redis 作为请求频率限制的存储,而非使用内存存储。
    • 例子:REDIS_CONN_STRING=redis://default:redispw@localhost:49153
  2. SESSION_SECRET:设置之后将使用固定的会话密钥,这样系统重新启动后已登录用户的 cookie 将依旧有效。
    • 例子:SESSION_SECRET=random_string
  3. SQL_DSN:设置之后将使用指定数据库而非 SQLite,请使用 MySQL 8.0 版本。
    • 例子:SQL_DSN=root:123456@tcp(localhost:3306)/oneapi
    • 注意需要提前建立数据库 oneapi,无需手动建表,程序将自动建表。
    • 如果使用本地数据库:部署命令可添加 --network="host" 以使得容器内的程序可以访问到宿主机上的 MySQL。
    • 如果使用云数据库:如果云服务器需要验证身份,需要在连接参数中添加 ?tls=skip-verify
  4. FRONTEND_BASE_URL:设置之后将重定向页面请求到指定的地址,仅限从服务器设置。
    • 例子:FRONTEND_BASE_URL=https://openai.justsong.cn
  5. SYNC_FREQUENCY:设置之后将定期与数据库同步配置,单位为秒,未设置则不进行同步。
    • 例子:SYNC_FREQUENCY=60
  6. NODE_TYPE:设置之后将指定节点类型,可选值为 masterslave,未设置则默认为 master
    • 例子:NODE_TYPE=slave
  7. CHANNEL_UPDATE_FREQUENCY:设置之后将定期更新渠道余额,单位为分钟,未设置则不进行更新。
    • 例子:CHANNEL_UPDATE_FREQUENCY=1440
  8. CHANNEL_TEST_FREQUENCY:设置之后将定期检查渠道,单位为分钟,未设置则不进行检查。
    • 例子:CHANNEL_TEST_FREQUENCY=1440
  9. POLLING_INTERVAL:批量更新渠道余额以及测试可用性时的请求间隔,单位为秒,默认无间隔。
    • 例子:POLLING_INTERVAL=5

命令行参数

  1. --port <port_number>: 指定服务器监听的端口号,默认为 3000
    • 例子:--port 3000
  2. --log-dir <log_dir>: 指定日志文件夹,如果没有设置,日志将不会被保存。
    • 例子:--log-dir ./logs
  3. --version: 打印系统版本号并退出。
  4. --help: 查看命令的使用帮助和参数说明。

演示

在线演示

注意,该演示站不提供对外服务: https://openai.justsong.cn

截图展示

channel token

常见问题

  1. 额度是什么?怎么计算的?One API 的额度计算有问题?
    • 额度 = 分组倍率 * 模型倍率 * (提示 token 数 + 补全 token 数 * 补全倍率)
    • 其中补全倍率对于 GPT3.5 固定为 1.33,GPT4 为 2,与官方保持一致。
    • 如果是非流模式,官方接口会返回消耗的总 token,但是你要注意提示和补全的消耗倍率不一样。
  2. 账户额度足够为什么提示额度不足?
    • 请检查你的令牌额度是否足够,这个和账户额度是分开的。
    • 令牌额度仅供用户设置最大使用量,用户可自由设置。
  3. 提示无可用渠道?
    • 请检查的用户分组和渠道分组设置。
    • 以及渠道的模型设置。
  4. 渠道测试报错:invalid character '<' looking for beginning of value
    • 这是因为返回值不是合法的 JSON,而是一个 HTML 页面。
    • 大概率是你的部署站的 IP 或代理的节点被 CloudFlare 封禁了。
  5. ChatGPT Next Web 报错:Failed to fetch
    • 部署的时候不要设置 BASE_URL
    • 检查你的接口地址和 API Key 有没有填对。
  6. 报错:当前分组负载已饱和,请稍后再试
    • 上游通道 429 了。

相关项目

FastGPT: 三分钟搭建 AI 知识库

注意

本项目使用 MIT 协议进行开源,在此基础上,必须在页面底部保留署名以及指向本项目的链接。如果不想保留署名,必须首先获得授权。

同样适用于基于本项目的二开项目。

依据 MIT 协议,使用者需自行承担使用本项目的风险与责任,本开源项目开发者与此无关。

More Repositories

1

message-pusher

搭建专属于你的消息推送服务,支持多种消息推送方式,支持 Markdown,基于 Golang 仅单可执行文件,开箱即用
JavaScript
1,045
star
2

go-file

基于 Go 的文件分享工具,仅单可执行文件,开箱即用,内置图床和视频播放页面. File sharing tool based on Go.
HTML
527
star
3

pytorch-template

To be the world's best PyTorch project template.
Python
181
star
4

stats-cards

在 README 中展示你在知乎,GitHub,B 站,LeetCode,掘金,CSDN,牛客等网站的数据,也可用于服务状态监控. Show your LeetCode & GitHub stats in GitHub Profile.
JavaScript
161
star
5

pronunciation-corrector

拯救你的英语发音,告别因发音错误带来的尴尬!
JavaScript
120
star
6

blog

基于 Node.js 的个人博客系统. Node.js based blog system.
JavaScript
46
star
7

go-public

基于 Go 的端口转发工具,开箱即用. Yet another port forward tool, but easy to use.
Go
29
star
8

battle-city

基于 TypeScript 的《坦克大战》的非标准实现. Yet another Battle City implementation with TypeScript.
TypeScript
23
star
9

microblog

基于 Go 的个人微博客,一个供你闲言碎语的地方. Go based microblog system.
Go
21
star
10

wechat-server

微信公众号的后端,为其他系统提供微信登录验证功能
Go
19
star
11

pytorch-deployment

A template for rapid deployment of PyTorch models.
Python
18
star
12

zhihu-archiver

每日自动抓取知乎热榜,之后转换成 Markdown 文件并构造静态网站
Python
18
star
13

v2ex-clone

V2EX 风格的论坛程序. V2EX's Node.js clone.
JavaScript
16
star
14

L2M-GAN

Unofficial PyTorch implementation of "L2M-GAN: Learning To Manipulate Latent Space Semantics for Facial Attribute Editing".
Python
16
star
15

chat-room

基于 Node.js 开发的聊天室应用. Chat room powered by Node.js.
JavaScript
15
star
16

personal-assistant

让生活简单一点的个人助理应用. A personal assistant app that makes your life easier.
Python
14
star
17

lan-share

基于 Node.js 的文件分享工具. File sharing tool based on Node.js.
HTML
14
star
18

online-code-editor

基于 Node.js & Express.js 的在线代码编辑器. Online code editor based on Node.js.
JavaScript
11
star
19

js-interpreter

一个简陋的 JavaScript 解释器实现. A simple JavaScript interpreter, build for beginners.
C++
11
star
20

related-repos

Find related repository by stars.
JavaScript
10
star
21

gofile-launcher

为 Go File 制作的启动器. Launcher for Go File.
Python
10
star
22

report-generator

用于生成华南理工大学计算机专业校内实习日志,Release 里有打包好的二进制文件,开箱即用!
Python
10
star
23

cv-interview

计算机视觉算法岗面试准备:常考算法的实现
Python
9
star
24

go-text

基于 Go 的终端风格在线聊天工具,仅单可执行文件,开箱即用. Go based terminal-style chat room.
Go
9
star
25

webhook

Execute predefined commands on your server when receiving a specific HTTP GET request.
Go
9
star
26

hexo-theme-lightx

Hexo theme lightx.
HTML
9
star
27

gin-template

用于 Gin & React 项目的模板. Template for Gin & React projects.
JavaScript
9
star
28

songquanpeng

Automatically update your GitHub profile with GitHub Actions.
Python
6
star
29

text-formatter

功能丰富的在线文本清理工具,可用于 PDF、PPT、CAJ 等文字复制格式化,去除多余的空格与换行
HTML
6
star
30

chip8-emulator

Yet another online Chip-8 emulator.
JavaScript
5
star
31

daily-submit

华南理工大学每日自动报平安,自动健康填报
Python
4
star
32

pyqt-template

我的 PyQt 项目模板. My PyQt template.
Python
4
star
33

font-sr

基于 GAN 的字体图片超分辨. Super resoluation for font images based on GANs.
Python
3
star
34

web-reminder

帮你控制摸鱼时间的小工具~
JavaScript
3
star
35

chat-room-android

An android chat room application.
Java
3
star
36

BlendGAN

[WIP] Unofficial PyTorch implementation of "BlendGAN: Implicitly GAN Blending for Arbitrary Stylized Face Generation".
Python
2
star
37

handwriting-generator

手写中文文章生成,可用于生成各种需要手写的文件
Python
2
star
38

terminal-emulator

An online terminal emulator.
JavaScript
2
star
39

filesystem-emulator

Linux filesystem emulator.
C++
2
star
40

openai-mocker

一个模拟 OpenAI API 的 mock server,用以 One API 的压测
Go
2
star
41

rest-reminder

A reminder that will notify you when you need a rest.
C++
2
star
42

go-relay

基于 Go 的 HTTP 中继工具,为你的服务器请求 OpenAI 的 API 提供中继服务,也可用于搭建镜像站,开箱即用. Golang based HTTP relay server.
Go
2
star
43

blog-theme-v2ex

Theme for the following blog system: https://github.com/songquanpeng/blog
EJS
2
star
44

scut-wiki

华南理工大学非官方 Wiki
2
star
45

scripts

在终端执行的脚本,浏览器脚本所在的仓库:https://github.com/songquanpeng/userscripts
Python
1
star
46

ViTGAN

[WIP] Unofficial PyTorch implementation for "ViTGAN: Training GANs with Vision Transformers".
Python
1
star
47

XploreGAN

Unofficial PyTorch Implementation for "Exploring Unlabeled Faces for Novel Attribute Discovery"
Python
1
star
48

mail-query

Quick eml file query.
Python
1
star
49

command-faker

An executable file generator that used to fake other programs.
C
1
star
50

hero-calculator

王者荣耀英雄属性计算器
Java
1
star
51

socks5

Yep, another Socks5 proxy server implementation.
Go
1
star
52

bulma-template

Template for Bulma.
HTML
1
star
53

md2html

A markdown parser without regex used.
Go
1
star
54

snippet-manager

[WIP] Your self-deployed online code snippet manager.
JavaScript
1
star
55

pdf2excel

将 PDF 文件转化为 Excel 表格. Convert your PDF files to Excel files.
Python
1
star
56

gofile-cli

[WIP] CLI for Go File.
Go
1
star
57

minecraft-2d

A 2D game based on Qt.
C++
1
star
58

crack-captcha

Crack captcha of http://dyxt.jw.scut.edu.cn/
Python
1
star
59

pytorch-classifiers

PyTorch implementation of classic classifiers networks.
Python
1
star