# API 使用指南 本指南详细介绍如何使用 AI Studio Proxy API 的各种功能和端点。 ## 服务器配置 代理服务器默认监听在 `http://127.0.0.1:2048`。端口可以通过以下方式配置: - **环境变量**: 在 `.env` 文件中设置 `PORT=2048` 或 `DEFAULT_FASTAPI_PORT=2048` - **命令行参数**: 使用 `--server-port` 参数 - **GUI 启动器**: 在图形界面中直接配置端口 推荐使用 `.env` 文件进行配置管理,详见 [环境变量配置指南](environment-configuration.md)。 ## API 密钥配置 ### key.txt 文件配置 项目使用 `auth_profiles/key.txt` 文件来管理 API 密钥: **文件位置**: 项目根目录下的 `key.txt` 文件 **文件格式**: 每行一个 API 密钥,支持空行和注释 ``` your-api-key-1 your-api-key-2 # 这是注释行,会被忽略 another-api-key ``` **自动创建**: 如果 `key.txt` 文件不存在,系统会自动创建一个空文件 ### 密钥管理方法 #### 手动编辑文件 直接编辑 `key.txt` 文件添加或删除密钥: ```bash # 添加密钥 echo "your-new-api-key" >> key.txt # 查看当前密钥(注意安全) cat key.txt ``` #### 通过 Web UI 管理 在 Web UI 的"设置"标签页中可以: - 验证密钥有效性 - 查看服务器上配置的密钥列表(需要先验证) - 测试特定密钥 ### 密钥验证机制 **验证逻辑**: - 如果 `key.txt` 为空或不存在,则不需要 API 密钥验证 - 如果配置了密钥,则所有 API 请求都需要提供有效的密钥 - 密钥验证支持两种认证头格式 **安全特性**: - 密钥在日志中会被打码显示(如:`abcd****efgh`) - Web UI 中的密钥列表也会打码显示 - 支持最小长度验证(至少 8 个字符) ## API 认证流程 ### Bearer Token 认证 项目支持标准的 OpenAI 兼容认证方式: **主要认证方式** (推荐): ```bash Authorization: Bearer your-api-key ``` **备用认证方式** (向后兼容): ```bash X-API-Key: your-api-key ``` ### 认证行为 **无密钥配置时**: - 所有 API 请求都不需要认证 - `/api/info` 端点会显示 `"api_key_required": false` **有密钥配置时**: - 所有 `/v1/*` 路径的 API 请求都需要有效的密钥 - 除外路径:`/v1/models`, `/health`, `/docs` 等公开端点 - 认证失败返回 `401 Unauthorized` 错误 ### 客户端配置示例 #### curl 示例 ```bash # 使用 Bearer token curl -X POST http://127.0.0.1:2048/v1/chat/completions \ -H "Authorization: Bearer your-api-key" \ -H "Content-Type: application/json" \ -d '{"messages": [{"role": "user", "content": "Hello"}]}' # 使用 X-API-Key 头 curl -X POST http://127.0.0.1:2048/v1/chat/completions \ -H "X-API-Key: your-api-key" \ -H "Content-Type: application/json" \ -d '{"messages": [{"role": "user", "content": "Hello"}]}' ``` #### Python requests 示例 ```python import requests headers = { "Authorization": "Bearer your-api-key", "Content-Type": "application/json" } data = { "messages": [{"role": "user", "content": "Hello"}] } response = requests.post( "http://127.0.0.1:2048/v1/chat/completions", headers=headers, json=data ) ``` ## API 端点 ### 聊天接口 **端点**: `POST /v1/chat/completions` - 请求体与 OpenAI API 兼容,需要 `messages` 数组。 - `model` 字段现在用于指定目标模型,代理会尝试在 AI Studio 页面切换到该模型。如果为空或为代理的默认模型名,则使用 AI Studio 当前激活的模型。 - `stream` 字段控制流式 (`true`) 或非流式 (`false`) 输出。 - 现在支持 `temperature`, `max_output_tokens`, `top_p`, `stop` 等参数,代理会尝试在 AI Studio 页面上应用它们。 - **需要认证**: 如果配置了 API 密钥,此端点需要有效的认证头。 #### 示例 (curl, 非流式, 带参数) ```bash curl -X POST http://127.0.0.1:2048/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "gemini-1.5-pro-latest", "messages": [ {"role": "system", "content": "Be concise."}, {"role": "user", "content": "What is the capital of France?"} ], "stream": false, "temperature": 0.7, "max_output_tokens": 150, "top_p": 0.9, "stop": ["\n\nUser:"] }' ``` #### 示例 (curl, 流式, 带参数) ```bash curl -X POST http://127.0.0.1:2048/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "gemini-pro", "messages": [ {"role": "user", "content": "Write a short story about a cat."} ], "stream": true, "temperature": 0.9, "top_p": 0.95, "stop": [] }' --no-buffer ``` #### 示例 (Python requests) ```python import requests import json API_URL = "http://127.0.0.1:2048/v1/chat/completions" headers = {"Content-Type": "application/json"} data = { "model": "gemini-1.5-flash-latest", "messages": [ {"role": "user", "content": "Translate 'hello' to Spanish."} ], "stream": False, # or True for streaming "temperature": 0.5, "max_output_tokens": 100, "top_p": 0.9, "stop": ["\n\nHuman:"] } response = requests.post(API_URL, headers=headers, json=data, stream=data["stream"]) if data["stream"]: for line in response.iter_lines(): if line: decoded_line = line.decode('utf-8') if decoded_line.startswith('data: '): content = decoded_line[len('data: '):] if content.strip() == '[DONE]': print("\nStream finished.") break try: chunk = json.loads(content) delta = chunk.get('choices', [{}])[0].get('delta', {}) print(delta.get('content', ''), end='', flush=True) except json.JSONDecodeError: print(f"\nError decoding JSON: {content}") elif decoded_line.startswith('data: {'): # Handle potential error JSON try: error_data = json.loads(decoded_line[len('data: '):]) if 'error' in error_data: print(f"\nError from server: {error_data['error']}") break except json.JSONDecodeError: print(f"\nError decoding error JSON: {decoded_line}") else: if response.status_code == 200: print(json.dumps(response.json(), indent=2)) else: print(f"Error: {response.status_code}\n{response.text}") ``` ### 模型列表 **端点**: `GET /v1/models` - 返回 AI Studio 页面上检测到的可用模型列表,以及一个代理本身的默认模型条目。 - 现在会尝试从 AI Studio 动态获取模型列表。如果获取失败,会返回一个后备模型。 - 支持 [`excluded_models.txt`](../excluded_models.txt) 文件,用于从列表中排除特定的模型 ID。 - **🆕 脚本注入模型**: 如果启用了脚本注入功能,列表中还会包含通过油猴脚本注入的自定义模型,这些模型会标记为 `"injected": true`。 **脚本注入模型特点**: - 模型 ID 格式:注入的模型会自动移除 `models/` 前缀,如 `models/kingfall-ab-test` 变为 `kingfall-ab-test` - 标识字段:包含 `"injected": true` 字段用于识别 - 所有者标识:`"owned_by": "ai_studio_injected"` - 完全兼容:可以像普通模型一样通过 API 调用 **示例响应**: ```json { "object": "list", "data": [ { "id": "kingfall-ab-test", "object": "model", "created": 1703123456, "owned_by": "ai_studio_injected", "display_name": "👑 Kingfall", "description": "Kingfall model - Advanced reasoning capabilities", "injected": true } ] } ``` ### API 信息 **端点**: `GET /api/info` - 返回 API 配置信息,如基础 URL 和模型名称。 ### 健康检查 **端点**: `GET /health` - 返回服务器运行状态(Playwright, 浏览器连接, 页面状态, Worker 状态, 队列长度)。 ### 队列状态 **端点**: `GET /v1/queue` - 返回当前请求队列的详细信息。 ### 取消请求 **端点**: `POST /v1/cancel/{req_id}` - 尝试取消仍在队列中等待处理的请求。 ### API 密钥管理端点 #### 获取密钥列表 **端点**: `GET /api/keys` - 返回服务器上配置的所有 API 密钥列表 - **注意**: 服务器返回完整密钥,打码显示由 Web UI 前端处理 - **无需认证**: 此端点不需要 API 密钥认证 #### 测试密钥 **端点**: `POST /api/keys/test` - 验证指定的 API 密钥是否有效 - 请求体:`{"key": "your-api-key"}` - 返回:`{"success": true, "valid": true/false, "message": "..."}` - **无需认证**: 此端点不需要 API 密钥认证 #### 添加密钥 **端点**: `POST /api/keys` - 向服务器添加新的 API 密钥 - 请求体:`{"key": "your-new-api-key"}` - 密钥要求:至少 8 个字符,不能重复 - **无需认证**: 此端点不需要 API 密钥认证 #### 删除密钥 **端点**: `DELETE /api/keys` - 从服务器删除指定的 API 密钥 - 请求体:`{"key": "key-to-delete"}` - **无需认证**: 此端点不需要 API 密钥认证 ## 配置客户端 (以 Open WebUI 为例) 1. 打开 Open WebUI。 2. 进入 "设置" -> "连接"。 3. 在 "模型" 部分,点击 "添加模型"。 4. **模型名称**: 输入你想要的名字,例如 `aistudio-gemini-py`。 5. **API 基础 URL**: 输入代理服务器的地址,例如 `http://127.0.0.1:2048/v1` (如果服务器在另一台机器,用其 IP 替换 `127.0.0.1`,并确保端口可访问)。 6. **API 密钥**: 留空或输入任意字符 (服务器不验证)。 7. 保存设置。 8. 现在,你应该可以在 Open WebUI 中选择你在第一步中配置的模型名称并开始聊天了。如果之前配置过,可能需要刷新或重新选择模型以应用新的 API 基地址。 ## 重要提示 ### 三层响应获取机制与参数控制 - **响应获取优先级**: 项目采用三层响应获取机制,确保高可用性和最佳性能: 1. **集成流式代理服务 (Stream Proxy)**: - 默认启用,监听端口 `3120` (可通过 `.env` 文件的 `STREAM_PORT` 配置) - 提供最佳性能和稳定性,直接处理 AI Studio 请求 - 支持基础参数传递,无需浏览器交互 2. **外部 Helper 服务**: - 可选配置,通过 `--helper ` 参数或 `.env` 配置启用 - 需要有效的认证文件 (`auth_profiles/active/*.json`) 提取 `SAPISID` Cookie - 作为流式代理的备用方案 3. **Playwright 页面交互**: - 最终后备方案,通过浏览器自动化获取响应 - 支持完整的参数控制和模型切换 - 通过模拟用户操作(编辑/复制按钮)获取响应 - **参数控制详解**: - **流式代理模式**: 支持基础参数 (`model`, `temperature`, `max_tokens` 等),性能最优 - **Helper 服务模式**: 参数支持取决于外部 Helper 服务的具体实现 - **Playwright 模式**: 完整支持所有参数,包括 `temperature`, `max_output_tokens`, `top_p`, `stop`, `reasoning_effort`, `tools` 等 - **模型管理**: - API 请求中的 `model` 字段用于在 AI Studio 页面切换模型 - 支持动态模型列表获取和模型 ID 验证 - [`excluded_models.txt`](../excluded_models.txt) 文件可排除特定模型 ID - **🆕 脚本注入功能 v3.0**: - 使用 Playwright 原生网络拦截,100% 可靠性 - 直接从油猴脚本解析模型数据,无需配置文件维护 - 前后端模型数据完全同步,注入模型标记为 `"injected": true` - 详见 [脚本注入指南](script_injection_guide.md) ### 客户端管理历史 **客户端管理历史,代理不支持 UI 内编辑**: 客户端负责维护完整的聊天记录并将其发送给代理。代理服务器本身不支持在 AI Studio 界面中对历史消息进行编辑或分叉操作;它总是处理客户端发送的完整消息列表,然后将其发送到 AI Studio 页面。 ## 兼容性说明 ### Python 版本兼容性 - **推荐版本**: Python 3.10+ 或 3.11+ (生产环境推荐) - **最低要求**: Python 3.9 (所有功能完全支持) - **Docker 环境**: Python 3.10 (容器内默认版本) - **完全支持**: Python 3.9, 3.10, 3.11, 3.12, 3.13 - **依赖管理**: 使用 Poetry 管理,确保版本一致性 ### API 兼容性 - **OpenAI API**: 完全兼容 OpenAI v1 API 标准,支持所有主流客户端 - **FastAPI**: 基于 0.115.12 版本,包含最新性能优化和功能增强 - **HTTP 协议**: 支持 HTTP/1.1 和 HTTP/2,完整的异步处理 - **认证方式**: 支持 Bearer Token 和 X-API-Key 头部认证,OpenAI 标准兼容 - **流式响应**: 完整支持 Server-Sent Events (SSE) 流式输出 - **FastAPI**: 基于 0.111.0 版本,支持现代异步特性 - **HTTP 协议**: 支持 HTTP/1.1 和 HTTP/2 - **认证方式**: 支持 Bearer Token 和 X-API-Key 头部认证 ## 下一步 API 使用配置完成后,请参考: - [Web UI 使用指南](webui-guide.md) - [故障排除指南](troubleshooting.md) - [日志控制指南](logging-control.md)