AIstudioProxyAPI / docs /api-usage.md
lengfeng1360's picture
Upload 87 files
927965d verified
# 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 <endpoint_url>` 参数或 `.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)