1179 字
6 分钟
opgo:把 Coding Plan 套餐共享给多人的轻量网关

opgo:把 Coding Plan 套餐共享给多人的轻量网关#

这是本站的第一篇文章,介绍一下我最近写的一个小项目:kemi-20/opgo

kemi-20
/
opgo
Waiting for api.github.com...
00K
0K
0K
Waiting...

它是什么#

opgo 是一个用 Go 编写的轻量共享网关:把一份 Coding Plan 套餐共享给多人使用。成员请求被透明转发到上游,网关按模型单价与真实 token 用量计费(内部 8 位小数精度),额度按 5 小时 / 一周 / 31 天 三个滚动窗口限制,并附带一个 Web 用量查询页。

简单说,就是一家人 / 一个小团队合买一份套餐,opgo 负责:转发、计费、限流、记账、查账。

核心功能#

  • 透明反代:只替换认证头,请求体原样转发,兼容 OpenAI / Anthropic 协议
  • 按 token 精确计费:模型单价写在 config.jsonc(已预置 deepseek-v4-flash、deepseek-v4-pro、mimo-v2.5、gpt-5.6-luna、hy3 定价)
  • 每人独立额度:每个用户(uuid)拥有 5 小时 / 一周 / 31 天滚动窗口,多 key 共享额度
  • 峰谷时计费:模型级 peak 配置,Peak 时段(UTC 01:00-04:00 与 06:00-10:00)自动按倍率加倍扣款,配置里只需填谷时价
  • 总池保护:以上游实时余量接口为准,套餐额度用尽即返回 429
  • 流式请求照常计费:自动注入 include_usage,流式响应也能拿到真实用量
  • SQLite 记录全部用量,Web 查询页普通用户查自己、管理员看全部
  • 密钥防泄露:任何接口和前端都不返回任何 key,内置 opgo -audit 自检
  • 单文件静态二进制,Windows / Linux 均可直接运行

安装教程#

Ubuntu / Debian(amd64)一键安装#

Terminal window
curl -fsSL https://raw.githubusercontent.com/kemi-20/opgo/main/install.sh | sudo bash

首次启动会自动生成 /opt/opgo/config.jsonc(示例配置),编辑后重启服务:

Terminal window
sudo systemctl restart opgo

Windows 本地运行#

先安装 Go(1.23.12 或更高),然后在项目目录下构建并运行:

Terminal window
go build -o opgo.exe .
.\opgo.exe

首次运行会在当前目录自动生成 config.jsonc,修改后重启即可。

配置文件说明#

配置文件名为 config.jsonc(JSONC = JSON with Comments),程序会自动剥离注释再解析,所以行内 // 注释可以放心写;VSCode 打开时把语言模式选为 JSONC 即可消除红色波浪线。也兼容旧版 config.json:两者同时存在时优先读 .jsonc

核心字段:

字段说明
listen监听地址,默认 :3003
upstream_base上游地址(必填)
master_key母 key(必填)
admin_passwordWeb 管理员密码(必填)
balance_url余量接口,留空用默认值
balance_interval_seconds余量同步间隔,默认 120
rate_limit_per_minute每用户每分钟限流,0 = 不限
limits_per_user每人的 5h / 1w / 1m 美元限额
pricing模型单价(每百万 token)+ context_length + max_output_tokens + modality + transformation + tag
usersuuid + 备注(可空)+ key 列表

一个最小示例:

{
"listen": ":3003",
"upstream_base": "https://api.example.com",
"master_key": "你的母key",
"admin_password": "管理员密码",
"limits_per_user": {
"5h": 1.0,
"1w": 10.0,
"1m": 30.0
},
"pricing": {
"deepseek-v4-flash": {
"input_per_million": 0.44,
"output_per_million": 1.32,
"cached_read_per_million": 0.014,
"cached_write_per_million": 0,
"context_length": 1000000,
"max_output_tokens": 384000
}
},
"users": [
{
"uuid": "user-1",
"remark": "张三",
"keys": ["用户key-1"]
}
]
}

配置支持热更新:程序后台每 1 秒轮询配置文件,修改保存后无需重启立即生效(仅 listen 变更需要重启)。配置文件非法时自动保留旧配置并在日志中告警,不影响运行。

客户端接入#

客户端把 baseURL 指向 http://<主机IP>:3003/v1 即可:

  • OpenAI SDK / openai-compatiblebaseURL: http://IP:3003/v1,自动请求 /v1/chat/completions/v1/responses
  • Anthropic SDKbaseURL: http://IP:3003/v1,自动请求 /v1/messages(x-api-key 填你的用户 key)
  • 模型列表GET http://IP:3003/v1/models
  • 套餐余量(与上游官方格式一致):GET http://IP:3003/v1/usage(Authorization: Bearer 你的用户 key)

代理会自动剥离 /v1 前缀并转发到上游对应端点;/v1/models/v1/usage 由本地提供,不经过上游。

Web 用量查询#

浏览器打开 http://主机:3003/

  • 用户页签:输入自己的 key,查看三个窗口已用 / 限额 / 百分比与总池实时余量
  • 管理员页签:输入密码,查看全部用户(uuid / 备注 / 用量)与总池

密钥自检与数据查询#

Terminal window
opgo -audit -config /opt/opgo/config.jsonc

全部 PASS 退出码为 0;任何响应中出现 key 都会 FAIL。用量数据存在 SQLite 里,可直接查询:

Terminal window
sqlite3 /opt/opgo/usage.db "select uuid, model, total_tokens, cost_units, datetime(created_at_epoch_ms/1000,'unixepoch') from usage order by id desc limit 20;"

注意事项#

WARNING

共享订阅可能违反上游服务条款,请自行确认合规性。

  • 管理员密码走明文 HTTP,公网使用请在前置 Nginx / Caddy 上加 HTTPS
  • 同一窗口内并发请求可能把消费略推过限额(最多一个请求的量)
  • 发布版本只需打 tag:git tag v0.1.0 && git push origin v0.1.0,CI 会自动构建并发布 Release(opgo-linux-amd64 / opgo-windows-amd64.exe)

项目目前还很年轻,欢迎提 issue 和 PR。后续我也会在这里记录更多使用心得和踩坑经验。

opgo:把 Coding Plan 套餐共享给多人的轻量网关
https://www.33163316.xyz/posts/opgo-intro/
作者
玉米糊
发布于
2026-08-20
许可协议
CC BY-NC-SA 4.0