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)