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 文件中统一配置代理
UNIFIED_PROXY_CONFIG=http://127.0.0.1:7890
# 或禁用代理
UNIFIED_PROXY_CONFIG=

统一代理配置

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

响应获取模式配置

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

推荐使用 .env 配置方式:

# .env 文件配置
DEFAULT_FASTAPI_PORT=2048
STREAM_PORT=3120
UNIFIED_PROXY_CONFIG=
# 简化启动命令 (推荐)
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)

# 纯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 标志:
      python launch_camoufox.py --virtual-display --server-port 2048 --stream-port 3120 --internal-camoufox-proxy ''
      

流式代理服务配置

自签名证书管理

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

证书删除与重新生成

  • 可以删除 certs 目录下的根证书 (ca.crt, ca.key),代码会在下次启动时重新生成
  • 重要: 删除根证书时,强烈建议同时删除 certs 目录下的所有其他文件,避免信任链错误

手动生成证书

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

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 数组
    • 前端和后端使用相同的模型数据源
    • 无需手动维护模型配置文件

高级配置选项

自定义脚本路径

# 使用自定义脚本文件
USERSCRIPT_PATH=custom_scripts/my_enhanced_script.js

自定义脚本配置

# 使用自定义脚本文件(模型数据直接从脚本解析)
USERSCRIPT_PATH=configs/production_script.js

调试模式

# 启用详细的脚本注入日志
DEBUG_LOGS_ENABLED=true
ENABLE_SCRIPT_INJECTION=true

自定义脚本开发

脚本格式要求

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

const MODELS_TO_INJECT = [
    {
        name: 'models/your-custom-model',
        displayName: '🚀 Your Custom Model',
        description: 'Custom model description'
    },
    // 更多模型...
];

脚本模型数组格式

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. 请求识别:检测包含 alkalimakersuiteListModels 的请求
  2. 响应获取:获取原始模型列表响应
  3. 数据解析:解析 JSON 响应并处理反劫持前缀
  4. 模型注入:将自定义模型注入到响应中
  5. 响应返回:返回修改后的响应给浏览器

故障排除

脚本注入失败

  1. 检查脚本文件

    # 验证脚本文件存在且可读
    ls -la browser_utils/more_modles.js
    cat browser_utils/more_modles.js | head -20
    
  2. 检查日志输出

    # 查看脚本注入相关日志
    python launch_camoufox.py --debug | grep -i "script\|inject"
    
  3. 验证配置

    # 检查环境变量配置
    grep SCRIPT .env
    

模型未显示

  1. 前端检查:在浏览器开发者工具中查看是否有 JavaScript 错误
  2. 后端检查:查看 API 响应是否包含注入的模型
  3. 网络检查:确认网络拦截是否正常工作

性能优化

脚本缓存

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

# 系统内部缓存机制
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 终止进程

环境变量配置

代理配置

# 使用环境变量配置代理(不推荐,建议明确指定)
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 ''

日志控制

详见 日志控制指南

重要提示

代理配置建议

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

参数控制限制

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

首次访问性能

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

下一步

高级配置完成后,请参考: