One API Logo

One API

✨ 通过标准的 OpenAI 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
                
            

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

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

如果启动失败,请添加 --privileged=true,具体参考 此处

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

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

基于 Docker Compose 进行部署

                
docker-compose up -d
                
            

仅启动方式不同,参数设置不变,请参考基于 Docker 部署部分。

手动部署

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

使用方法

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

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

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

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

                
OPENAI_API_KEY="sk-xxxxxx"
OPENAI_API_BASE="https://:/v1"
                
            

常见问题

  1. 额度是什么?怎么计算的?One API 的额度计算有问题?
  2. 额度 = 分组倍率 * 模型倍率 * (提示 token 数 + 补全 token 数 * 补全倍率)

    其中补全倍率对于 GPT3.5 固定为 1.33,GPT4 为 2,与官方保持一致。

    如果是非流模式,官方接口会返回消耗的总 token,但是你要注意提示和补全的消耗倍率不一样。

    注意,One API 的默认倍率就是官方倍率,是已经调整过的。

  3. 账户额度足够为什么提示额度不足?
  4. 请检查你的令牌额度是否足够,这个和账户额度是分开的。

    令牌额度仅供用户设置最大使用量,用户可自由设置。

  5. 提示无可用渠道?
  6. 请检查的用户分组和渠道分组设置。

    以及渠道的模型设置。

  7. 渠道测试报错:invalid character '<' looking for beginning of value
  8. 这是因为返回值不是合法的 JSON,而是一个 HTML 页面。

    大概率是你的部署站的 IP 或代理的节点被 CloudFlare 封禁了。

  9. ChatGPT Next Web 报错:Failed to fetch
  10. 部署的时候不要设置 BASE_URL。

    检查你的接口地址和 API Key 有没有填对。

    检查是否启用了 HTTPS,浏览器会拦截 HTTPS 域名下的 HTTP 请求。

  11. 报错:当前分组负载已饱和,请稍后再试
  12. 上游渠道 429 了。

  13. 升级之后我的数据会丢失吗?
  14. 如果使用 MySQL,不会。

    如果使用 SQLite,需要按照我所给的部署命令挂载 volume 持久化 one-api.db 数据库文件,否则容器重启后数据会丢失。

  15. 升级之前数据库需要做变更吗?
  16. 一般情况下不需要,系统将在初始化的时候自动调整。

    如果需要的话,我会在更新日志中说明,并给出脚本。

  17. 手动修改数据库后报错:数据库一致性已被破坏,请联系管理员?
  18. 这是检测到 ability 表里有些记录的渠道 id 是不存在的,这大概率是因为你删了 channel 表里的记录但是没有同步在 ability 表里清理无效的渠道。

    对于每一个渠道,其所支持的模型都需要有一个专门的 ability 表的记录,表示该渠道支持该模型。