File size: 7,084 Bytes
6fefda3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
# 完整使用示例

本文档提供了JetBrains AI Proxy多JWT负载均衡系统的完整使用示例。

## 📋 准备工作

### 1. 编译项目

```bash
# 进入项目目录
cd jetbrains-ai-proxy

# 编译项目
go build -o jetbrains-ai-proxy

# 或者使用交叉编译
GOOS=linux GOARCH=amd64 go build -o jetbrains-ai-proxy-linux
```

### 2. 准备JWT Tokens

确保你有有效的JetBrains AI JWT tokens。你可以从以下途径获取:
- JetBrains AI服务控制台
- 现有的JetBrains IDE配置
- API密钥管理界面

## 🎯 使用场景示例

### 场景1: 开发环境快速启动

```bash
# 1. 生成示例配置
./jetbrains-ai-proxy --generate-config

# 2. 编辑配置文件
vim config/config.json

# 3. 启动服务
./jetbrains-ai-proxy
```

配置文件内容:
```json
{
  "jetbrains_tokens": [
    {
      "token": "your_jwt_token_here",
      "name": "Dev_Token",
      "description": "Development JWT token"
    }
  ],
  "bearer_token": "your_bearer_token_here",
  "load_balance_strategy": "round_robin",
  "server_port": 8080,
  "server_host": "127.0.0.1"
}
```

### 场景2: 生产环境多JWT负载均衡

```bash
# 1. 创建生产配置目录
mkdir -p /etc/jetbrains-ai-proxy

# 2. 创建生产配置文件
cat > /etc/jetbrains-ai-proxy/config.json << 'EOF'
{
  "jetbrains_tokens": [
    {
      "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
      "name": "Primary_Production",
      "description": "Primary production JWT token",
      "priority": 1,
      "metadata": {
        "environment": "production",
        "region": "us-east-1",
        "tier": "primary"
      }
    },
    {
      "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
      "name": "Secondary_Production",
      "description": "Secondary production JWT token",
      "priority": 2,
      "metadata": {
        "environment": "production",
        "region": "us-west-2",
        "tier": "secondary"
      }
    },
    {
      "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
      "name": "Backup_Production",
      "description": "Backup production JWT token",
      "priority": 3,
      "metadata": {
        "environment": "production",
        "region": "eu-west-1",
        "tier": "backup"
      }
    }
  ],
  "bearer_token": "prod_bearer_token_here",
  "load_balance_strategy": "random",
  "health_check_interval": "30s",
  "server_port": 8080,
  "server_host": "0.0.0.0"
}
EOF

# 3. 启动服务
./jetbrains-ai-proxy --config /etc/jetbrains-ai-proxy/config.json
```

### 场景3: 使用环境变量配置

```bash
# 1. 设置环境变量
export JWT_TOKENS="jwt1,jwt2,jwt3"
export BEARER_TOKEN="your_bearer_token"
export LOAD_BALANCE_STRATEGY="random"
export SERVER_PORT="9090"

# 2. 启动服务
./jetbrains-ai-proxy

# 或者使用.env文件
cat > .env << 'EOF'
JWT_TOKENS=jwt_token_1,jwt_token_2,jwt_token_3
BEARER_TOKEN=your_bearer_token_here
LOAD_BALANCE_STRATEGY=round_robin
SERVER_HOST=0.0.0.0
SERVER_PORT=8080
EOF

./jetbrains-ai-proxy
```

### 场景4: Docker容器部署

```bash
# 1. 创建Dockerfile(如果不存在)
cat > Dockerfile << 'EOF'
FROM golang:1.21-alpine AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN go build -o jetbrains-ai-proxy

FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=builder /app/jetbrains-ai-proxy .
EXPOSE 8080
CMD ["./jetbrains-ai-proxy"]
EOF

# 2. 构建镜像
docker build -t jetbrains-ai-proxy .

# 3. 运行容器
docker run -d \
  --name jetbrains-ai-proxy \
  -p 8080:8080 \
  -e JWT_TOKENS="jwt1,jwt2,jwt3" \
  -e BEARER_TOKEN="your_bearer_token" \
  -e LOAD_BALANCE_STRATEGY="random" \
  jetbrains-ai-proxy

# 4. 或者使用配置文件挂载
docker run -d \
  --name jetbrains-ai-proxy \
  -p 8080:8080 \
  -v $(pwd)/config:/app/config \
  jetbrains-ai-proxy
```

## 🔧 管理和监控

### 健康检查

```bash
# 检查服务状态
curl http://localhost:8080/health

# 响应示例
{
  "status": "ok",
  "healthy_tokens": 3,
  "total_tokens": 3,
  "strategy": "round_robin",
  "server_info": {
    "host": "0.0.0.0",
    "port": 8080
  }
}
```

### 查看配置信息

```bash
# 查看当前配置
curl http://localhost:8080/config

# 响应示例
{
  "jwt_tokens_count": 3,
  "jwt_tokens": [
    {
      "name": "Primary_JWT",
      "description": "Primary JWT token",
      "priority": 1,
      "token_preview": "eyJ0eXAiOiJKV1QiLCJhbGc..."
    }
  ],
  "bearer_token_set": true,
  "load_balance_strategy": "round_robin",
  "health_check_interval": "30s",
  "server_host": "0.0.0.0",
  "server_port": 8080
}
```

### 查看统计信息

```bash
# 查看负载均衡统计
curl http://localhost:8080/stats

# 响应示例
{
  "balancer": {
    "healthy_tokens": 3,
    "total_tokens": 3,
    "strategy": "round_robin"
  },
  "config": {
    "health_check_interval": "30s",
    "server_host": "0.0.0.0",
    "server_port": 8080
  }
}
```

### 重载配置

```bash
# 重新加载配置(无需重启服务)
curl -X POST http://localhost:8080/reload

# 响应示例
{
  "message": "Configuration reloaded successfully"
}
```

## 🧪 测试API

### 发送聊天请求

```bash
# 发送非流式请求
curl -X POST http://localhost:8080/v1/chat/completions \
  -H "Authorization: Bearer your_bearer_token" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4o",
    "messages": [
      {"role": "user", "content": "Hello, how are you?"}
    ],
    "stream": false
  }'

# 发送流式请求
curl -X POST http://localhost:8080/v1/chat/completions \
  -H "Authorization: Bearer your_bearer_token" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4o",
    "messages": [
      {"role": "user", "content": "Tell me a story"}
    ],
    "stream": true
  }'
```

### 获取支持的模型

```bash
# 获取模型列表
curl http://localhost:8080/v1/models \
  -H "Authorization: Bearer your_bearer_token"
```

## 🚨 故障排除

### 常见问题

1. **所有JWT tokens都不健康**
   ```bash
   # 检查token有效性
   curl http://localhost:8080/health
   
   # 查看日志
   tail -f /var/log/jetbrains-ai-proxy.log
   ```

2. **配置文件未找到**
   ```bash
   # 生成示例配置
   ./jetbrains-ai-proxy --generate-config
   
   # 检查配置文件路径
   ./jetbrains-ai-proxy --print-config
   ```

3. **端口被占用**
   ```bash
   # 检查端口使用情况
   lsof -i :8080
   
   # 使用不同端口启动
   ./jetbrains-ai-proxy -p 9090
   ```

### 日志分析

```bash
# 查看实时日志
tail -f jetbrains-ai-proxy.log

# 过滤健康检查日志
grep "health check" jetbrains-ai-proxy.log

# 过滤错误日志
grep -i error jetbrains-ai-proxy.log
```

## 📈 性能优化建议

1. **JWT Token数量**: 建议配置3-5个JWT tokens以获得最佳负载均衡效果
2. **健康检查间隔**: 生产环境建议设置为30-60秒
3. **负载均衡策略**: 
   - 使用`round_robin`获得均匀分布
   - 使用`random`避免可预测的请求模式
4. **监控**: 定期检查`/health``/stats`端点
5. **日志**: 配置适当的日志级别和轮转策略