2han9wen71an dfabf0f9dd fix(openai): recover quota after same-window usage drops (#95)
OpenAI 周窗口的 used_percent 可以在同一窗口内回落(滚动计量),而
reset_at 固定到窗口边界才变化。恢复规则要求「reset 前进 + 用量低于
10%」,两个条件在滑动周窗口上都无法成立:耗尽账号被钉在旧 reset
日期(最长一周)无法参与调度,尽管 /usage 已显式报告 allowed=true /
limit_reached=false 且 5h 窗口全新。

新增第二条解除路径:同一窗口(reset 未滚动)内连续两次观测都未触顶
即解除。候选记录持久化在 _quota_recovery,跨 worker 周期与重启累积;
连续两次的要求保持对「耗尽后立刻拉到的旧快照」竞态的防护(单次旧
快照撑不过两次观测)。原有「reset 前进 + 用量<10%」快路径不变。
2026-09-15 15:38:46 +08:00

Codex Proxy RS

Codex Proxy RS

面向 Codex 的自托管多账号 AI 网关

CI Release GHCR License: Apache 2.0

快速开始 · 客户端接入 · 文档 · 社区 · 许可证

Note

本项目提供 Responses API,不支持 /v1/chat/completions。接入前请确认客户端支持 Responses 协议。

快速开始

使用 Docker Compose 部署版本固定的发布镜像,同时启动 PostgreSQL 和 Redis。 以下命令适用于 Linux amd64/arm64,需要 Docker Engine、Docker Compose Plugin、curl 和 OpenSSL。已有部署请先看 升级说明,不要覆盖原配置。

1. 下载部署文件并配置

mkdir -p codex-proxy-rs/deploy && cd codex-proxy-rs

# 只解析一次最新正式版本,确保两个文件来自同一 Release。
CPR_RELEASE_URL="$(curl -fsSL -o /dev/null -w '%{url_effective}' https://github.com/zyycn/codex-proxy-rs/releases/latest)"
CPR_RELEASE_TAG="${CPR_RELEASE_URL##*/}"
curl -fsSL "https://github.com/zyycn/codex-proxy-rs/releases/download/${CPR_RELEASE_TAG}/compose.yaml" \
  -o deploy/compose.yaml
curl -fsSL "https://github.com/zyycn/codex-proxy-rs/releases/download/${CPR_RELEASE_TAG}/config.example.yaml" \
  -o deploy/config.example.yaml

install -d -m 0750 .runtime/postgres .runtime/redis
sudo install -d -m 0770 -o "$(id -u)" -g 10001 .runtime/data .runtime/logs
sudo install -m 0640 -o "$(id -u)" -g 10001 deploy/config.example.yaml deploy/config.yaml

也可将 CPR_RELEASE_TAG 设置为指定的发布标签。Release 附带的 compose.yaml 默认使用该版本镜像, 配置模板和部署文件均包含在 checksums.txt 中;不要混用 main 分支模板与已发布镜像。

分别生成数据库和 Redis 密码:

openssl rand -hex 24
openssl rand -hex 24

编辑 deploy/config.yaml,填好以下三项:

配置项 填写内容
store.database.password 第一个生成的 48 位十六进制密码
store.redis.password 第二个生成的 48 位十六进制密码
admin.default_password 管理员初始密码,至少 12 位,不能包含 $

2. 启动服务

docker compose -f deploy/compose.yaml config --quiet
docker compose -f deploy/compose.yaml pull
docker compose -f deploy/compose.yaml up -d --no-build --wait
curl -i http://127.0.0.1:8080/healthz

健康检查返回 204 No Content 后,打开 http://127.0.0.1:8080, 使用 admin@cpr.local 和刚设置的管理员密码登录。

默认地址只能在服务器本机访问。从其他设备使用时,需要配置 HTTPS 反向代理。

3. 添加账号与客户端密钥

  1. 在「账号」中添加账号,完成授权或导入。
  2. 按需建立账号分组,再创建客户端密钥并选择可用分组。不选分组表示可使用全部账号。
  3. 打开密钥的「使用密钥」,复制客户端配置。

客户端接入

Codex CLI / 桌面端:在「使用密钥」中按操作系统复制配置,或通过 CCSwitch 导入。 合并到客户端配置后重启 Codex。完整步骤、生图配置与排障见客户端配置。

其他 Responses API 客户端:填写以下信息。

配置 值
Base URL http://127.0.0.1:8080/v1;远程接入使用服务器的 HTTPS 地址
API Key 管理端创建的客户端密钥

可用模型以该密钥查询到的模型列表为准:

curl http://127.0.0.1:8080/v1/models \
  -H 'Authorization: Bearer <client-api-key>'

文档

社区

感谢 LINUX DO 社区提供开放、友善的技术交流平台。

许可证

本项目基于 Apache License 2.0 开源。

S
Description
基于 Rust 的低风控、高性能、自托管多账号透明代理网关
Readme Apache-2.0
45 MiB
Languages
Rust 90%
Vue 5.7%
TypeScript 3.7%
PLpgSQL 0.4%
Ruby 0.1%