将 Grok (x.ai) 转换为 OpenAI / Anthropic 兼容的 API 网关。纯 Go 实现,单二进制部署,多架构 Docker 镜像开箱即用。
- OpenAI 兼容 —
/v1/chat/completions、/v1/images/generations、/v1/videos、/v1/responses - Anthropic 兼容 —
/v1/messages,支持流式和非流式 - 多账号池管理 — 支持 basic / super / heavy 三级账号池,自动配额跟踪
- 智能选号 — 配额感知策略(按剩余配额评分)和随机策略,自动故障转移
- 浏览器指纹伪装 — TLS 指纹、HTTP/2 头序、Chrome 客户端提示,规避上游检测
- 纯 Go 生成反 bot 头 —
x-statsig-id等头由内置算法实时生成,无需浏览器或 JS 运行时 - 代理支持 — 直连 / 单代理,兼容 HTTP/HTTPS/SOCKS4/5
- Cloudflare 绕过 — 手动 Cookie 注入,
cf_clearance自动提取 - 本地媒体缓存 — 图片和视频本地缓存,LRU 淘汰
- 管理后台 — 完整的 Token CRUD、配置热更新、批量操作
- 热重载配置 — 修改配置文件即时生效,无需重启
- 多实例部署 — 基于文件锁的 Leader 选举,支持多进程运行
- 多架构 Docker 镜像 — GHCR 自动构建 amd64 / arm64 / armv7
Docker 用户:可直接
docker pull ghcr.io/aurora-develop/grok2api:latest一键启动,无需编译。完整 Docker 指引见文末部署章节;下方流程适用于源码运行。
SSO Token 是你的 Grok 账号凭证,用于调用上游 Grok API。
方法一:浏览器 DevTools(推荐)
- 打开 grok.com 并登录你的账号
- 按
F12打开浏览器开发者工具 - 切换到 Application(应用程序)标签页
- 左侧找到 Cookies →
https://grok.com - 找到名为
sso的 Cookie,复制它的 Value 值 - 这个值就是你的 SSO Token(通常是一串很长的字符)
方法二:Network 面板抓包
- 打开 grok.com 并登录
- 按
F12→ Network(网络)标签页 - 在 Grok 页面随便发一条消息
- 找到
conversations/new请求 → Headers → Cookie - 从 Cookie 字符串中提取
sso=后面的值
注意:每个 SSO Token 对应一个 Grok 账号。Token 过期后需要重新获取。免费账号(basic pool)和付费账号(super/heavy pool)的配额不同。
# 编译
go build -o grok2api .
# 运行(默认监听 0.0.0.0:8000)
./grok2api或直接运行:
go run .通过管理 API 将 SSO Token 添加到账号池:
# 添加到 basic 池(免费账号)
curl -X POST http://localhost:8000/admin/api/tokens/add \
-H "Content-Type: application/json" \
-d '{"tokens": ["你的sso-token"], "pool": "basic"}'
# 添加到 super 池(付费账号)
curl -X POST http://localhost:8000/admin/api/tokens/add \
-H "Content-Type: application/json" \
-d '{"tokens": ["你的sso-token"], "pool": "super"}'默认管理密码是
grok2api(配置项app.app_key)。如果配置了app.api_key,管理 API 也需要在 Header 中带上Authorization: Bearer grok2api。
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "grok-4.20-0309",
"messages": [{"role": "user", "content": "你好!"}],
"stream": true
}'也可以直接用 SSO Token 当 Bearer 调用(无需先加入账号池):
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 你的sso-token" \
-d '{
"model": "grok-4.20-0309",
"messages": [{"role": "user", "content": "你好!"}],
"stream": true
}'鉴权规则:默认
api_key为空,完全开放。配置api_key后,请求必须携带匹配的 API Key 或任意 SSO Token。
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="any")
response = client.chat.completions.create(
model="grok-4.20-0309",
messages=[{"role": "user", "content": "你好!"}],
)
print(response.choices[0].message.content)import anthropic
client = anthropic.Anthropic(base_url="http://localhost:8000", api_key="any")
message = client.messages.create(
model="grok-4.20-0309",
max_tokens=4096,
messages=[{"role": "user", "content": "你好!"}],
)
print(message.content[0].text)Grok 有 Cloudflare + 自研反爬机制。要正常调用,最关键的是从浏览器抓取 cf_clearance Cookie:
- 打开 grok.com(已登录),F12 → Network
- 在 Grok 页面随便发一条消息
- 找到
conversations/new请求 → Headers → Cookie - 复制 Cookie 字符串到
data/config.toml:
[proxy.clearance]
# 直接粘贴整段 Cookie 头,程序会自动提取 cf_clearance 等字段
cf_cookies = "cf_clearance=...; sso=...; grok_device_id=...; ..."
# 抓取 Cookie 时浏览器使用的 User-Agent(必须一致,否则 cf_clearance 失效)
user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ..."提示
cf_clearance有效期通常几小时到一天,过期后需重新抓取,否则会返回 403。- 把整段 Cookie 头都放进
cf_cookies即可,程序会自动提取所需部分。x-statsig-id等反 bot 头由程序用纯 Go 实时生成,无需手动配置;如需强制使用真实值,可设置statsig_seed/statsig_hex(见 配置说明)。
配置文件采用 TOML 格式,加载优先级:
config.defaults.toml(内置默认值)data/config.toml(用户自定义,覆盖默认值)GROK_*环境变量(最高优先级)
[app]
app_key = "grok2api" # 管理后台密码
api_key = "" # API 密钥(留空不鉴权,逗号分隔多个)
[features]
stream = true # 默认流式响应
thinking = true # 输出思考过程
temporary = true # 临时对话(不保存历史)
auto_chat_mode_fallback = true # AUTO 模型自动降级到 fast/expert
[proxy.egress]
proxy_url = "" # 出站代理(留空直连),HTTP/HTTPS/SOCKS4/5
[proxy.clearance]
cf_cookies = "" # 手动模式:浏览器 Cookie 串(含 cf_clearance)
user_agent = "..." # 需与抓取 Cookie 时的 UA 一致
statsig_seed = "" # 可选:真实 statsig 种子(不配则用内置生成)
statsig_hex = "" # 可选:真实 statsig HEX 指纹
[account.refresh]
enabled = true # true=配额模式;false=随机模式
config.defaults.toml内置全部默认值,data/config.toml只需覆盖你想修改的项即可。
| 变量 | 说明 | 默认值 |
|---|---|---|
SERVER_HOST |
监听地址 | 0.0.0.0 |
SERVER_PORT |
监听端口 | 8000 |
LOG_LEVEL |
日志级别 | INFO |
LOG_FILE_ENABLED |
启用文件日志 | true |
DATA_DIR |
数据目录 | ./data |
ACCOUNT_LOCAL_PATH |
账号存储路径 | ./data/accounts.jsonl |
PROXY_HTTP |
代理地址(覆盖配置文件) | (空) |
| 池 | 说明 | 配额周期 |
|---|---|---|
| basic | 免费账号 | 24 小时 |
| super | 付费账号 | 2 小时 |
| heavy | 高级账号 | 2 小时 |
grok.com 聊天:grok-4.20-0309、grok-4.20-0309-reasoning、grok-4.20-heavy、grok-4.20-multi-agent-0309 等 16 个模型
Console:grok-4.3-console、grok-4.3-high、grok-4.20-multi-agent-xhigh 等 13 个模型(通过 console.x.ai,免费额度)
媒体:grok-imagine-image、grok-imagine-image-pro、grok-imagine-image-edit、grok-imagine-video
完整模型列表见 API.md。
管理端点使用 app.app_key 认证,支持 Authorization: Bearer 或 ?app_key= 参数。
# 查看系统状态
curl http://localhost:8000/admin/api/status \
-H "Authorization: Bearer grok2api"
# 查看所有 Token
curl http://localhost:8000/admin/api/tokens \
-H "Authorization: Bearer grok2api"
# 更新配置
curl -X POST http://localhost:8000/admin/api/config \
-H "Authorization: Bearer grok2api" \
-H "Content-Type: application/json" \
-d '{"key": "features.thinking", "value": "false"}'完整管理 API 文档见 API.md。
镜像已通过 GitHub Actions 自动构建并发布到 GHCR,支持 linux/amd64、linux/arm64、linux/arm/v7 多架构。直接拉取即可使用,无需本地编译。
# 拉取最新镜像
docker pull ghcr.io/aurora-develop/grok2api:latest
# 运行容器(挂载 data 目录以持久化配置与账号数据)
docker run -d \
--name grok2api \
-p 8000:8000 \
-v $(pwd)/data:/app/data \
ghcr.io/aurora-develop/grok2api:latest启动后访问 http://localhost:8000,管理后台密码默认为 grok2api。
可选环境变量:
SERVER_PORT(覆盖监听端口)、PROXY_HTTP(覆盖出站代理)、TZ(时区,如Asia/Shanghai)。指定版本:
docker pull ghcr.io/aurora-develop/grok2api:v1.0.1,或用 commit 短哈希ghcr.io/aurora-develop/grok2api:<sha>锁定具体构建。
services:
grok2api:
image: ghcr.io/aurora-develop/grok2api:latest
container_name: grok2api
restart: unless-stopped
ports:
- "8000:8000"
volumes:
- ./data:/app/data
environment:
- TZ=Asia/Shanghai
# - PROXY_HTTP=http://127.0.0.1:7890docker compose up -d如需修改源码后自建镜像,可使用仓库自带的 Dockerfile:
docker build -t grok2api .
docker run -p 8000:8000 -v ./data:/app/data grok2api支持多进程部署,Leader 进程负责配额刷新,Follower 进程只做增量同步。基于 flock 文件锁自动选举。
Q: 如何获取 SSO Token?
A: 登录 grok.com,按 F12 打开开发者工具 → Application → Cookies → 找到 sso 字段复制其值。详见上方「获取 SSO Token」章节。
Q: 为什么调用返回 403 "Request rejected by anti-bot rules"?
A: 这是 Grok 的反爬机制,通常是 cf_clearance 缺失或过期。解决方法:
- 按上方「配置反爬绕过」重新抓取浏览器 Cookie,填入
proxy.clearance.cf_cookies - 确保
proxy.clearance.user_agent与抓取时浏览器的 UA 完全一致 - 若使用代理,确认代理出口 IP 与浏览器 IP 一致(cf_clearance 绑定 IP)
x-statsig-id等反 bot 头由程序自动生成,无需手动处理。
Q: 如何获取 cf_clearance?
A: 登录 grok.com,F12 → Network → 刷新页面 → 找到任意 grok.com 请求 → Request Headers → Cookie → 复制 cf_clearance=... 的值。有效期通常几小时到一天。最简单的做法是把整段 Cookie 头都粘进 cf_cookies。
Q: 如何使用代理?
A: 在 config.toml 的 [proxy.egress] 中设置 proxy_url,兼容 HTTP/HTTPS/SOCKS4/SOCKS5 协议;或用环境变量 PROXY_HTTP 覆盖。示例:proxy_url = "socks5://127.0.0.1:1080"。
Q: 支持图片输入吗?
A: 支持。在 messages 的 content 中使用 image_url 类型,支持 URL 和 base64 data URI。
Q: 多实例怎么部署?
A: 直接启动多个进程,自动通过文件锁选举 Leader。Leader 负责配额刷新,所有进程都处理 API 请求。Docker 多实例同理,分别 docker run 即可(注意挂载各自的 data 目录或共享存储)。
本项目在以下开源项目的基础上发展而来,特此致谢:
- chenyme/grok2api — 原始 Python 实现,为本项目的协议兼容与账号管理提供了重要参考。
同时感谢 LINUX DO 社区 —— 本项目在此发布,感谢社区用户的反馈与帮助。
本项目为独立重写的 Go 实现,与上述项目无附属关系,旨在提供更轻量、高性能的部署体验。
MIT License