File size: 7,484 Bytes
c1a43bf
 
 
 
 
 
 
6cace42
 
 
 
 
c1a43bf
 
 
 
 
 
 
 
 
 
 
6cace42
 
 
 
 
c1a43bf
 
 
 
 
 
 
 
 
 
 
6cace42
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c1a43bf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
350
# CLI Proxy API Plus - Hugging Face Spaces 部署指南

本文檔提供完整的 Hugging Face Spaces 部署步驟說明。

## 📋 目錄

1. [前置需求](#前置需求)
2. [構建 Go 二進制](#構建-go-二進制)
3. [快速部署](#快速部署)
4. [配置 Secrets](#配置-secrets)
5. [使用說明](#使用說明)
6. [常見問題](#常見問題)

---

## 前置需求

### 必需項目

1. **Hugging Face 帳號**
   - 註冊地址: https://huggingface.co/join
   - 建議啟用兩步驗證以保護帳號安全

2. **Go 編譯環境**(用於構建二進制)
   - Go 1.26 或更高版本
   - 下載地址: https://go.dev/dl/

3. **AI 服務提供商帳號**(至少需要一個)
   - [Anthropic Claude](https://console.anthropic.com/)
   - [Google AI Studio](https://aistudio.google.com/)
   - [GitHub Copilot](https://github.com/features/copilot)
   - [AWS Kiro](https://aws.amazon.com/)

### 可選項目

- 自定義域名(可在 HF Spaces 設置中配置)

---

## 構建 Go 二進制

**重要**:HF Spaces Dockerfile 需要預先構建的 Go 二進制文件。

### 步驟 1:克隆專案

```bash
git clone https://github.com/router-for-me/CLIProxyAPI.git
cd CLIProxyAPI
```

### 步驟 2:構建 Linux 二進制

**Linux/macOS:**
```bash
GOOS=linux GOARCH=amd64 go build -o hf-spaces/CLIProxyAPIPlus ./cmd/server/
```

**Windows (PowerShell):**
```powershell
$env:GOOS="linux"; $env:GOARCH="amd64"; go build -o hf-spaces/CLIProxyAPIPlus ./cmd/server/
```

### 步驟 3:驗證構建

```bash
ls -la hf-spaces/CLIProxyAPIPlus
# 應該顯示一個約 20-30MB 的可執行文件
```

---

## 快速部署

### 方法一:從模板創建(推薦)

1. **Fork 或 Clone 本項目到您的 HF 帳號**

   ```bash
   # 使用 Git
   git clone https://huggingface.co/spaces/YOUR_USERNAME/cli-proxy-api-plus
   ```

2. **創建新的 Space**
   - 前往 https://huggingface.co/new-space
   - 選擇 **Docker** 作為 SDK
   - 設置 Space 名稱(例如:`cli-proxy-api-plus`   - 選擇可見性(Public 或 Private)

3. **上傳文件**`hf-spaces/` 目錄下的所有文件上傳到 Space 根目錄:
   - `Dockerfile`
   - `supervisord.conf`
   - `requirements.txt`
   - `entrypoint.sh`
   - `README.md`
   - `streamlit_app/` 目錄

### 方法二:使用 Git 推送

1. **創建 Space 後,克隆到本地**

   ```bash
   git clone https://huggingface.co/spaces/YOUR_USERNAME/YOUR_SPACE_NAME
   cd YOUR_SPACE_NAME
   ```

2. **複製文件**

   ```bash
   # 從本項目複製 hf-spaces 內容
   cp -r /path/to/CLIProxyAPIPlus-main/hf-spaces/* .
   ```

3. **提交並推送**

   ```bash
   git add .
   git commit -m "Initial deployment"
   git push
   ```

4. **等待構建完成**
   
   HF Spaces 會自動開始構建 Docker 映像,通常需要 5-10 分鐘。

---

## 配置 Secrets

### 為什麼需要 Secrets?

Secrets 用於安全地存儲敏感信息,如 API 密鑰、OAuth 憑證等。這些信息不會出現在代碼中,確保安全性。

### 如何設置 Secrets

1. **進入 Space 設置頁面**
   - 打開您的 Space 頁面
   - 點擊右上角 **Settings** 標籤

2. **找到 Variables and Secrets 區塊**
   - 滾動到 **Variables and secrets** 部分
   - 點擊 **New secret**

3. **添加以下 Secrets**

#### 基礎配置

| Secret 名稱 | 說明 | 範例值 |
|------------|------|--------|
| `SERVER_PORT` | Go API 服務器端口 | `8317` |
| `LOG_LEVEL` | 日誌級別 | `info` |

#### Claude 配置

| Secret 名稱 | 說明 | 取得方式 |
|------------|------|----------|
| `CLAUDE_API_KEY` | Anthropic API Key | [Anthropic Console](https://console.anthropic.com/) |
| `CLAUDE_CLIENT_ID` | OAuth Client ID | OAuth 應用註冊 |
| `CLAUDE_CLIENT_SECRET` | OAuth Client Secret | OAuth 應用註冊 |

#### Gemini 配置

| Secret 名稱 | 說明 | 取得方式 |
|------------|------|----------|
| `GEMINI_API_KEY` | Google AI API Key | [Google AI Studio](https://aistudio.google.com/app/apikey) |

#### GitHub Copilot 配置

| Secret 名稱 | 說明 |
|------------|------|
| `GITHUB_CLIENT_ID` | GitHub OAuth App Client ID |
| `GITHUB_CLIENT_SECRET` | GitHub OAuth App Client Secret |

#### Kiro 配置

| Secret 名稱 | 說明 |
|------------|------|
| `AWS_ACCESS_KEY_ID` | AWS Access Key |
| `AWS_SECRET_ACCESS_KEY` | AWS Secret Key |
| `AWS_REGION` | AWS 區域(如 `us-east-1`) |

### OAuth 回調 URL 設置

在配置 OAuth 應用時,需要設置正確的回調 URL:

```
https://YOUR_USERNAME-YOUR_SPACE_NAME.hf.space/oauth/callback/{provider}
```

例如:
- Claude: `https://john-cli-proxy.hf.space/oauth/callback/claude`
- Gemini: `https://john-cli-proxy.hf.space/oauth/callback/gemini`
- GitHub: `https://john-cli-proxy.hf.space/oauth/callback/github`

---

## 使用說明

### 訪問應用

部署完成後,您可以通過以下 URL 訪問:

```
https://YOUR_USERNAME-YOUR_SPACE_NAME.hf.space
```

### 主要功能

#### 1. 首頁(Dashboard)

- 查看 API 服務狀態
- 查看可用的 AI 提供商
- 快速導航到各功能頁面

#### 2. 💬 Chat 頁面

- 測試 API 端點
- 選擇不同的 AI 模型
- 發送測試請求
- 查看響應結果

#### 3. 🔑 Auth 頁面

- 管理 OAuth 登錄
- 查看 API 密鑰狀態
- 刷新認證令牌

#### 4. 📊 Stats 頁面

- 查看使用統計
- 請求次數圖表
- Token 使用量
- 模型分佈

#### 5. ⚙️ Settings 頁面

- 服務器配置
- 提供商設置
- 日誌查看

### API 端點

Go API 服務器運行在內部端口 8317,Streamlit 會代理請求:

```
# OpenAI 兼容端點
POST /v1/chat/completions
POST /v1/models

# Claude 端點
POST /v1/messages

# 管理端點
GET /api/status
GET /api/models
```

---

## 常見問題

### Q: 構建失敗怎麼辦?

**A:** 檢查以下項目:
1. 確保 `Dockerfile` 在根目錄
2. 檢查 `requirements.txt` 格式是否正確
3. 查看 Build Logs 中的錯誤信息

### Q: 應用無法啟動?

**A:** 可能原因:
1. Secrets 未正確配置
2. 端口衝突(HF Spaces 要求使用 7860)
3. 依賴安裝失敗

### Q: API 請求失敗?

**A:** 檢查:
1. API 密鑰是否有效
2. OAuth 令牌是否過期
3. 網絡連接是否正常

### Q: 如何更新應用?

**A:** 
```bash
git pull origin main
git push
```

HF Spaces 會自動重新構建。

### Q: 如何查看日誌?

**A:** 
1. 進入 Space 頁面
2. 點擊 **Logs** 標籤
3. 查看實時日誌輸出

### Q: 資源限制?

**A:** HF Spaces 免費版有以下限制:
- CPU: 2 vCPU
- 內存: 16GB
- 存儲: 臨時存儲(重啟後清除)

如需更多資源,可考慮升級到 GPU Space 或使用 HF Enterprise。

---

## 進階配置

### 自定義域名

1. 進入 Space Settings
2. 找到 **Custom Domain** 區塊
3. 輸入您的域名並按照指示配置 DNS

### 持久化存儲

HF Spaces 預設使用臨時存儲。如需持久化:

1. 使用 HF Datasets 存儲配置
2. 或使用外部數據庫(如 PostgreSQL)

### 擴展功能

您可以通過修改 `streamlit_app/` 中的文件來擴展功能:

- 添加新的頁面:在 `pages/` 目錄創建新文件
- 修改主題:編輯 `.streamlit/config.toml`
- 添加新功能:修改 `app.py`

---

## 技術支持

如有問題,請:

1. 查閱 [GitHub Issues](https://github.com/router-for-me/CLIProxyAPI/issues)
2. 在 HF Space 上開啟 Discussion
3. 聯繫維護者

---

## 授權

本項目採用 MIT 授權條款。詳見 [LICENSE](../LICENSE) 文件。