Skip to content

Repository files navigation

Buddy-2API-Go

License: MIT Go Version

用 Go 实现的 CodeBuddy / WorkBuddy 转 OpenAI 兼容代理网关:单账号、单二进制、内置 Web 管理面板。

项目地址:https://github.com/EchoPing07/Buddy-2API-Go

  • POST /v1/chat/completions —— OpenAI 兼容对话(流式透传 / 非流式聚合)
  • GET /v1/models —— 实时模型列表(从上游 /v3/config 动态拉取并缓存,cn / global 两套端点自动适配)
  • 内置 Web 管理后台 —— OAuth 登录、API Key 管理、官方余额、每日签到、请求日志、仪表盘等
  • 默认中国端点(copilot.tencent.com),可切换国际端点(www.codebuddy.ai

⚠️ 声明

  • 本项目仅用于学习与研究目的,请勿用于任何违法违规用途,不要干坏事。使用者需自行承担一切后果,作者不对任何滥用行为负责。
  • 本项目的代码参考了 wicm84266964/Buddy2api、Sliverkiss/CodeBuddy2api、cyl2361341082-alt/Buddy2api、ShouZhuo0413/codebuddy2api 等项目,Web 管理面板的 UI 设计参考了 grok2api(详见 致谢与参考)。
  • 本项目定位为个人单账号使用,明确不接受“号池”(多账号池 / 多凭证轮询)相关的建议与提交,相关需求请勿提 Issue 或 PR。
  • 本项目不存储对话内容,数据库仅保存元信息(模型、token 数、耗时、状态码等)。

✨ 功能特性

模块 说明
单账号代理 一份凭证(data/token.json),OAuth 登录
OpenAI 兼容端点 /v1/chat/completions(流式 / 非流式)、/v1/models/health
多 API Key 随机 / 自定义 Key,支持备注、启停、使用量统计
官方余额 实时拉取额度包明细,本地缓存,标注到期 / 临期
每日签到 独立开关 + cron 定时,也可手动领取
仪表盘 请求量、Token、模型分布、Key 用量等聚合统计
自动刷新 token 过期自动刷新,401 时刷新后重试一次
指纹头 出站请求复刻官方 CLI 指纹头;chat 请求绝不携带 refresh_token

🚀 快速开始

方式一:下载发行版二进制(推荐)

GitHub Releases 下载对应平台的压缩包(附 SHA256SUMS 校验和):

平台 架构 格式
Linux amd64 / arm64 / armv7 / riscv64 .tar.gz
Windows amd64 / arm64 .zip
macOS amd64 / arm64 .tar.gz

解压后直接运行(无需任何运行时依赖):

./buddy2api-linux-amd64      # 默认监听 127.0.0.1:10082,数据目录 ./data

Windows 双击 buddy2api-windows-amd64.exe 或在 cmd / PowerShell 中运行即可。

方式二:Docker(推荐)

docker compose up -d          # 浏览器访问 http://<服务器IP>:10082(局域网可访问)

或手动运行:

docker run -d \
  --name buddy2api \
  -p 0.0.0.0:10082:10082 \
  -v "$(pwd)/data:/app/data" \
  -e BUDDY2API_LISTEN=0.0.0.0:10082 \
  ghcr.io/echoping07/buddy-2api-go:latest

首次启动未设置管理密码时,默认密码为 password,登录后请尽快在管理后台修改;也可通过环境变量 BUDDY2API_ADMIN_PASSWORD 直接指定。

Docker 时区说明

镜像默认使用中国时区(Asia/Shanghai,并已内置 tzdata。需要其他时区时,通过 Docker 环境变量 TZ 覆盖即可,无需重新构建镜像:

# docker-compose.yml
services:
  buddy2api:
    image: ghcr.io/echoping07/buddy-2api-go:latest
    environment:
      TZ: Asia/Tokyo        # 例如东京时区;默认 Asia/Shanghai
# 或 docker run 时传入
docker run -e TZ=UTC -d --name buddy2api ...

Docker 数据路径

位置 路径 说明
容器内数据目录 /app/data 镜像已声明 VOLUME /app/data,工作目录为 /app,程序默认数据目录 ./data/app/data
宿主机映射(compose 默认) ./data/app/data 建议在部署目录下建 data/ 文件夹
二进制直跑 ./data(可用 -dataBUDDY2API_DATA_DIR 修改) 相对可执行文件所在目录

方式三:源码构建(进阶)

需要 Go 1.25+:

git clone https://github.com/EchoPing07/Buddy-2API-Go.git
cd Buddy-2API-Go
go build -o buddy2api .        # Windows 用 buddy2api.exe
./buddy2api                    # 默认监听 127.0.0.1:10082,数据目录 ./data

带版本号注入:

go build -ldflags="-s -w -X buddy2api-go/internal/proxy.Version=v1.0.0" -o buddy2api .

📖 使用

  1. 打开管理后台:本机部署访问 http://127.0.0.1:10082,Docker/局域网部署访问 http://<服务器IP>:10082,输入管理密码登录(默认 password
  2. 「账号」页 → 登录(OAuth 设备流,浏览器完成授权)
  3. 「密钥」页 → 创建 API Key(随机或自定义,支持备注/启停)
  4. 在任意 OpenAI 兼容客户端填入:
Base URL: http://127.0.0.1:10082/v1
API Key:  sk-...
Model:    auto / glm-5.3 / kimi-k2.6 / ...(以 /v1/models 实际返回为准)
curl http://127.0.0.1:10082/v1/chat/completions \
  -H "Authorization: Bearer sk-..." \
  -H "Content-Type: application/json" \
  -d '{"model":"auto","stream":true,"messages":[{"role":"user","content":"你好"}]}'

🖥️ 命令行参数

参数 说明
-data <dir> 数据目录(默认 ./data,等价 env BUDDY2API_DATA_DIR
-version 打印版本后退出

🔌 端点

OpenAI 兼容(业务端点,API Key 鉴权)

端点 说明
POST /v1/chat/completions OpenAI 兼容 chat(流式透传 / 非流式聚合)
GET /v1/models 模型列表(craft 可用集,从 /v3/config 动态拉取并缓存)
GET /health 健康检查(status / region / has_token / expired / version

管理后台(/admin/*,Cookie 会话)

端点 说明
POST /admin/login POST /admin/logout GET /admin/session 密码登录 / 登出 / 会话状态
GET /admin/account POST /admin/account/oauth/start GET /admin/account/oauth/poll 账号摘要 / OAuth 发起 / OAuth 轮询
POST /admin/account/refresh POST /admin/account/test DELETE /admin/account 手动刷新 / 测试凭证 / 清空凭证
GET /admin/resources 官方余额(带缓存,?force=1 强刷)
GET /admin/checkin/status POST /admin/checkin/claim 签到状态 / 领取
GET /admin/api-keys POST /admin/api-keys PUT /admin/api-keys/{id} DELETE /admin/api-keys/{id} API Key 增删改查
GET /admin/logs 请求日志(分页 + 筛选 model/key/status)
GET /admin/stats 仪表盘聚合
GET /admin/settings PUT /admin/settings 读 / 改配置(密码、region、签到、cron 等)
GET /admin/models POST /admin/models/refresh 模型列表 / 手动重新拉取 /v3/config

Web

端点 说明
GET / Web 管理面板(go:embed 单 HTML,内嵌 Alpine.js + 手写 SVG 图表,无外部依赖),含 统计 / 账号 / 密钥 / 余额 / 日志 / 设置 六个页面

⚙️ 配置

优先级:env > data/config.json > 内置默认。env 统一 BUDDY2API_* 前缀:

env 说明
BUDDY2API_LISTEN 监听地址(二进制默认 127.0.0.1:10082;Docker 镜像内默认 0.0.0.0:10082
BUDDY2API_REGION cn(默认,copilot.tencent.com)/ globalwww.codebuddy.ai),两套端点凭证不互通,切换后需重新扫码登录
BUDDY2API_ADMIN_PASSWORD 管理密码(明文,启动时 bcrypt 哈希写回 config.json,优先级最高);未设置且无 hash 时默认 password
BUDDY2API_AUTO_CHECKIN 自动签到开关(默认关闭)
BUDDY2API_CHECKIN_CRON 签到 cron,6 段含秒(默认 0 0 9 * * *
BUDDY2API_RESOURCE_CACHE_SECONDS 余额缓存秒数(默认 300)
BUDDY2API_LOG_RETENTION_DAYS 日志保留天数(默认 90)
BUDDY2API_LOG_MAX_SIZE_MB 日志表容量上限 MB(默认 50)
BUDDY2API_CHAT_TIMEOUT_SECONDS chat 上游响应头超时秒数(默认 60)。只管上游多久不开始响应即判死,流式开始后(含长思考)不再受总超时截断;改后需重启生效
BUDDY2API_DATA_DIR 数据目录(默认 ./data

指纹头伪装另有 CB_GATEWAY_USER_AGENT / CB_GATEWAY_STAINLESS_OS 等可选 env(一般无需修改),完整变量见 .env.example

💾 数据与安全

文件 说明
data/token.json 账号凭证
data/config.json 全局配置(含 bcrypt 密码哈希)
data/buddy2api.db SQLite(API Keys / 请求日志 / 缓存),只存元信息,不存对话内容
  • API Key 明文存储(管理页可复制完整 Key),校验用常量时间比对
  • 二进制直跑默认只监听 127.0.0.1;Docker(compose / 本文示例)默认全网卡监听 0.0.0.0:10082,局域网可直接访问——公网部署请务必放反代后并加 TLS,或改回仅本机监听
  • 出站请求复刻官方 CLI 指纹头;chat 请求绝不携带 refresh_token
  • 日志不记录请求/响应正文,只记元信息

📁 项目结构

Buddy-2API-Go/
├── main.go                # 入口
├── internal/
│   ├── config/            # 配置加载(config.json + env 覆盖)
│   ├── store/             # SQLite 数据层(API Keys / 日志 / 缓存)
│   ├── auth/              # 凭证:token.json 读写、JWT 解析、OAuth 设备流
│   ├── upstream/          # 上游客户端:chat 转发、billing、checkin、指纹头
│   ├── proxy/             # /v1/chat/completions 代理(流式透传 + 非流式聚合)
│   ├── apikey/            # OpenAI 端点 Key 管理(明文存储/随机/校验/限额)
│   ├── admin/             # 管理后台 API(登录/账号/keys/日志/签到/余额/设置)
│   ├── scheduler/         # 签到定时任务
│   └── web/               # 前端(go:embed 单 HTML,内嵌 Alpine.js)
├── Dockerfile
├── docker-compose.yml
├── .env.example
├── LICENSE.txt
└── go.mod / go.sum

data/ 为运行时自动生成的数据目录,路径说明见上文 Docker 数据路径

🛠️ 技术栈

Go 1.25+ · chi · modernc.org/sqlite(纯 Go,无 cgo) · robfig/cron/v3 · bcrypt · Alpine.js(内嵌)+ 手写 SVG 图表 · go:embed 单二进制

仅 3 个非标准库依赖:chimodernc.org/sqlitecron/v3,其余用标准库 + golang.org/x/crypto

🙏 致谢与参考

📄 License

本项目采用 MIT 协议开源,仅供学习研究使用。

About

将 CodeBuddy 的 AI 服务转化为兼容 Openai 格式的 API

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages