6.9 KiB
6.9 KiB
Context
当前标准 Kling 视频接口具有两个明显特征:
- 提交动作分为:
POST /kling/v1/videos/text2videoPOST /kling/v1/videos/image2video
- 真正执行版本通过请求体
model_name指定,而不是通过发现到的能力 ID 直接调用
同时,运行时发现已经能够识别出能力型视频标识,例如:
kling_videokling_imagekling_effectskling_extendkling_lip_synckling_virtual_try_on
这说明 Kling 与 Suno 有相似的结构特征:
- 发现层暴露的是能力入口
- 执行层需要额外版本字段
但当前标准 Kling adapter 仍然主要围绕版本型模型 ID 运转,例如 kling-v1-6。这让以下几层出现语义错位:
- discovery 发现的是能力
- selector 选中的可能是能力
- adapter 执行时却把
model理解为可直接提交的执行版本
此外,标准 Kling 视频与 kling-video-o1、kling-video-o1-edit 不是同一条协议语义:
- 标准 Kling 视频走
/kling/v1/videos/{action} o1系列是另一类特例模型,不应被标准 Kling 能力路由误吞
Goals / Non-Goals
- Goals:
- 让标准 Kling 视频沿用 Suno 式“能力入口 + 执行版本”模式
- 让
kling_video成为标准 Kling 视频的一等能力模型 - 让
model_name成为标准 Kling 视频的执行版本字段 - 让
text2video / image2video的版本限制显式建模 - 保持旧版本型模型 ID 的兼容,避免历史任务和用户设置立刻失效
- Non-Goals:
- 本次不抽象所有 Kling 能力为统一多动作产品面板
- 本次不处理
o1系列的专用协议 - 本次不一次性把所有 Kling 高级字段做成复杂 UI 控件
Decisions
-
Decision: 区分标准 Kling 能力模型和执行版本
kling_video表示标准 Kling 视频能力入口model_name表示具体执行版本,例如kling-v3- 发现层与选择层优先使用
kling_video - 执行层始终向标准接口提交
model_name
-
Decision: action 继续由请求语义决定,而不是再拆成两个能力模型
- 显式传入
klingAction2时优先使用 - 否则:
- 有参考图 =>
image2video - 无参考图 =>
text2video
- 有参考图 =>
- 显式传入
-
Decision: 版本合法性绑定到 action
text2video的可选版本:kling-v3kling-v2-6kling-v2-1kling-v1-6kling-v1-5
image2video的可选版本:kling-v3kling-v2-6kling-v2-1kling-v1-6kling-v1-5
-
Decision: 历史版本型模型 ID 作为兼容输入,而不是主路径
- 若请求模型为
kling-v1-5或kling-v1-6 - 运行时仍允许提交
- 但内部按“标准 Kling 能力 + 指定 model_name”解释
- 若请求模型为
-
Decision:
o1系列与标准 Kling 视频能力显式隔离kling-video-o1kling-video-o1-edit- 不参与标准
kling.videobinding 推断 - 不复用
/kling/v1/videos/{action}的标准版本校验
-
Decision: UI 先暴露最小必要版本选择
- 第一阶段保证用户可以为标准 Kling 能力选择:
model_nameklingAction2modecfg_scalenegative_prompt
camera_control通过平铺字段纳入参数体系:camera_control_typecamera_horizontal / vertical / pan / tilt / roll / zoom
image_tail与callback_url暂不纳入本阶段可视化参数体系
- 第一阶段保证用户可以为标准 Kling 能力选择:
-
Decision: Kling 数值参数同时在 UI 元数据和 adapter 层校验
cfg_scale取值范围固定为[0, 1]camera_control的六个数值字段固定为[-10, 10]且必须是整数- 参数面板与 MCP schema 暴露相同的边界信息
- adapter 仍负责最终校验,避免 workflow / MCP 直接绕过 UI
Proposed Data Model
interface ProviderVideoBindingMetadata {
allowedDurations?: string[];
defaultDuration?: string;
durationMode?: 'request-param' | 'model-alias';
durationField?: string;
durationToModelMap?: Record<string, string>;
strictDurationValidation?: boolean;
resultMode?: 'inline-url' | 'download-content';
downloadPathTemplate?: string;
versionField?: string;
versionOptions?: string[];
defaultVersion?: string;
versionOptionsByAction?: Record<string, string[]>;
}
interface KlingResolvedRequest {
action: 'text2video' | 'image2video';
modelName: string;
}
标准 Kling 视频 binding 期望类似:
{
operation: 'video',
protocol: 'kling.video',
requestSchema: 'kling.video.auto-action-json',
submitPath: '/kling/v1/videos/{action}',
pollPathTemplate: '/kling/v1/videos/{action}/{taskId}',
metadata: {
video: {
versionField: 'model_name',
defaultVersion: 'kling-v1-6',
versionOptions: [
'kling-v3',
'kling-v2-6',
'kling-v2-1',
'kling-v1-6',
'kling-v1-5'
],
versionOptionsByAction: {
text2video: ['kling-v3', 'kling-v2-6', 'kling-v2-1', 'kling-v1-6', 'kling-v1-5'],
image2video: ['kling-v3', 'kling-v2-6', 'kling-v2-1', 'kling-v1-6', 'kling-v1-5']
}
}
}
}
Execution Flow
- 发现层识别到
kling_video - 选择器保留
profileId::kling_video - 运行时 planner 解析到标准 Kling 视频 binding
- adapter 根据请求判断 action:
text2videoimage2video
- adapter 从以下来源解析执行版本:
params.model_name- binding
defaultVersion - 历史兼容的
request.model === kling-v*
- adapter 按 action 校验版本是否允许
- adapter 构造标准 Kling 请求体并提交
Compatibility Strategy
Discovery / Selection
- 新发现到的
kling_video应作为标准主路径能力模型 - 老的静态版本型模型可以继续存在,但不再作为未来扩展的主心智
Runtime
- 当请求模型是
kling_video时:- 必须解析
model_name
- 必须解析
- 当请求模型是
kling-v1-5或kling-v1-6时:- 直接将该值视为显式执行版本
- 同时仍走标准 Kling adapter
UI
- 若当前选择的是
kling_video- 参数区应能选择
model_name
- 参数区应能选择
- 若当前选择的是旧版本型模型
- UI 可以继续工作
- 但内部行为应与显式
model_name一致
Risks / Trade-offs
-
风险: 运行时同时支持
kling_video和kling-v*,可能产生双轨心智- Mitigation: 将
kling_video作为主路径,仅保留kling-v*兼容输入
- Mitigation: 将
-
风险: Kling 版本集合仍按 action 维护,后续若再次分叉,UI 或 workflow 可能产生非法组合
- Mitigation: 在 adapter 层做最终校验,并在参数层尽量按 action 过滤
-
风险:
o1系列误被标准 Kling 识别规则吞掉- Mitigation: 明确在 binding inference 和 adapter 匹配中排除
kling-video-o1*
- Mitigation: 明确在 binding inference 和 adapter 匹配中排除
Open Questions
- 默认版本是否应从
kling-v1-6逐步切换到kling-v3 image_tail是否在第一阶段就进入 UI 参数面板mode / cfg_scale / camera_control是否应在后续改为动态 binding 参数,而不是继续依赖静态透传