Spaces:
Runtime error
Runtime error
| # 油猴脚本动态挂载功能使用指南 | |
| ## 概述 | |
| 本功能允许您动态挂载油猴脚本来增强 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` 负责所有脚本相关操作 | |
| - **配置集成** - 与现有的配置系统无缝集成 | |
| - **错误恢复** - 脚本注入失败不会影响主要功能 | |
| - **日志记录** - 详细的操作日志便于调试 | |