Spaces:
Runtime error
Runtime error
File size: 8,872 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 |
# 油猴脚本动态挂载功能使用指南
## 概述
本功能允许您动态挂载油猴脚本来增强 AI Studio 的模型列表,支持自定义模型注入和配置管理。脚本更新后只需重启服务即可生效,无需手动修改代码。
**⚠️ 重要更新 (v3.0)**:
- **革命性改进** - 使用 Playwright 原生网络拦截,彻底解决时序和可靠性问题
- **双重保障** - Playwright 路由拦截 + JavaScript 脚本注入,确保万无一失
- **完全改变工作机制** - 现在直接从油猴脚本解析模型列表
- **移除配置文件依赖** - 不再需要手动维护模型配置文件
- **自动同步** - 前端和后端使用相同的模型数据源
- **无适配负担** - 油猴脚本更新时无需手动更新配置
## 功能特性
- ✅ **Playwright 原生拦截** - 使用 Playwright 路由拦截,100% 可靠
- ✅ **双重保障机制** - 网络拦截 + 脚本注入,确保万无一失
- ✅ **直接脚本解析** - 从油猴脚本中自动解析模型列表
- ✅ **前后端同步** - 前端和后端使用相同的模型数据源
- ✅ **零配置维护** - 无需手动维护模型配置文件
- ✅ **自动适配** - 脚本更新时自动获取新的模型列表
- ✅ **灵活配置** - 支持环境变量配置
- ✅ **静默失败** - 脚本文件不存在时静默跳过,不影响主要功能
## 配置说明
### 环境变量配置
在 `.env` 文件中添加以下配置:
```bash
# 是否启用脚本注入功能
ENABLE_SCRIPT_INJECTION=true
# 油猴脚本文件路径(相对于项目根目录)
# 模型数据直接从此脚本文件中解析,无需额外配置文件
USERSCRIPT_PATH=browser_utils/more_modles.js
```
### 工作原理说明
**新的工作机制 (v2.0)**:
```
油猴脚本 → 前端直接注入 + 后端解析模型列表 → API同步
```
1. **前端**: 直接注入原始油猴脚本到浏览器页面
2. **后端**: 解析脚本中的 `MODELS_TO_INJECT` 数组
3. **同步**: 将解析出的模型添加到API模型列表
**优势**:
- ✅ **单一数据源** - 模型数据直接从油猴脚本解析,无需配置文件
- ✅ **自动同步** - 脚本更新时自动获取新模型,保持前后端一致
- ✅ **完美适配** - 与油猴脚本显示效果100%一致(emoji、版本号等)
- ✅ **零维护成本** - 无需为脚本更新做任何适配工作
## 使用方法
### 1. 启用脚本注入
确保在 `.env` 文件中设置:
```bash
ENABLE_SCRIPT_INJECTION=true
```
### 2. 准备脚本文件 (必需)
将您的油猴脚本放在 `browser_utils/more_modles.js`(或您在 `USERSCRIPT_PATH` 中指定的路径)。
**⚠️ 脚本文件必须存在,否则不会执行任何注入操作。**
### 3. 启动服务
正常启动 AI Studio Proxy 服务,系统将:
1. **前端注入** - 直接将油猴脚本注入到浏览器页面
2. **后端解析** - 自动解析脚本中的模型列表
3. **API同步** - 将解析出的模型添加到API响应中
**就这么简单!** 无需任何配置文件维护。
### 4. 验证注入效果
- **前端**: 在AI Studio页面上可以看到注入的模型
- **API**: 通过 `/v1/models` 端点可以获取包含注入模型的完整列表
**注意**: 如果脚本文件不存在,系统会静默跳过注入操作,不会显示错误信息。
### 🚀 革命性改进 (v3.0)
**问题**: JavaScript 脚本拦截存在时序问题和浏览器安全限制,可能无法可靠地拦截网络请求。
**解决方案**: 使用 Playwright 原生的网络拦截功能 (`context.route()`),在网络层面直接拦截和修改响应,彻底解决可靠性问题。
**技术细节**:
- 使用 `context.route("**/*", handler)` 拦截所有请求
- 在网络层面识别和修改模型列表响应
- 不依赖浏览器 JavaScript 环境
- 同时保留脚本注入作为备用方案
**核心优势**:
- 🎯 **100% 可靠** - 不受浏览器安全策略影响
- ⚡ **更早拦截** - 在网络层面拦截,比 JavaScript 更早
- 🛡️ **双重保障** - 网络拦截 + 脚本注入,确保万无一失
## 工作原理
### 🔄 双重拦截机制
1. **启用检查** - 检查 `ENABLE_SCRIPT_INJECTION` 环境变量
2. **脚本存在性验证** - 检查油猴脚本文件是否存在
3. **Playwright 路由拦截** - 使用 `context.route()` 拦截所有网络请求
4. **模型列表请求识别** - 检测包含 `alkalimakersuite` 和 `ListModels` 的请求
5. **响应修改** - 直接修改模型列表响应,注入自定义模型
6. **脚本注入备用** - 同时注入 JavaScript 脚本作为备用方案
7. **后端解析** - 使用JSON解析技术解析脚本中的 `MODELS_TO_INJECT` 数组
8. **API集成** - 将解析出的模型(保留原始emoji和版本信息)添加到后端模型列表
### 🎯 技术优势
- ✅ **Playwright 原生拦截** - 不受浏览器安全限制,100% 可靠
- ✅ **更早的拦截时机** - 在网络层面拦截,比 JavaScript 更早
- ✅ **双重保障** - 网络拦截失败时,JavaScript 脚本作为备用
- ✅ **单一数据源** - 油猴脚本是唯一的模型定义源
- ✅ **自动同步** - 前端和后端自动保持一致
- ✅ **零维护** - 脚本更新时无需任何手动操作
- ✅ **向后兼容** - 支持现有的油猴脚本格式
## 重要说明 ⚠️
### 前端和后端双重注入
本功能实现了**前端和后端的双重模型注入**:
1. **前端注入** - 油猴脚本在浏览器页面上显示注入的模型
2. **后端注入** - API服务器的模型列表也包含注入的模型
这确保了:
- ✅ 在AI Studio页面上可以看到注入的模型
- ✅ 通过API调用时可以使用注入的模型
- ✅ 前端显示和后端API保持一致
### 模型调用说明
注入的模型可以正常通过API调用,例如:
```bash
curl -X POST http://localhost:2048/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-api-key" \
-d '{
"model": "kingfall-ab-test",
"messages": [{"role": "user", "content": "Hello"}]
}'
```
## 日志输出
启用脚本注入后,您将在日志中看到类似输出:
```
# 网络拦截相关日志
设置网络拦截和脚本注入...
成功设置模型列表网络拦截
成功解析 6 个模型从油猴脚本
# 模型列表响应处理时的日志
捕获到潜在的模型列表响应来自: https://alkalimakersuite.googleapis.com/...
添加了 6 个注入的模型到API模型列表
成功解析和更新模型列表。总共解析模型数: 12
# 解析出的模型示例
👑 Kingfall (Script v1.6)
✨ Gemini 2.5 Pro 03-25 (Script v1.6)
🦁 Goldmane (Script v1.6)
```
## 故障排除
### 脚本注入失败
1. **检查文件路径** - 确保 `USERSCRIPT_PATH` 指向的文件存在
2. **检查文件权限** - 确保脚本文件可读
3. **查看日志** - 检查详细的错误信息
### 模型解析失败
1. **脚本格式** - 确保油猴脚本中的 `MODELS_TO_INJECT` 数组格式正确
2. **必需字段** - 确保每个模型都有 `name` 和 `displayName` 字段
3. **JavaScript语法** - 确保脚本文件是有效的JavaScript格式
### 禁用脚本注入
如果遇到问题,可以临时禁用脚本注入:
```bash
ENABLE_SCRIPT_INJECTION=false
```
## 高级用法
### 自定义脚本路径
您可以使用不同的脚本文件:
```bash
USERSCRIPT_PATH=custom_scripts/my_script.js
```
### 多套脚本
通过修改 `USERSCRIPT_PATH` 可以使用不同的油猴脚本:
```bash
USERSCRIPT_PATH=custom_scripts/production_models.js
```
### 版本管理
系统会自动解析脚本中的版本信息,保持与油猴脚本完全一致的显示效果,包括emoji和版本标识。
## 注意事项
1. **重启生效** - 脚本文件更新后需要重启服务
2. **浏览器缓存** - 如果模型列表没有更新,尝试刷新页面或清除浏览器缓存
3. **兼容性** - 确保您的油猴脚本与当前的 AI Studio 页面结构兼容
4. **性能影响** - 大量模型注入可能影响页面加载性能
5. **显示一致性** - 系统确保前端显示与油猴脚本效果100%一致
## 示例配置
完整的 `.env` 配置示例:
```bash
# 基础配置
PORT=2048
ENABLE_SCRIPT_INJECTION=true
# 脚本配置
USERSCRIPT_PATH=browser_utils/more_modles.js
# 其他配置...
```
## 技术细节
- **脚本管理器类** - `ScriptManager` 负责所有脚本相关操作
- **配置集成** - 与现有的配置系统无缝集成
- **错误恢复** - 脚本注入失败不会影响主要功能
- **日志记录** - 详细的操作日志便于调试
|