Giter Club home page Giter Club logo

songquanpeng / one-api Goto Github PK

View Code? Open in Web Editor NEW
13.6K 78.0 3.2K 3.2 MB

OpenAI 接口管理 & 分发系统,支持 Azure、Anthropic Claude、Google PaLM 2 & Gemini、智谱 ChatGLM、百度文心一言、讯飞星火认知、阿里通义千问、360 智脑以及腾讯混元,可用于二次分发管理 key,仅单可执行文件,已打包好 Docker 镜像,一键部署,开箱即用. OpenAI key management & redistribution system, using a single API for all LLMs, and features an English UI.

Home Page: https://openai.justsong.cn/

License: MIT License

Dockerfile 0.07% Go 33.29% HTML 0.13% JavaScript 65.59% CSS 0.19% Shell 0.10% Python 0.14% SCSS 0.50%
openai-api proxy chatgpt gpt openai api api-gateway azure-openai-api claude ernie-bot

one-api's Introduction

中文 | English | 日本語

one-api logo

One API

✨ 通过标准的 OpenAI API 格式访问所有的大模型,开箱即用 ✨

license release docker pull release GoReportCard

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

Note

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

根据《生成式人工智能服务管理暂行办法》的要求,请勿对**地区公众提供一切未经备案的生成式人工智能服务。

Warning

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

Warning

使用 root 用户初次登录系统后,务必修改默认密码 123456

功能

  1. 支持多种大模型:
  2. 支持配置镜像以及众多第三方代理服务
  3. 支持通过负载均衡的方式访问多个渠道。
  4. 支持 stream 模式,可以通过流式传输实现打字机效果。
  5. 支持多机部署详见此处
  6. 支持令牌管理,设置令牌的过期时间、额度、允许的 IP 范围以及允许的模型访问。
  7. 支持兑换码管理,支持批量生成和导出兑换码,可使用兑换码为账户进行充值。
  8. 支持渠道管理,批量创建渠道。
  9. 支持用户分组以及渠道分组,支持为不同分组设置不同的倍率。
  10. 支持渠道设置模型列表
  11. 支持查看额度明细
  12. 支持用户邀请奖励
  13. 支持以美元为单位显示额度。
  14. 支持发布公告,设置充值链接,设置新用户初始额度。
  15. 支持模型映射,重定向用户的请求模型,如无必要请不要设置,设置之后会导致请求体被重新构造而非直接透传,会导致部分还未正式支持的字段无法传递成功。
  16. 支持失败自动重试。
  17. 支持绘图接口。
  18. 支持 Cloudflare AI Gateway,渠道设置的代理部分填写 https://gateway.ai.cloudflare.com/v1/ACCOUNT_TAG/GATEWAY/openai 即可。
  19. 支持丰富的自定义设置,
    1. 支持自定义系统名称,logo 以及页脚。
    2. 支持自定义首页和关于页面,可以选择使用 HTML & Markdown 代码进行自定义,或者使用一个单独的网页通过 iframe 嵌入。
  20. 支持通过系统访问令牌调用管理 API,进而在无需二开的情况下扩展和自定义 One API 的功能,详情请参考此处 API 文档。。
  21. 支持 Cloudflare Turnstile 用户校验。
  22. 支持用户管理,支持多种用户登录注册方式
    • 邮箱登录注册(支持注册邮箱白名单)以及通过邮箱进行密码重置。
    • 支持使用飞书进行授权登录。
    • GitHub 开放授权
    • 微信公众号授权(需要额外部署 WeChat Server)。
  23. 支持主题切换,设置环境变量 THEME 即可,默认为 default,欢迎 PR 更多主题,具体参考此处
  24. 配合 Message Pusher 可将报警信息推送到多种 App 上。

部署

基于 Docker 进行部署

# 使用 SQLite 的部署命令:
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
# 使用 MySQL 的部署命令,在上面的基础上添加 `-e SQL_DSN="root:123456@tcp(localhost:3306)/oneapi"`,请自行修改数据库连接参数,不清楚如何修改请参见下面环境变量一节。
# 例如:
docker run --name one-api -d --restart always -p 3000:3000 -e SQL_DSN="root:123456@tcp(localhost:3306)/oneapi" -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,具体参考 #482

如果上面的镜像无法拉取,可以尝试使用 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

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

基于 Docker Compose 进行部署

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

# 目前支持 MySQL 启动,数据存储在 ./data/mysql 文件夹内
docker-compose up -d

# 查看部署状态
docker-compose ps

手动部署

  1. GitHub Releases 下载可执行文件或者从源码编译:
    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
  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

注意修改端口号,之后在页面上设置接口地址(例如:https://openai.justsong.cn/ )和 API Key 即可。

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

QChatGPT - QQ机器人

项目主页:https://github.com/RockChinQ/QChatGPT

根据文档完成部署后,在config.py设置配置项openai_configreverse_proxy为 One API 后端地址,设置api_key为 One API 生成的key,并在配置项completion_api_paramsmodel参数设置为 One API 支持的模型名称。

可安装 Switcher 插件在运行时切换所使用的模型。

部署到第三方平台

部署到 Sealos

Sealos 的服务器在国外,不需要额外处理网络问题,支持高并发 & 动态伸缩。

点击以下按钮一键部署(部署后访问出现 404 请等待 3~5 分钟):

Deploy-on-Sealos.svg

部署到 Zeabur

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

Deploy on 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。
部署到 Render

Render 提供免费额度,绑卡后可以进一步提升额度

Render 可以直接部署 docker 镜像,不需要 fork 仓库:https://dashboard.render.com

配置

系统本身开箱即用。

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

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

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

使用方法

渠道页面中添加你的 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" 
graph LR
    A(用户)
    A --->|使用 One API 分发的 key 进行请求| B(One API)
    B -->|中继请求| C(OpenAI)
    B -->|中继请求| D(Azure)
    B -->|中继请求| E(其他 OpenAI API 格式下游渠道)
    B -->|中继并修改请求体和返回体| F(非 OpenAI API 格式下游渠道)

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

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

环境变量

  1. REDIS_CONN_STRING:设置之后将使用 Redis 作为缓存使用。
    • 例子:REDIS_CONN_STRING=redis://default:redispw@localhost:49153
    • 如果数据库访问延迟很低,没有必要启用 Redis,启用后反而会出现数据滞后的问题。
  2. SESSION_SECRET:设置之后将使用固定的会话密钥,这样系统重新启动后已登录用户的 cookie 将依旧有效。
    • 例子:SESSION_SECRET=random_string
  3. SQL_DSN:设置之后将使用指定数据库而非 SQLite,请使用 MySQL 或 PostgreSQL。
    • 例子:
      • MySQL:SQL_DSN=root:123456@tcp(localhost:3306)/oneapi
      • PostgreSQL:SQL_DSN=postgres://postgres:123456@localhost:5432/oneapi(适配中,欢迎反馈)
    • 注意需要提前建立数据库 oneapi,无需手动建表,程序将自动建表。
    • 如果使用本地数据库:部署命令可添加 --network="host" 以使得容器内的程序可以访问到宿主机上的 MySQL。
    • 如果使用云数据库:如果云服务器需要验证身份,需要在连接参数中添加 ?tls=skip-verify
    • 请根据你的数据库配置修改下列参数(或者保持默认值):
      • SQL_MAX_IDLE_CONNS:最大空闲连接数,默认为 100
      • SQL_MAX_OPEN_CONNS:最大打开连接数,默认为 1000
        • 如果报错 Error 1040: Too many connections,请适当减小该值。
      • SQL_CONN_MAX_LIFETIME:连接的最大生命周期,默认为 60,单位分钟。
  4. LOG_SQL_DSN:设置之后将为 logs 表使用独立的数据库,请使用 MySQL 或 PostgreSQL。
  5. FRONTEND_BASE_URL:设置之后将重定向页面请求到指定的地址,仅限从服务器设置。
    • 例子:FRONTEND_BASE_URL=https://openai.justsong.cn
  6. MEMORY_CACHE_ENABLED:启用内存缓存,会导致用户额度的更新存在一定的延迟,可选值为 truefalse,未设置则默认为 false
    • 例子:MEMORY_CACHE_ENABLED=true
  7. SYNC_FREQUENCY:在启用缓存的情况下与数据库同步配置的频率,单位为秒,默认为 600 秒。
    • 例子:SYNC_FREQUENCY=60
  8. NODE_TYPE:设置之后将指定节点类型,可选值为 masterslave,未设置则默认为 master
    • 例子:NODE_TYPE=slave
  9. CHANNEL_UPDATE_FREQUENCY:设置之后将定期更新渠道余额,单位为分钟,未设置则不进行更新。
    • 例子:CHANNEL_UPDATE_FREQUENCY=1440
  10. CHANNEL_TEST_FREQUENCY:设置之后将定期检查渠道,单位为分钟,未设置则不进行检查。
  11. 例子:CHANNEL_TEST_FREQUENCY=1440
  12. POLLING_INTERVAL:批量更新渠道余额以及测试可用性时的请求间隔,单位为秒,默认无间隔。
    • 例子:POLLING_INTERVAL=5
  13. BATCH_UPDATE_ENABLED:启用数据库批量更新聚合,会导致用户额度的更新存在一定的延迟可选值为 truefalse,未设置则默认为 false
    • 例子:BATCH_UPDATE_ENABLED=true
    • 如果你遇到了数据库连接数过多的问题,可以尝试启用该选项。
  14. BATCH_UPDATE_INTERVAL=5:批量更新聚合的时间间隔,单位为秒,默认为 5
    • 例子:BATCH_UPDATE_INTERVAL=5
  15. 请求频率限制:
    • GLOBAL_API_RATE_LIMIT:全局 API 速率限制(除中继请求外),单 ip 三分钟内的最大请求数,默认为 180
    • GLOBAL_WEB_RATE_LIMIT:全局 Web 速率限制,单 ip 三分钟内的最大请求数,默认为 60
  16. 编码器缓存设置:
    • TIKTOKEN_CACHE_DIR:默认程序启动时会联网下载一些通用的词元的编码,如:gpt-3.5-turbo,在一些网络环境不稳定,或者离线情况,可能会导致启动有问题,可以配置此目录缓存数据,可迁移到离线环境。
    • DATA_GYM_CACHE_DIR:目前该配置作用与 TIKTOKEN_CACHE_DIR 一致,但是优先级没有它高。
  17. RELAY_TIMEOUT:中继超时设置,单位为秒,默认不设置超时时间。
  18. SQLITE_BUSY_TIMEOUT:SQLite 锁等待超时设置,单位为毫秒,默认 3000
  19. GEMINI_SAFETY_SETTING:Gemini 的安全设置,默认 BLOCK_NONE
  20. GEMINI_VERSION:One API 所使用的 Gemini 版本,默认为 v1
  21. THEME:系统的主题设置,默认为 default,具体可选值参考此处
  22. ENABLE_METRIC:是否根据请求成功率禁用渠道,默认不开启,可选值为 truefalse
  23. METRIC_QUEUE_SIZE:请求成功率统计队列大小,默认为 10
  24. METRIC_SUCCESS_RATE_THRESHOLD:请求成功率阈值,默认为 0.8
  25. INITIAL_ROOT_TOKEN:如果设置了该值,则在系统首次启动时会自动创建一个值为该环境变量值的 root 用户令牌。

命令行参数

  1. --port <port_number>: 指定服务器监听的端口号,默认为 3000
    • 例子:--port 3000
  2. --log-dir <log_dir>: 指定日志文件夹,如果没有设置,默认保存至工作目录的 logs 文件夹下。
    • 例子:--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,但是你要注意提示和补全的消耗倍率不一样。
    • 注意,One API 的默认倍率就是官方倍率,是已经调整过的。
  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 有没有填对。
    • 检查是否启用了 HTTPS,浏览器会拦截 HTTPS 域名下的 HTTP 请求。
  6. 报错:当前分组负载已饱和,请稍后再试
    • 上游渠道 429 了。
  7. 升级之后我的数据会丢失吗?
    • 如果使用 MySQL,不会。
    • 如果使用 SQLite,需要按照我所给的部署命令挂载 volume 持久化 one-api.db 数据库文件,否则容器重启后数据会丢失。
  8. 升级之前数据库需要做变更吗?
    • 一般情况下不需要,系统将在初始化的时候自动调整。
    • 如果需要的话,我会在更新日志中说明,并给出脚本。
  9. 手动修改数据库后报错:数据库一致性已被破坏,请联系管理员
    • 这是检测到 ability 表里有些记录的渠道 id 是不存在的,这大概率是因为你删了 channel 表里的记录但是没有同步在 ability 表里清理无效的渠道。
    • 对于每一个渠道,其所支持的模型都需要有一个专门的 ability 表的记录,表示该渠道支持该模型。

相关项目

  • FastGPT: 基于 LLM 大语言模型的知识库问答系统
  • ChatGPT Next Web: 一键拥有你自己的跨平台 ChatGPT 应用

注意

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

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

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

one-api's People

Contributors

a497625414 avatar ai-ass avatar baksili avatar c121914yu avatar calcium-ion avatar ckt1031 avatar dependabot[bot] avatar dirname avatar glzjin avatar igophper avatar imsingee avatar jsubnew avatar laisky avatar manjieqi avatar martialbe avatar miniers avatar mrhaoji avatar mxdlzg avatar quzard avatar seven-yu avatar shinchven avatar songquanpeng avatar techotaku avatar tylinux avatar woodchen-ink avatar wqyjh avatar yangfan-sys avatar ye4293 avatar yomikio avatar yooyui avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

one-api's Issues

自定义渠道无法使用

我用域名反代了 openai 的网站 可以正常使用。
我在 one api 里面添加自定义渠道。url 写域名好像不行

次数快用完时提醒用户

场景:如果我次数即将用尽应该来个及时提醒,不然会影响用户的体验
方案:我建议加个邮件的提醒功能,比如还剩下50次的时候,给客户发个邮件提醒,或者可以接入Server酱等方式

接口调用出现错误

我手动部署了成功之后,我用post工具来调用接口会出现错误
POST:ip:3000
image

支持保存会话信息

如果做的话,至少需要两张表,一个聊天室表,一个聊天内容表。
数据库可能也要换。

令牌计算不正确

我发送了一句话 (12个中文 消耗了 网站显示 用了2k的令牌。我用 openai token 计算也才26个

优化渠道管理页面:余额监控功能 & 定时刷新

1.没有测试出渠道支持多key的功能,在一个渠道中多次添加不同key后数据库key字段信息只有一条最后添加的key(页面无展示只好去数据库查看);
2.渠道编辑页面能否设计成可以批量管理该渠道下对应的key。
image
在下方区域设计类似以下界面:
image
3.(大功能)余额监控,为避免调取key的时候该key额度已经为0,可以加入定时任务自动刷新额度。

支持不同模型设置不同的计费倍率

GPT3.5和GPT4的价格不同,但目前的计费方式是按照次数限制。这种方式可能不太合理。
可以考虑增加一个倍率方面的设置,同时也方便用户根据自己的需求进行设置。
或者分别使用不同的次数限制。

禁止超额度使用

像API2D一样禁止超限使用
提前根据请求的 max_token 判断额度是否足够

max_tokens:如果不指定,每次请求会预先冻结 模型支持的最大个数 Token,如果是 3.5 也就是 41P ,在请求完成后按 usage 字段多退少补。如果账户余额少于 41P 就会报错,此时可以指定 max_tokens,这样就会按 max_tokens 来冻结 - https://api2d.com/doc/doc

另外,考虑到 #53,GPT-4 应该按照补全(或最高的)的倍率冻结额度。

related issue #51

支持设置代理

希望选用openai官方渠道的时候可以选用代理,因为服务器可能是在境内的

在 Web 端增加一个对话页面

消费该账号对应的次数,直接在应用内使用;而令牌则专门作为其他应用调用的key,(类似官网了),这个功能不需要做得太复杂,可以做成一个简单的demo;另外有位置放置已经部署的其他应用的导航或者超链接,点击跳转后粘贴令牌进行使用。
想法有点乱,如果有这方面的考虑可以参考下。

限制普通用户对于令牌的设置能力

建议令牌生成,过期时间和剩余次数由管理员权限生成和控制,普通用户只保留查看或充值令牌的权限。openaimax等三方代理也是如此设置,感觉这样才符合权限管理。

使用 MySQL 搭建报错

[SYS] 2023/04/27 - 01:46:40 | One API v0.1.5 started
[FATAL] 2023/04/27 - 01:46:40 | [Error 1170: BLOB/TEXT column 'key' used in key specification without a key length]

2023/04/27 01:46:40 �[31;1m/build/model/main.go:61 �[35;1mError 1170: BLOB/TEXT column 'key' used in key specification without a key length
�[0m�[33m[4.126ms] �[34;1m[rows:0]�[0m CREATE TABLE tokens (id bigint AUTO_INCREMENT,user_id bigint,key longtext,status bigint DEFAULT 1,name varchar(191),created_time bigint,accessed_time bigint,expired_time bigint DEFAULT -1,remain_times bigint DEFAULT 0,unlimited_times boolean DEFAULT false,PRIMARY KEY (id),UNIQUE INDEX idx_tokens_key (key),INDEX idx_tokens_name (name))

Linux 部署报错:PE32+ executable (console) x86-64 (stripped to external PDB), for MS Windows

作为新手想用这个项目练手一下如何部署项目到linux服务器,但是我碰到了一点问题想来请教一下,就是我部署的时候运行./one-api --port 3000 --log-dir ./logs 显示 [root@VM-4-9-centos wwwroot]# ./one-api --port 3000 --log-dir ./logs
-bash: ./one-api: cannot execute binary file 然后我通过 [root@VM-4-9-centos wwwroot]# file ./one-api 发现它显示
./one-api: PE32+ executable (console) x86-64 (stripped to external PDB), for MS Windows 也就是说生成的二进制文件是只能Windows执行,请问这是什么原因?感谢感谢!

Originally posted by @Chenm4 in #11 (comment)

令牌支持次数和时长限制

目前的项目可以用来做官方接口代理,apikey负载均衡,应用授权管理。能否再给token加个次数和时长的控制,丰富加强一下授权这方面的功能。

优化令牌管理页面:令牌批量生成功能

1.弃用渠道ID与令牌拼接的方法,改用在令牌编辑页设置对应全部或者对应某个渠道,这样令牌格式都一样,渠道可以不同,避免了使用者盲拼渠道ID自行改变渠道。
2.openai_apikey有官方查询余额的接口,建议令牌也提供查询接口,返回次数、时间、有效状态等基本信息
3.令牌管理页面与渠道页面同样的没有数据列表,建议增加管理列表,实现简单检索、批量生成、用量监控等功能。类似界面:
image

允许以账号为单位设置初始次数

1.测试发现普通用户新建令牌次数为零,是否会考虑以账号为单位有初始次数,可以是10次或者20次,由管理员配置。
image
2.新普通用户令牌ID不是从1开始的,显然显示的是数据库主键ID,小问题。

使用 MySQL 8.0 报错:Error 1170: BLOB/TEXT column 'key' used in key specification without a key length

2023/05/04 02:06:08 /build/model/main.go:60 Error 1170: BLOB/TEXT column 'key' used in key specification without a key length
[0.959ms] [rows:0] CREATE TABLE tokens (id bigint AUTO_INCREMENT,user_id bigint,key longtext,status bigint DEFAULT 1,name varchar(191),created_time bigint,accessed_time bigint,expired_time bigint DEFAULT -1,remain_times bigint DEFAULT 0,unlimited_times boolean DEFAULT false,PRIMARY KEY (id),UNIQUE INDEX idx_tokens_key (key),INDEX idx_tokens_name (name))
[FATAL] 2023/05/04 - 02:06:08 | [Error 1170: BLOB/TEXT column 'key' used in key specification without a key length]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.