Skip to content

aurora-develop/grok2api

Repository files navigation

grok2api

将 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 指引见文末部署章节;下方流程适用于源码运行。

1. 获取 SSO Token

SSO Token 是你的 Grok 账号凭证,用于调用上游 Grok API。

方法一:浏览器 DevTools(推荐)

  1. 打开 grok.com 并登录你的账号
  2. F12 打开浏览器开发者工具
  3. 切换到 Application(应用程序)标签页
  4. 左侧找到 Cookieshttps://grok.com
  5. 找到名为 sso 的 Cookie,复制它的 Value
  6. 这个值就是你的 SSO Token(通常是一串很长的字符)

方法二:Network 面板抓包

  1. 打开 grok.com 并登录
  2. F12Network(网络)标签页
  3. 在 Grok 页面随便发一条消息
  4. 找到 conversations/new 请求 → HeadersCookie
  5. 从 Cookie 字符串中提取 sso= 后面的值

注意:每个 SSO Token 对应一个 Grok 账号。Token 过期后需要重新获取。免费账号(basic pool)和付费账号(super/heavy pool)的配额不同。

2. 编译运行

# 编译
go build -o grok2api .

# 运行(默认监听 0.0.0.0:8000)
./grok2api

或直接运行:

go run .

3. 添加账号

通过管理 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

4. 调用 API

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。

对接 OpenAI SDK

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)

对接 Anthropic SDK

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:

  1. 打开 grok.com(已登录),F12 → Network
  2. 在 Grok 页面随便发一条消息
  3. 找到 conversations/new 请求 → HeadersCookie
  4. 复制 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 格式,加载优先级:

  1. config.defaults.toml(内置默认值)
  2. data/config.toml(用户自定义,覆盖默认值)
  3. 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-0309grok-4.20-0309-reasoninggrok-4.20-heavygrok-4.20-multi-agent-0309 等 16 个模型

Consolegrok-4.3-consolegrok-4.3-highgrok-4.20-multi-agent-xhigh 等 13 个模型(通过 console.x.ai,免费额度)

媒体grok-imagine-imagegrok-imagine-image-progrok-imagine-image-editgrok-imagine-video

完整模型列表见 API.md

管理 API

管理端点使用 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

部署

Docker(推荐)

镜像已通过 GitHub Actions 自动构建并发布到 GHCR,支持 linux/amd64linux/arm64linux/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> 锁定具体构建。

Docker Compose

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:7890
docker 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 缺失或过期。解决方法:

  1. 按上方「配置反爬绕过」重新抓取浏览器 Cookie,填入 proxy.clearance.cf_cookies
  2. 确保 proxy.clearance.user_agent 与抓取时浏览器的 UA 完全一致
  3. 若使用代理,确认代理出口 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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors