File size: 11,989 Bytes
927965d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
351
352
353
354
355
356
357
# 高级配置指南

本文档介绍项目的高级配置选项和功能。

## 代理配置管理

### 代理配置优先级

项目采用统一的代理配置管理系统,按以下优先级顺序确定代理设置:

1. **`--internal-camoufox-proxy` 命令行参数** (最高优先级)
   - 明确指定代理:`--internal-camoufox-proxy 'http://127.0.0.1:7890'`
   - 明确禁用代理:`--internal-camoufox-proxy ''`
2. **`UNIFIED_PROXY_CONFIG` 环境变量** (推荐,.env 文件配置)
3. **`HTTP_PROXY` 环境变量**

4. **`HTTPS_PROXY` 环境变量**
5. **系统代理设置** (Linux 下的 gsettings,最低优先级)

**推荐配置方式**:
```env

# .env 文件中统一配置代理

UNIFIED_PROXY_CONFIG=http://127.0.0.1:7890

# 或禁用代理

UNIFIED_PROXY_CONFIG=

```

### 统一代理配置

此代理配置会同时应用于 Camoufox 浏览器和流式代理服务的上游连接,确保整个系统的代理行为一致。

## 响应获取模式配置

### 模式1: 优先使用集成的流式代理 (默认推荐)

**推荐使用 .env 配置方式**:
```env

# .env 文件配置

DEFAULT_FASTAPI_PORT=2048

STREAM_PORT=3120

UNIFIED_PROXY_CONFIG=

```

```bash

# 简化启动命令 (推荐)

python launch_camoufox.py --headless



# 传统命令行方式 (仍然支持)

python launch_camoufox.py --headless --server-port 2048 --stream-port 3120 --helper '' --internal-camoufox-proxy ''

```

# 启用统一代理配置(同时应用于浏览器和流式代理)
python launch_camoufox.py --headless --server-port 2048 --stream-port 3120 --helper '' --internal-camoufox-proxy 'http://127.0.0.1:7890'

```



在此模式下,主服务器会优先尝试通过端口 `3120` (或指定的 `--stream-port`) 上的集成流式代理获取响应。如果失败,则回退到 Playwright 页面交互。



### 模式2: 优先使用外部 Helper 服务 (禁用集成流式代理)



```bash

# 基本外部Helper模式,明确禁用代理

python launch_camoufox.py --headless --server-port 2048 --stream-port 0 --helper 'http://your-helper-service.com/api/getStreamResponse' --internal-camoufox-proxy ''

# 外部Helper模式 + 统一代理配置
python launch_camoufox.py --headless --server-port 2048 --stream-port 0 --helper 'http://your-helper-service.com/api/getStreamResponse' --internal-camoufox-proxy 'http://127.0.0.1:7890'

```



在此模式下,主服务器会优先尝试通过 `--helper` 指定的端点获取响应 (需要有效的 `auth_profiles/active/*.json` 以提取 `SAPISID`)。如果失败,则回退到 Playwright 页面交互。



### 模式3: 仅使用 Playwright 页面交互 (禁用所有流式代理和 Helper)



```bash

# 纯Playwright模式,明确禁用代理

python launch_camoufox.py --headless --server-port 2048 --stream-port 0 --helper '' --internal-camoufox-proxy ''



# Playwright模式 + 统一代理配置

python launch_camoufox.py --headless --server-port 2048 --stream-port 0 --helper '' --internal-camoufox-proxy 'http://127.0.0.1:7890'

```



在此模式下,主服务器将仅通过 Playwright 与 AI Studio 页面交互 (模拟点击"编辑"或"复制"按钮) 来获取响应。这是传统的后备方法。



## 虚拟显示模式 (Linux)



### 关于 `--virtual-display`



- **为什么使用**: 与标准的无头模式相比,虚拟显示模式通过创建一个完整的虚拟 X 服务器环境 (Xvfb) 来运行浏览器。这可以模拟一个更真实的桌面环境,从而可能进一步降低被网站检测为自动化脚本或机器人的风险

- **什么时候使用**: 当您在 Linux 环境下运行,并且希望以无头模式操作

- **如何使用**:

  1. 确保您的 Linux 系统已安装 `xvfb`

  2. 在运行时添加 `--virtual-display` 标志:

     ```bash

     python launch_camoufox.py --virtual-display --server-port 2048 --stream-port 3120 --internal-camoufox-proxy ''

     ```



## 流式代理服务配置



### 自签名证书管理



集成的流式代理服务会在 `certs` 文件夹内生成自签名的根证书。



#### 证书删除与重新生成



- 可以删除 `certs` 目录下的根证书 (`ca.crt`, `ca.key`),代码会在下次启动时重新生成

- **重要**: 删除根证书时,**强烈建议同时删除 `certs` 目录下的所有其他文件**,避免信任链错误



#### 手动生成证书



如果需要重新生成证书,可以使用以下命令:



```bash

openssl genrsa -out certs/ca.key 2048

openssl req -new -x509 -days 3650 -key certs/ca.key -out certs/ca.crt -subj "/C=CN/ST=Shanghai/L=Shanghai/O=AiStudioProxyHelper/OU=CA/CN=AiStudioProxyHelper CA/emailAddress=ca@example.com"

openssl rsa -in certs/ca.key -out certs/ca.key

```



### 工作原理



流式代理服务的特性:



- 创建一个 HTTP 代理服务器(默认端口:3120)

- 拦截针对 Google 域名的 HTTPS 请求

- 使用自签名 CA 证书动态自动生成服务器证书

- 将 AIStudio 响应解析为 OpenAI 兼容格式



## 模型排除配置



### excluded_models.txt



项目根目录下的 `excluded_models.txt` 文件可用于从 `/v1/models` 端点返回的列表中排除特定的模型 ID。



每行一个模型ID,例如:

```

gemini-1.0-pro

gemini-1.0-pro-vision

deprecated-model-id

```



## 脚本注入高级配置 🆕



### 概述



脚本注入功能允许您动态挂载油猴脚本来增强 AI Studio 的模型列表。该功能使用 Playwright 原生网络拦截技术,确保 100% 可靠性。



### 工作原理



1. **双重拦截机制**
   - **Playwright 路由拦截**:在网络层面直接拦截和修改模型列表响应

   - **JavaScript 脚本注入**:作为备用方案,确保万无一失



2. **自动模型解析**
   - 从油猴脚本中自动解析 `MODELS_TO_INJECT` 数组

   - 前端和后端使用相同的模型数据源

   - 无需手动维护模型配置文件



### 高级配置选项



#### 自定义脚本路径



```env

# 使用自定义脚本文件

USERSCRIPT_PATH=custom_scripts/my_enhanced_script.js

```



#### 自定义脚本配置



```env

# 使用自定义脚本文件(模型数据直接从脚本解析)

USERSCRIPT_PATH=configs/production_script.js

```



#### 调试模式



```env

# 启用详细的脚本注入日志

DEBUG_LOGS_ENABLED=true

ENABLE_SCRIPT_INJECTION=true

```



### 自定义脚本开发



#### 脚本格式要求



您的自定义脚本必须包含 `MODELS_TO_INJECT` 数组:



```javascript

const MODELS_TO_INJECT = [

    {

        name: 'models/your-custom-model',

        displayName: '🚀 Your Custom Model',

        description: 'Custom model description'

    },

    // 更多模型...

];

```



#### 脚本模型数组格式



```javascript

const MODELS_TO_INJECT = [

    {

        name: 'models/custom-model-1',

        displayName: `🎯 Custom Model 1 (Script ${SCRIPT_VERSION})`,

        description: `First custom model injected by script ${SCRIPT_VERSION}`

    },

    {

        name: 'models/custom-model-2',

        displayName: `⚡ Custom Model 2 (Script ${SCRIPT_VERSION})`,

        description: `Second custom model injected by script ${SCRIPT_VERSION}`

    }

];

```

```



### 网络拦截技术细节



#### Playwright 路由拦截



```javascript

// 系统会自动设置类似以下的路由拦截

await context.route("**/*", async (route) => {

    const request = route.request();

    if (request.url().includes('alkalimakersuite') &&

        request.url().includes('ListModels')) {

        // 拦截并修改模型列表响应

        const response = await route.fetch();

        const modifiedBody = await modifyModelListResponse(response);

        await route.fulfill({ response, body: modifiedBody });

    } else {

        await route.continue_();

    }

});

```



#### 响应修改流程



1. **请求识别**:检测包含 `alkalimakersuite` 和 `ListModels` 的请求

2. **响应获取**:获取原始模型列表响应

3. **数据解析**:解析 JSON 响应并处理反劫持前缀

4. **模型注入**:将自定义模型注入到响应中

5. **响应返回**:返回修改后的响应给浏览器



### 故障排除



#### 脚本注入失败



1. **检查脚本文件**:

   ```bash

   # 验证脚本文件存在且可读

   ls -la browser_utils/more_modles.js

   cat browser_utils/more_modles.js | head -20

   ```



2. **检查日志输出**:

   ```bash

   # 查看脚本注入相关日志

   python launch_camoufox.py --debug | grep -i "script\|inject"

   ```



3. **验证配置**:

   ```bash

   # 检查环境变量配置

   grep SCRIPT .env

   ```



#### 模型未显示



1. **前端检查**:在浏览器开发者工具中查看是否有 JavaScript 错误

2. **后端检查**:查看 API 响应是否包含注入的模型

3. **网络检查**:确认网络拦截是否正常工作



### 性能优化



#### 脚本缓存



系统会自动缓存解析的模型列表,避免重复解析:



```python

# 系统内部缓存机制

if not hasattr(self, '_cached_models'):

    self._cached_models = parse_userscript_models(script_content)

return self._cached_models

```



#### 网络拦截优化



- 只拦截必要的请求,其他请求直接通过

- 使用高效的 JSON 解析和序列化

- 最小化响应修改的开销



### 安全考虑



#### 脚本安全



- 脚本在受控的浏览器环境中执行

- 不会影响主机系统安全

- 建议只使用可信的脚本源



#### 网络安全



- 网络拦截仅限于特定的模型列表请求

- 不会拦截或修改其他敏感请求

- 所有修改都在本地进行,不会发送到外部服务器



## GUI 启动器高级功能



### 本地LLM模拟服务



GUI 集成了启动和管理一个本地LLM模拟服务的功能:



- **功能**: 监听 `11434` 端口,模拟部分 Ollama API 端点和 OpenAI 兼容的 `/v1/chat/completions` 端点

- **启动**: 在 GUI 的"启动选项"区域,点击"启动本地LLM模拟服务"按钮

- **依赖检测**: 启动前会自动检测 `localhost:2048` 端口是否可用

- **用途**: 主要用于测试客户端与 Ollama 或 OpenAI 兼容 API 的对接



### 端口进程管理



GUI 提供端口进程管理功能:



- 查询指定端口上当前正在运行的进程

- 选择并尝试停止在指定端口上找到的进程

- 手动输入 PID 终止进程



## 环境变量配置



### 代理配置



```bash

# 使用环境变量配置代理(不推荐,建议明确指定)

export HTTP_PROXY=http://127.0.0.1:7890

export HTTPS_PROXY=http://127.0.0.1:7890

python launch_camoufox.py --headless --server-port 2048 --stream-port 3120 --helper ''

```



### 日志控制



详见 [日志控制指南](logging-control.md)。



## 重要提示



### 代理配置建议



**强烈建议在所有 `launch_camoufox.py` 命令中明确指定 `--internal-camoufox-proxy` 参数,即使其值为空字符串 (`''`),以避免意外使用系统环境变量中的代理设置。**

### 参数控制限制

API 请求中的模型参数(如 `temperature`, `max_output_tokens`, `top_p`, `stop`**仅在通过 Playwright 页面交互获取响应时生效**。当使用集成的流式代理或外部 Helper 服务时,这些参数的传递和应用方式取决于这些服务自身的实现。

### 首次访问性能

当通过流式代理首次访问一个新的 HTTPS 主机时,服务需要为该主机动态生成并签署一个新的子证书。这个过程可能会比较耗时,导致对该新主机的首次连接请求响应较慢。一旦证书生成并缓存后,后续访问同一主机将会显著加快。

## 下一步

高级配置完成后,请参考:
- [脚本注入指南](script_injection_guide.md) - 详细的脚本注入功能使用说明
- [日志控制指南](logging-control.md)
- [故障排除指南](troubleshooting.md)