# API 参数与 Capabilities 映射关系
**版本**: v1.0
**日期**: 2026-02-13
**目的**: 明确前端 API 参数与数据库 capabilities 配置的对应关系
---
## 📋 参数分类
### 1. 简单模式参数(Unified Parameters)
这些参数由**前端传递**,经过**适配器转换**为模型特定参数:
| 前端参数 | 类型 | 值域 | 转换目标 | 说明 |
|---------|------|------|---------|------|
| `resolution` (图片) | string | "512", "1024", "2048", "4096" | `width`, `height`, `size` | 短边像素值 |
| `resolution` (视频) | string | "480p", "720p", "1080p", "2k", "4k" | `width`, `height`, `size` | 分辨率档位 |
| `aspectRatio` | string | "1:1", "4:3", "16:9", "9:16" | `width`, `height`, `aspect_ratio` | 宽高比 |
| `quality` | string | "low", "medium", "high" | `quality`, `rendering_speed` | 质量档位 |
**检测条件**:
- **图片生成**:`resolution` AND `aspectRatio` 存在
- **视频生成**:`resolution` AND `aspectRatio` 存在
---
### 2. 高级模式参数(Model-Specific Parameters)
这些参数直接传递给模型,**不经过适配器**:
#### 图片模型参数
| API 参数 | capabilities 字段 | 类型 | 说明 | 示例值 |
|---------|------------------|------|------|--------|
| `width` | `size` | integer | 宽度(像素) | 1024 |
| `height` | `size` | integer | 高度(像素) | 1024 |
| `style` | - | string | 风格(前端自定义) | "realistic" |
| `outputFormat` | `output_format` | string | 输出格式 | "png", "jpeg", "webp" |
| `inputFidelity` | `input_fidelity` | string | 输入保真度(OpenAI) | "high", "low" |
| `moderation` | `moderation` | string | 内容审核(OpenAI) | "auto", "low" |
| `watermark` | `watermark` | boolean | 水印(Qwen/Doubao) | true, false |
| `seed` | `seed` | integer | 随机种子 | 0-2147483647 |
| `numImages` | `n` | integer | 生成数量 | 1-10 |
| `safetyTolerance` | `safety_tolerance` | integer | 安全容忍度(Flux) | 0-6 |
| `raw` | `raw` | boolean | 原始模式(Flux) | true, false |
| `guidance` | `guidance` | float | 引导强度(iRAG) | 0.0-10.0 |
| `renderingSpeed` | `rendering_speed` | string | 渲染速度(Ideogram) | "QUALITY", "FAST" |
| `sequentialImageGeneration` | `sequential_image_generation` | string | 连续生成(Doubao) | "auto", "disabled" |
#### 视频模型参数
| API 参数 | capabilities 字段 | 类型 | 说明 | 示例值 |
|---------|------------------|------|------|--------|
| `width` | `size` | integer | 宽度(像素) | 1280 |
| `height` | `size` | integer | 高度(像素) | 720 |
| `duration` | `seconds` | integer | 时长(秒) | 5, 10 |
| `fps` | - | integer | 帧率 | 30 |
| `videoMode` | `video_mode` | string | 视频模式(Wan) | "t2v", "i2v" |
---
### 3. 通用参数(Common Parameters)
这些参数在**所有模式**下都存在:
| API 参数 | 说明 | 是否必传 |
|---------|------|---------|
| `model` | 模型名称 | ✅ 是 |
| `prompt` | 提示词 | 图片必传,视频可选 |
| `imageUrl` | 参考图片 URL | ❌ 否(图生图/图生视频) |
| `projectId` | 项目 ID | ❌ 否 |
| `storyboardId` | 分镜 ID | ❌ 否 |
---
## 🔄 参数流转关系
### 流程图
```mermaid
graph LR
A[前端传参] --> B{检测参数类型}
B -->|有 resolution
+ aspectRatio| C[简单模式]
B -->|仅 width/height
等模型参数| D[高级模式]
C --> E[适配器转换]
E --> F{模型类型}
F -->|Sora| G[SoraAdapter]
F -->|Veo| H[VeoAdapter]
F -->|Flux| I[FluxAdapter]
F -->|其他| J[对应适配器]
G --> K[转换为模型参数]
H --> K
I --> K
J --> K
D --> L[直接传递]
K --> M[AIHubMixProvider]
L --> M
M --> N[读取 capabilities]
N --> O[capability_transformer]
O --> P[调用 AIHubMix API]
```
---
## ⚠️ 当前问题
### 问题 1: 参数检测不完整
**现状**:
```python
# ai_service.py (第 177 行)
if resolution and aspect_ratio:
# 简单模式
```
**问题**:
- 仅检测 `resolution` 和 `aspect_ratio`
- 忽略了 `quality` 参数
- 无法处理"仅传 resolution"或"仅传 aspectRatio"的情况
**建议修正**:
```python
# 方案 1: 严格检测(推荐)
if resolution and aspect_ratio:
# 简单模式(resolution + aspectRatio 必须同时存在)
# 方案 2: 宽松检测
if resolution or aspect_ratio or quality:
# 只要有任一简单模式参数即认为是简单模式
# 缺失的参数使用默认值
```
---
### 问题 2: 高级参数未传递
**现状**:
- Schema 定义了很多高级参数(`watermark`, `seed`, `output_format` 等)
- 但这些参数可能没有正确传递到 `AIService` 或 `Provider`
**检查点**:
1. ✅ Schema 是否定义了参数?
2. ❓ API 路由是否正确接收并传递?
3. ❓ AIService 是否在 `**kwargs` 中接收?
4. ❓ AIHubMixProvider 是否正确使用?
---
### 问题 3: Capabilities 参数未验证
**现状**:
- 数据库 `capabilities` 定义了参数的合法值(如 `quality: ['low', 'medium', 'high']`)
- 但 API 层可能没有验证用户输入是否符合 capabilities 约束
**建议**:
```python
# 在 AIService 中验证参数
def validate_params_against_capabilities(model_name: str, params: dict):
"""根据 capabilities 验证参数合法性"""
model = await get_model(model_name)
capabilities = model.capabilities
# 验证 quality
if 'quality' in params:
allowed = capabilities.get('quality', {}).get('values', [])
if params['quality'] not in allowed:
raise ValueError(f"Invalid quality: {params['quality']}, allowed: {allowed}")
# 验证 size
# 验证 n
# ...
```
---
## 📝 建议改进方案
### 方案 1: 完善参数检测(优先级:高)
**目标**:正确区分简单模式和高级模式
**实施**:
1. 更新 `ai_service.py` 中的检测逻辑
2. 明确简单模式触发条件
3. 添加参数日志输出
```python
# 简单模式检测(推荐)
is_simple_mode = bool(kwargs.get('resolution') and kwargs.get('aspect_ratio'))
if is_simple_mode:
logger.info("🎯 检测到简单模式:resolution=%s, aspectRatio=%s, quality=%s",
kwargs.get('resolution'),
kwargs.get('aspect_ratio'),
kwargs.get('quality', 'default'))
# 使用适配器
else:
logger.info("🔧 使用高级模式:width=%s, height=%s, 其他参数=%s",
kwargs.get('width'),
kwargs.get('height'),
{k: v for k, v in kwargs.items() if k not in ['width', 'height']})
# 直接传递
```
---
### 方案 2: 参数验证层(优先级:中)
**目标**:确保用户输入符合 capabilities 约束
**实施**:
1. 创建 `param_validator.py`
2. 在 API 层或 Service 层调用验证
3. 返回友好的错误提示
```python
class ParamValidator:
@staticmethod
async def validate_image_params(model_name: str, params: dict):
"""验证图片生成参数"""
model = await get_model_by_name(model_name)
if not model or not model.capabilities:
raise ValueError(f"Model {model_name} capabilities not found")
caps = model.capabilities
# 验证 quality
if 'quality' in params:
allowed = caps.get('quality', {}).get('values', [])
if params['quality'] not in allowed:
raise ValueError(
f"Invalid quality '{params['quality']}' for {model_name}. "
f"Allowed values: {', '.join(allowed)}"
)
# 验证 size
# 验证 n
# ...
return True
```
---
### 方案 3: 完善 Schema 定义(优先级:低)
**目标**:在 Schema 层添加更多高级参数
**示例**:
```python
class GenerateImageRequest(BaseModel):
# ... 现有参数 ...
# 新增高级参数
output_format: Optional[Literal["png", "jpeg", "webp"]] = Field(
None,
description="输出格式(高级模式)",
alias="outputFormat"
)
seed: Optional[int] = Field(
None,
description="随机种子(高级模式)",
ge=0,
le=2147483647
)
watermark: Optional[bool] = Field(
None,
description="是否添加水印(Qwen/Doubao)"
)
# ...
```
---
## ✅ 总结
| 参数类别 | 数量 | 检测状态 | 建议 |
|---------|------|---------|------|
| 简单模式参数 | 3 | ⚠️ 部分检测(仅 2 个) | 完善检测逻辑 |
| 高级图片参数 | 12+ | ❓ 未知 | 检查传递链路 |
| 高级视频参数 | 6+ | ❓ 未知 | 检查传递链路 |
| 通用参数 | 5 | ✅ 已实现 | - |
**下一步行动**:
1. ✅ 明确简单模式参数检测条件(`resolution` AND `aspectRatio`)
2. ⚠️ 验证高级参数是否正确传递
3. ⚠️ 实现参数验证层(可选)
4. ⚠️ 补充 Schema 定义(可选)
---
**维护人**: Claude
**最后更新**: 2026-02-13