File size: 11,387 Bytes
1a9e2c2 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 | ---
title: Grok2api
emoji: 🦀
colorFrom: indigo
colorTo: red
sdk: docker
pinned: false
---
# Grok2API
基于 **FastAPI** 重构的 Grok2API,全面适配最新 Web 调用格式,支持流式对话、图像生成、图像编辑、联网搜索、深度思考,号池并发与自动负载均衡一体化。
## 🆕 Fork 增强功能
本 Fork 在原版基础上新增以下功能:
- **多 Key 管理与持久化**:支持管理员批量创建、备注、删除 API Key,支持多选批量操作。所有密钥均实现持久化存储,重启不丢失。
- **日志审计支持**:实时记录请求细节,且日志数据支持文件持久化存储。
- **并发性能优化 (Critical)**:重构了底层的 Grok 请求和响应处理逻辑。采用全异步流式迭代 (`aiter_lines`),彻底解决了在消息生成过程中后台管理面板“卡死”或响应缓慢的问题。
- **Token 智能冷却**:请求失败后自动冷却,避免连续使用故障 Token
- 普通错误:冷却 5 次请求
- 429 限流 + 有额度:冷却 1 小时
- 429 限流 + 无额度:冷却 10 小时
- **一键刷新所有 Token**:后台按钮批量刷新剩余次数,带实时进度显示
- **并发保护**:刷新任务进行中自动拒绝重复请求
- **请求统计与持久化**:按小时/天统计请求趋势,包含成功率和模型分布图表,统计数据支持持久化。
- **缓存预览**:后台添加缓存预览板块,可查看缓存的图片/视频
<br>
## 使用说明
### 调用次数与配额
- **普通账号(Basic)**:免费使用 **80 次 / 20 小时**
- **Super 账号**:配额待定(作者未测)
- 系统自动负载均衡各账号调用次数,可在**管理页面**实时查看用量与状态
### 图像生成功能
- 在对话内容中输入如“给我画一个月亮”自动触发图片生成
- 每次以 **Markdown 格式返回两张图片**,共消耗 4 次额度
- **注意:Grok 的图片直链受 403 限制,系统自动缓存图片到本地。必须正确设置 `Base Url` 以确保图片能正常显示!**
### 视频生成功能
- 选择 `grok-imagine-0.9` 模型,传入图片和提示词即可(方式和 OpenAI 的图片分析调用格式一致)
- 返回格式为 `<video src="{full_video_url}" controls="controls"></video>`
- **注意:Grok 的视频直链受 403 限制,系统自动缓存图片到本地。必须正确设置 `Base Url` 以确保视频能正常显示!**
```
curl https://你的服务器地址/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $GROK2API_API_KEY" \
-d '{
"model": "grok-imagine-0.9",
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "让太阳升起来"
},
{
"type": "image_url",
"image_url": {
"url": "https://your-image.jpg"
}
}
]
}
]
}'
```
### 关于 `x_statsig_id`
- `x_statsig_id` 是 Grok 用于反机器人的 Token,有逆向资料可参考
- **建议新手勿修改配置,保留默认值即可**
- 尝试用 Camoufox 绕过 403 自动获 id,但 grok 现已限制非登陆的`x_statsig_id`,故弃用,采用固定值以兼容所有请求
<br>
## 如何部署
### 方式一:Docker Compose(推荐)
由于本项目包含修改,建议直接构建运行:
1. 克隆本仓库
```bash
git clone https://github.com/Tomiya233/grok2api.git
cd grok2api
```
2. 启动服务
```bash
docker-compose up -d --build
```
**docker-compose.yml 参考:**
```yaml
services:
grok2api:
build: .
image: grok2api:latest
container_name: grok2api
restart: always
ports:
- "8000:8000"
volumes:
- grok_data:/app/data
- ./logs:/app/logs
environment:
- LOG_LEVEL=INFO
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
volumes:
grok_data:
```
### 方式二:Python 直接运行
**前置要求**:Python 3.10+,建议使用 `uv` 包管理器
1. 安装 uv
```bash
curl -LsSf https://astral.sh/uv/install.sh | sh
```
2. 运行服务
```bash
# 安装依赖并运行
uv sync
uv run python main.py
```
服务默认运行在 `http://127.0.0.1:8000`
### 环境变量说明
| 环境变量 | 必填 | 说明 | 示例 |
|---------------|------|-----------------------------------------|------|
| STORAGE_MODE | 否 | 存储模式:file/mysql/redis | file |
| DATABASE_URL | 否 | 数据库连接URL(MySQL/Redis模式时必需) | mysql://user:pass@host:3306/db |
**存储模式:**
- `file`: 本地文件存储(默认)
- `mysql`: MySQL数据库存储,需设置DATABASE_URL
- `redis`: Redis缓存存储,需设置DATABASE_URL
<br>
## 接口说明
> 与 OpenAI 官方接口完全兼容,API 请求需通过 **Authorization header** 认证
| 方法 | 端点 | 描述 | 是否需要认证 |
|-------|------------------------------|------------------------------------|------|
| POST | `/v1/chat/completions` | 创建聊天对话(流式/非流式) | ✅ |
| GET | `/v1/models` | 获取全部支持模型 | ✅ |
| GET | `/images/{img_path}` | 获取生成图片文件 | ❌ |
<br>
<details>
<summary>管理与统计接口(展开查看更多)</summary>
| 方法 | 端点 | 描述 | 认证 |
|-------|-------------------------|--------------------|------|
| GET | /login | 管理员登录页面 | ❌ |
| GET | /manage | 管理控制台页面 | ❌ |
| POST | /api/login | 管理员登录认证 | ❌ |
| POST | /api/logout | 管理员登出 | ✅ |
| GET | /api/tokens | 获取 Token 列表 | ✅ |
| POST | /api/tokens/add | 批量添加 Token | ✅ |
| POST | /api/tokens/delete | 批量删除 Token | ✅ |
| GET | /api/settings | 获取系统配置 | ✅ |
| POST | /api/settings | 更新系统配置 | ✅ |
| GET | /api/cache/size | 获取缓存大小 | ✅ |
| POST | /api/cache/clear | 清理所有缓存 | ✅ |
| POST | /api/cache/clear/images | 清理图片缓存 | ✅ |
| POST | /api/cache/clear/videos | 清理视频缓存 | ✅ |
| GET | /api/stats | 获取统计信息 | ✅ |
| POST | /api/tokens/tags | 更新 Token 标签 | ✅ |
| POST | /api/tokens/note | 更新 Token 备注 | ✅ |
| POST | /api/tokens/test | 测试 Token 可用性 | ✅ |
| GET | /api/tokens/tags/all | 获取所有标签列表 | ✅ |
| GET | /api/storage/mode | 获取存储模式信息 | ✅ |
| POST | /api/tokens/refresh-all | 一键刷新所有Token | ✅ |
| GET | /api/tokens/refresh-progress | 获取刷新进度 | ✅ |
| GET | /api/keys | 获取 API Key 列表 | ✅ |
| POST | /api/keys/add | 创建新 API Key | ✅ |
| POST | /api/keys/delete | 删除 API Key | ✅ |
| POST | /api/keys/status | 切换 Key 启用状态 | ✅ |
| POST | /api/keys/name | 修改 Key 备注名称 | ✅ |
| GET | /api/logs | 获取请求日志(1000条)| ✅ |
| POST | /api/logs/clear | 清空所有审计日志 | ✅ |
</details>
<br>
## 可用模型一览
| 模型名称 | 计次 | 账户类型 | 图像生成/编辑 | 深度思考 | 联网搜索 | 视频生成 |
|------------------------|--------|--------------|--------------|----------|----------|----------|
| `grok-4.1` | 1 | Basic/Super | ✅ | ✅ | ✅ | ❌ |
| `grok-4.1-thinking` | 1 | Basic/Super | ✅ | ✅ | ✅ | ❌ |
| `grok-imagine-0.9` | - | Basic/Super | ✅ | ❌ | ❌ | ✅ |
| `grok-4-fast` | 1 | Basic/Super | ✅ | ✅ | ✅ | ❌ |
| `grok-4-fast-expert` | 4 | Basic/Super | ✅ | ✅ | ✅ | ❌ |
| `grok-4-expert` | 4 | Basic/Super | ✅ | ✅ | ✅ | ❌ |
| `grok-4-heavy` | 1 | Super | ✅ | ✅ | ✅ | ❌ |
| `grok-3-fast` | 1 | Basic/Super | ✅ | ❌ | ✅ | ❌ |
<br>
## 配置参数说明
> 服务启动后,登录 `/login` 管理后台进行参数配置
| 参数名 | 作用域 | 必填 | 说明 | 默认值 |
|----------------------------|---------|------|-----------------------------------------|--------|
| admin_username | global | 否 | 管理后台登录用户名 | "admin"|
| admin_password | global | 否 | 管理后台登录密码 | "admin"|
| log_level | global | 否 | 日志级别:DEBUG/INFO/... | "INFO" |
| image_mode | global | 否 | 图片返回模式:url/base64 | "url" |
| image_cache_max_size_mb | global | 否 | 图片缓存最大容量(MB) | 512 |
| video_cache_max_size_mb | global | 否 | 视频缓存最大容量(MB) | 1024 |
| base_url | global | 否 | 服务基础URL/图片访问基准 | "" |
| api_key | grok | 否 | API 密钥(可选加强安全) | "" |
| proxy_url | grok | 否 | HTTP代理服务器地址 | "" |
| stream_chunk_timeout | grok | 否 | 流式分块超时时间(秒) | 120 |
| stream_first_response_timeout | grok | 否 | 流式首次响应超时时间(秒) | 30 |
| stream_total_timeout | grok | 否 | 流式总超时时间(秒) | 600 |
| cf_clearance | grok | 否 | Cloudflare安全令牌 | "" |
| x_statsig_id | grok | 是 | 反机器人唯一标识符 | "ZTpUeXBlRXJyb3I6IENhbm5vdCByZWFkIHByb3BlcnRpZXMgb2YgdW5kZWZpbmVkIChyZWFkaW5nICdjaGlsZE5vZGVzJyk=" |
| filtered_tags | grok | 否 | 过滤响应标签(逗号分隔) | "xaiartifact,xai:tool_usage_card,grok:render" |
| show_thinking | grok | 否 | 显示思考过程 true(显示)/false(隐藏) | true |
| temporary | grok | 否 | 会话模式 true(临时)/false | true |
<br>
## ⚠️ 注意事项
本项目仅供学习与研究,请遵守相关使用条款!
<br>
> 本项目基于以下项目学习重构,特别感谢:[LINUX DO](https://linux.do)、[VeroFess/grok2api](https://github.com/VeroFess/grok2api)、[xLmiler/grok2api_python](https://github.com/xLmiler/grok2api_python)
|