Spaces:
Runtime error
Runtime error
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)
|