AIstudioProxyAPI / docs /advanced-configuration.md
lengfeng1360's picture
Upload 87 files
927965d verified
# 高级配置指南
本文档介绍项目的高级配置选项和功能。
## 代理配置管理
### 代理配置优先级
项目采用统一的代理配置管理系统,按以下优先级顺序确定代理设置:
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)