videokit 契约 v0(草案)

状态:草案,未实现 · contract 版本 0.0.1-draft · as_of 2026-09-24 本文是 EXECUTION-PLAN M0-A2 的交付物。所有厂商字段来自官方文档核实(数据源:video-ai-landscape/data/capabilities.json),未核实处标【未核实-缺口】,禁止编造。


0. 一句话

把五家视频生成 API 的「提交—等待—取货」收敛成同一套任务句柄vk submit / poll / cancel / resume / artifacts,让北极星成立——一条命令、跨 ≥3 家厂商、失败可重试、结果可验收、产物本地留档。

1. 范围与非目标

v0 只定义契约(状态机 + 字段 + CLI 表面),不实现二进制(M1 起步)。

2. 设计原则(五条,全部来自调研实证)

  1. 轮询优先。五家中仅 Kling、Seedance 支持回调,Veo/智谱纯轮询,百炼未载明【缺口】。本地 CLI 没有公网端点,v0 一律本地轮询;各家的回调能力记入能力表(§8),不做依赖。
  2. 幂等靠本地兜底。五家中仅 Kling 提供 external_task_id 天然去重句柄【官方源】。其余四家重试只能靠 vk 本地 journal 短路:同幂等键 + 同参数指纹、任务未终态 → 直接返回既有句柄,不发请求、不重复花钱
  3. 超时 ≠ 失败。网络断、轮询窗口尽、执行超时(如 Seedance execution_expires_after 48h)→ 一律进 unresolved,不静默标 failed。计费是否已经发生,是用户必须看到的真相。
  4. 产物立即归档。Veo 服务端只留 2 天(延长操作重置计时)、Kling 30 天,Seedance/百炼/智谱未载明。succeeded 的下一个默认动作就是下载 + 写 manifest,不赌厂商 URL 存活。
  5. 价格先报。submit 前必须产出成本行(--dry-run 或确认后执行);能力表里没有价的(如 Veo 页面缺口)就明说没有,不编。

3. 统一状态机

             submit                      poll 命中
  [created] ───────▶ [queued] ──────────────▶ [running] ──────▶ [succeeded] ─▶ [archived]
     │                   │                        │                  (自动下载+manifest)
     │                   │  厂商说没这个任务        │  显式失败 / 轮询超窗 / 执行超时 / 厂商失联
     │                   ▼                        ▼
     └─────▶ [failed]                 [unresolved] ⇄ 可再轮询 / 同幂等键重提(人工确认)
                     ▲
  cancel 请求 ───▶ [canceled](尽力而为,见 §5)

统一态 → 各家原生值映射:

统一态 Veo Kling Seedance (Ark) 百炼 Wan 智谱 CogVideo
queued operation 已建、未 done submitted 提交受理,未见细分态【缺口】 未载明【缺口】 提交后首个 PROCESSING 之前
running operation 未 done processing running 未载明【缺口】 PROCESSING
succeeded done + 有视频 succeeded succeeded 未载明【缺口】 SUCCESS
failed done 无产物 / 报错 failed failed 未载明【缺口】 FAIL
unresolved 触发 轮询超窗 / 断连 回调失联且轮询超窗 execution_expires_after(默认 172800s=48h)耗尽 未载明【缺口】 长时间 PROCESSING 超窗

百炼整列未载明是 v0 最大的对照缺口,M1 第一件事就是补齐(§11)。

4. 统一句柄(CLI 表面)

五个动词,全部支持 --json(机器可读输出,是后续绑 MCP 的前提):

vk submit  <params...> --provider auto|veo|kling|seedance|wan|cogvideo
           [--dry-run] [--yes] [--idempotency-key K]
vk poll  <task_id> [--wait] [--interval 10s] [--deadline 10m]
vk cancel  <task_id>
vk resume  [--all]
vk artifacts  <task_id> [--verify]

5. 幂等键规范

6. Artifact Manifest v0

{
  "manifest_version": 0,
  "task_id": "vk-20260924T101500Z-ab12cd34",
  "provider": "kling",
  "provider_task_id": "…",
  "idempotency_key": "vk-20260924T101500Z-ab12cd34",
  "requested": { "model": "kling-v3", "duration_s": 5, "resolution": "720p", "audio": true },
  "state": "succeeded",
  "artifacts": [
    { "kind": "video",
      "url": "https://…",
      "url_expires_at": "2026-10-24T10:15:00Z",
      "url_expires_note": "30 天后清除【官方源】",
      "local_path": "archive/2026-09-24/vk-….mp4",
      "sha256": "…", "bytes": 0 }
  ],
  "cost": { "amount": 0.63, "currency": "USD",
            "basis": "kling v3 720p 含音频 0.126 $/s × 5s",
            "as_of": "2026-09-22", "estimated": true },
  "timing": { "submitted_at": "…", "finished_at": "…", "polled_times": 7 },
  "supersedes": null
}

字段规则: - url_expires_at:核实到就填;没核实到 → null + url_expires_note: "未载明-缺口"禁止编保留期。 - cost.estimated: true 表示这是报价而非厂商账单回执(v0 拿不到账单,估计值就要标成估计值)。 - as_of 沿用技能矩阵惯例:价格/能力的核实日期,不是生成日期。

7. 到期与归档对照

厂商 产物 URL 保留 vk 默认行为
Veo 2 天,延长操作重置计时【官方源】 succeeded 即下载
Kling 30 天后清除【官方源】 succeeded 即下载
Seedance 未载明【缺口】 succeeded 即下载(不知道能放多久,默认不赌)
百炼 Wan 未载明【缺口】 同上
智谱 未载明【缺口】 同上

8. 五家厂商字段对照表(M0-A2 验收物)

数据源:data/capabilities.json(官方文档核实,as_of 2026-09-22/24)。

维度 Veo (Google) Kling (快手) Seedance 2.0 (字节 Ark) 百炼 Wan (阿里) CogVideo (智谱)
提交方式 异步 predictLongRunning,轮询 operation(建议 10s) REST 建任务 + GET /tasks 轮询 Ark 建任务 + GET tasks 轮询(示例 10s) DashScope video_synthesis 异步+轮询,参数页未展开【缺口】 POST /paas/v4/videos/generations → 查询接口轮询
原生状态值 operation done / 未 done(无细分) submitted / processing / succeeded / failed running / succeeded / failed 未载明【缺口】 PROCESSING / SUCCESS / FAIL
回调支持 无【官方源】 有:options.callback_url + Callback Protocol 有:callback_url 未载明【缺口】 无,纯轮询【官方源】
幂等/外部句柄 external_task_id【官方源】 未载明【缺口】 未载明【缺口】 未载明【缺口】
执行超时 未载明【缺口】 未载明【缺口】 execution_expires_after 默认 172800s=48h;另有 priorityservice_tier 未载明【缺口】 未载明【缺口】
计费口径 页面未含价【缺口】;1 请求 = 1 视频,prompt ≤1024 token 按秒 Unit(U=$0.14):3.0 Turbo 720p 0.8U/s;V3 0.6~0.8U/s、4K 3.0U/s;2.5 Turbo 0.3U/s 按秒按分辨率(元/s):2.0 mini 720p 约 0.2 元/s(活动价、限企业);另有按 token 结算口径 未载明【缺口】 cogvideox-3 1 元/次
产物 URL 有效期 2 天(延长操作重置计时) 30 天 未载明【缺口】 未载明【缺口】 未载明【缺口】
首尾帧形态 image + lastFrame 必须成对,仅 Veo 3.1 系 contents[]type=first_frame/last_frame不支持仅尾帧 content[] 首尾帧 + return_last_frame 可回尾帧(串联用) wan2.7-i2v 支持首帧/首尾帧/续写+尾帧;另有 kf2v 专线 image_url 传 2 张图数组:第 1 张首帧、第 2 张尾帧
并发限制 未载明【缺口】 ≈3(需求侧实证) 未载明【缺口】 未载明【缺口】 V0=5 / V1=10 / V2=15 / V3=20

读法:这张表就是适配器的工作量地图——每一格【缺口】都是 M1 要补的一脚,每一格已核实值都是适配器可以直接翻译的映射源。

9. 适配器最小实现清单

接入一个新厂商 = 填满 §8 一列 + 实现五个动词的映射:

10. MCP Tasks 兼容方向(非 v0 目标)

submit / poll / cancel / resume 与 MCP Tasks 扩展的任务生命周期(create / get / result / cancel)同构。v0 只承诺一条:--json 输出形状与状态名保持稳定,后续薄封装即可绑成 MCP server。此节为方向性说明,不是承诺。

11. 未决问题

问题 处置
百炼 Wan 状态机 / 计费 / URL 保留期全列【缺口】 M1 首补——接适配器前先核文档
五家 cancel 端点均未核实 M1 核实;核实结果「不支持」本身也是契约事实,照实记录
Seedance / Kling 回调协议细节未展开 v0 不依赖回调,记录在能力表即可
Seedance 状态机无 queued 细分态【缺口】 接入时核实提交受理返回;翻译层先按「提交成功即 queued」处理并在适配器标注
D3:M1 先接哪两家 建议 Seedance 2.0 + Kling 国际:前者契约要素最全(超时/回调/回尾帧),后者状态机最全(四态)+ 唯一原生幂等句柄——正好从两端夹出适配器抽象。待用户拍板
D4:judge VLM 选型 M2 前拍板,不阻塞本契约