OpenCode Go 额度查询与反向代理部署教程
本文基于两个开源项目,解决 OpenCode Go 日常使用中的两个需求:用 opencode-go-dashboard 搭建多账号额度看板(Cloudflare 全栈),用 AxonHub 统一反向代理 OpenCode Go API。
背景
OpenCode Go 是一个 AI 编程平台,提供对多种大模型的 API 访问。在日常使用中常常需要:
- 查询额度:跟踪 Rolling / Weekly / Monthly 用量,避免超出限制
- 反向代理:统一管理 API 端点、密钥和模型路由,方便与各类 AI 客户端(Claude Code、Cline 等)集成
本文基于两个开源项目实现上述需求:
- opencode-go-dashboard — Cloudflare 全栈额度查询面板
- AxonHub — All-in-one AI 网关,用于反代 OpenCode Go
一、部署额度查询面板
项目简介
opencode-go-dashboard 是一个基于 Cloudflare Workers + D1 + React 的自部署面板,功能包括:
- 多账号额度集中展示(Rolling / Weekly / Monthly 百分比用量)
- 用量接近上限时高亮预警
- 一键刷新单账号或全部账号
- 查看历史使用记录(按模型、提供方、Token 数量)
- Auth Cookie 仅存储在服务端 D1,不返回浏览器
前置条件
| 环境 | 要求 |
|---|---|
| Node.js | 20+ |
| Cloudflare 账号 | 注册 dash.cloudflare.com |
| Wrangler CLI | v4+(npm install -g wrangler) |
步骤 1:克隆与安装
git clone https://github.com/Ruinique/opencode-go-dashboard.git
cd opencode-go-dashboard
npm install
步骤 2:创建 D1 数据库
登录 Cloudflare 并创建 D1 数据库:
npx wrangler login
npx wrangler d1 create opencode-go-dashboard
命令会输出如下内容:
✅ Created database 'opencode-go-dashboard' at <region>
database_id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
将输出的 database_id 填入 wrangler.jsonc:
{
"d1_databases": [
{
"binding": "DB",
"database_name": "opencode-go-dashboard",
"database_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" // 替换这里的占位符
}
]
}
步骤 3:配置管理密码
本地开发环境:
cp .dev.vars.example .dev.vars
编辑 .dev.vars:
ADMIN_PASSWORD=你的强密码
生产环境部署前还需设置 Secrets:
npx wrangler secret put ADMIN_PASSWORD
# 输入你的强密码
步骤 4:数据库迁移
# 本地预览前
npm run db:migrate:local
# 生产部署前
npm run db:migrate:remote
步骤 5:本地预览(可选)
npm run preview
默认在 http://localhost:8787 启动,同时运行 Worker API 和前端。
仅开发前端 UI(不经过 Worker):
npm run dev
步骤 6:部署到 Cloudflare
npm run deploy
部署成功后,Wrangler 会输出类似 https://opencode-go-dashboard.<your-subdomain>.workers.dev 的地址。
绑定自定义域名(可选)
在 wrangler.jsonc 中取消注释 routes 配置:
"routes": [
{
"pattern": "dashboard.your-domain.com",
"custom_domain": true
}
]
域名需已在 Cloudflare 账号中,然后重新执行 npm run deploy。
使用说明
登录:打开部署后的地址,输入设置的管理密码
添加账号:点击「添加账号」,填写:
- 显示名称:便于识别的别名
- Workspace ID:格式为
wrk_xxx,可在 OpenCode 工作区 URL 中找到 - Auth Cookie:从浏览器开发者工具中复制
authCookie 值
如何获取 Auth Cookie:
- 在浏览器中登录 opencode.ai
- 按 F12 打开开发者工具 → Application(应用程序)→ Cookies
- 找到
authCookie,复制其值(以Fe26.开头)
刷新额度:点击「刷新」更新单个账号,或「全部刷新」更新所有账号
查看历史:点击账号可查看详细的历史用量记录(按模型、提供方分类)
编辑/删除:Cookie 过期后,编辑对应账号并粘贴新的 Cookie
面板展示内容
面板会展示每个账号的以下信息:
| 指标 | 含义 |
|---|---|
| Rolling Usage | 滚动周期内的用量百分比 |
| Weekly Usage | 本周用量百分比 |
| Monthly Usage | 本月用量百分比 |
| Plan | 当前订阅计划 |
| 颜色预警 | 用量 ≥80% 黄色、≥95% 红色高亮 |
二、反代 OpenCode Go(AxonHub)
为什么需要反向代理
- 统一 API 端点:多个 AI 客户端只需配一个 AxonHub 地址
- 模型路由:可通过模型映射切换不同上游模型
- 密钥管理:在 AxonHub 中集中管理,客户端无需持有上游密钥
- 负载均衡:自动故障转移和密钥轮换
- 成本追踪:每次请求的 Token 消耗和费用明细
AxonHub 简介
AxonHub 是 All-in-one AI 网关,支持用 OpenAI SDK 调用 Anthropic、Gemini 等模型,也支持自定义 OpenAI 兼容的提供商。
核心特性:
| 特性 | 说明 |
|---|---|
| Any SDK → Any Model | 同一个 SDK 调用任意模型 |
| 请求追踪 | 完整的请求链路可观测性 |
| 智能负载均衡 | <100ms 自动故障转移 |
| 成本追踪 | 每次请求费用明细 |
| 模型映射 | 灵活的重命名和路由规则 |
快速本地部署
# 下载并解压(macOS ARM64 示例)
curl -sSL https://github.com/looplj/axonhub/releases/latest/download/axonhub_darwin_arm64.tar.gz | tar xz
cd axonhub_*
# 直接运行(默认 SQLite)
./axonhub
访问 http://localhost:8090,首次运行按引导初始化系统(创建管理员账号)。
其他系统架构的下载链接请查看 GitHub Releases。
Docker 部署
git clone https://github.com/looplj/axonhub.git
cd axonhub
# 使用 PostgreSQL 或其他支持的数据库
export AXONHUB_DB_DIALECT="sqlite"
docker-compose up -d
配置 OpenCode Go 通道
方案 A:直接添加为 OpenAI 兼容通道
OpenCode Go 提供 OpenAI 兼容的 API,因此可以作为 OpenAI 类型通道添加。
- 登录 AxonHub 后台 → 通道管理 → 新建通道
- 填写以下信息:
| 字段 | 值 |
|---|---|
| 名称 | OpenCode Go |
| 类型 | openai |
| Base URL | https://api.opencode.ai/v1 |
| API Key | 你的 OpenCode Go API Key |
| 支持的模型 | 根据你的订阅计划填写(如 claude-sonnet-4、gpt-4o 等) |
- 点击测试连接验证配置
- 通过后启用通道
方案 B:通过模型关联实现智能路由
如果你想同时使用多个提供商(如同时使用 OpenCode Go 和直连 OpenAI),可以设置模型关联:
- 在 AxonHub 中创建 OpenCode Go 和 OpenAI 两个通道
- 进入模型管理 → 模型关联
- 将同一模型(如
claude-sonnet-4)关联到 OpenCode Go 通道(高优先级)和 OpenAI 通道(低优先级) - AxonHub 会优先走 OpenCode Go,失败时自动回退到 OpenAI
方案 C:通过模型映射适配客户端
许多客户端使用固定的模型名(如 claude-3-5-sonnet),而 OpenCode Go 上名称可能不同。在通道的模型映射中配置:
| 客户端请求的模型 | 实际发送到上游的模型 |
|---|---|
claude-3-5-sonnet | claude-sonnet-4-20250514 |
gpt-4o | gpt-5.4 |
deepseek-chat | deepseek-v3 |
使用 AxonHub 调用 OpenCode Go
配置完成后,所有客户端只需指向 AxonHub 的地址 http://localhost:8090/v1,即可透明地调用 OpenCode Go 上的模型。
Python 示例(OpenAI SDK):
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8090/v1", # AxonHub 地址
api_key="your-axonhub-api-key" # AxonHub API Key
)
# 调用模型(AxonHub 自动路由到 OpenCode Go)
response = client.chat.completions.create(
model="claude-sonnet-4",
messages=[{"role": "user", "content": "Hello!"}]
)
print(response.choices[0].message.content)
Claude Code 配置:
# 设置环境变量,让 Claude Code 走 AxonHub 代理
export ANTHROPIC_BASE_URL="http://localhost:8090/v1"
export ANTHROPIC_API_KEY="your-axonhub-api-key"
或者创建 ~/.claude/config.json:
{
"proxy": {
"baseUrl": "http://localhost:8090/v1",
"apiKey": "your-axonhub-api-key"
}
}
Cline / Continue 等 VSCode 插件配置:
在插件的 API 配置中填写:
Provider: OpenAI Compatible
Base URL: http://localhost:8090/v1
API Key: your-axonhub-api-key
三、进阶配置
AxonHub 服务器部署
生产环境建议使用 PostgreSQL 或 TiDB:
# config.yml
server:
port: 8090
debug: false
db:
dialect: "postgresql"
dsn: "postgres://user:pass@host:5432/axonhub"
log:
level: "info"
多 API Key 负载均衡
在 AxonHub 通道中配置多个 OpenCode Go API Key,系统自动轮换:
sk-opencode-key-1
sk-opencode-key-2
sk-opencode-key-3
- 同一个 Trace ID 始终使用相同的 Key(会话一致性)
- 不同请求随机选择 Key
- 单个 Key 失败自动切换到下一个
使用 AxonHub 的请求追踪
在请求中透传追踪 ID,可在 AxonHub 后台查看完整的请求链路:
curl http://localhost:8090/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-axonhub-api-key" \
-H "AH-Trace-Id: my-trace-id" \
-d '{
"model": "claude-sonnet-4",
"messages": [{"role": "user", "content": "Hello"}]
}'
四、整合架构
┌─────────────────────────┐
│ opencode-go-dashboard │
│ (Cloudflare Workers) │
│ │
│ 多个 OpenCode Go 账号 │
│ 额度集中展示 │
└──────────┬──────────────┘
│ 通过 Auth Cookie 查询
▼
┌──────────────┐ ┌──────────────────┐ ┌──────────────┐
│ AI 客户端 │───▶│ AxonHub │───▶│ OpenCode Go │
│ (Claude Code │ │ (AI 网关) │ │ (API 提供商) │
│ Cline │ │ 本地或服务器部署 │ │ │
│ OpenRouter │ │ 统一端点/模型路由 │ │ 多模型访问 │
│ 等) │ │ 负载均衡/日志 │ │ │
└──────────────┘ └──────────────────┘ └──────────────┘
- 额度看板:通过 opencode-go-dashboard 随时查看剩余额度
- API 代理:通过 AxonHub 统一管理所有客户端的 API 调用
- 两者独立:额度查询和 API 代理互不依赖,可单独部署
常见问题
Q1:Auth Cookie 过期了怎么办?
Cookie 有效期取决于 OpenCode 的登录会话时长。过期后编辑对应账号,粘贴新的 Cookie 即可,无需重新部署。
Q2:Opencode-go-dashboard 显示「无法解析额度数据」
OpenCode 的页面结构可能变更,更新项目到最新版本,或者提 GitHub Issue。
Q3:AxonHub 连接测试失败
- 确认 API Key 没有多余空格
- 确认 Base URL 可以访问(
https://api.opencode.ai/v1) - 检查 OpenCode Go 账号是否有足够的余额
Q4:客户端报 “Model not found”
- 确认通道的「支持的模型」列表中已添加该模型
- 检查模型映射配置是否正确
- 确认通道已启用
验证与自查
- 额度看板:
npm run deploy后访问面板地址,输入管理密码能登录并看到账号额度 - AxonHub:
curl http://localhost:8090/health返回健康状态 - 通道连通性:在 AxonHub 后台点击「测试连接」,返回成功且显示延迟
- 端到端:用
curl http://localhost:8090/v1/chat/completions发一次请求,能收到模型返回的 JSON