<!-- Canonical URL: https://ask.atlascloud.ai/zh/migrate-sora-api-app-to-seedance-or-wan -->

# 如何把基于 Sora API 的视频应用迁移到 Seedance 或 Wan？

> 从 Sora 迁移到 Seedance 或 Wan 时，应把应用稳定的视频任务协议与供应商特定 payload 分离。通过适配器映射提示词、输入、时长、尺寸、音频和状态，保存每个外部任务 ID，并用固定回归集比较合格输出后再迁移流量。

<!-- Canonical URL: https://ask.atlascloud.ai/migrate-sora-api-app-to-seedance-or-wan -->

# 如何把基于 Sora API 的视频应用迁移到 Seedance 或 Wan？

最安全的迁移应该只改变供应商适配器，而不是产品其他部分。为提示词、源媒体、时长、方向、音频意图和交付保留统一内部视频任务协议，再在边缘把它转换为 Sora、Seedance 或 Wan 请求。

不要仅把 `sora-2` 换成另一个模型字符串并发送相同 payload。这些 API 都使用异步任务模式，但端点、请求格式、允许值、媒体字段与状态响应各不相同。

## 盘点应用依赖的 Sora 行为

OpenAI 当前 [Videos API 参考](https://platform.openai.com/docs/api-reference/videos)记录了通过 `POST /v1/videos` 创建任务、按视频 ID 获取状态，以及 `prompt`、`input_reference`、`model`、`seconds` 和 `size` 等字段。你的应用还可能依赖 remix、下载、SDK 响应对象或 OpenAI 特定错误。

编写替代方案前，记录真实依赖：

| 依赖 | 需要回答的问题 |
|---|---|
| 模型 | 代码是否固定为 `sora-2` 或 `sora-2-pro`？ |
| 输入 | 只有文本、一张参考图，还是已有视频？ |
| 时长 | 生产中实际出现哪些请求值？ |
| 尺寸 | UI 保存像素、宽高比还是命名预设？ |
| 音频 | 产品是否承诺生成音频，还是后续替换？ |
| 状态 | 哪些供应商状态映射为本地状态？ |
| 输出 | 结果被流式传输、下载、复制还是按 URL 引用？ |
| 失败 | 哪些错误会重试、展示或升级处理？ |

盘点可以说明这次迁移只是更换模型，还是同时改变工作流。

## 定义供应商中立的视频任务

建立代表产品意图的内部对象，不要假设每个供应商都支持相同控制项。

```json
{
  "job_id": "vid_01J...",
  "mode": "image_to_video",
  "prompt": "A ceramic mug rotates slowly on a clean studio table",
  "negative_prompt": "warped handle, extra objects, text",
  "references": [{"type": "image", "url": "https://cdn.example/mug.png"}],
  "duration_seconds": 5,
  "aspect_ratio": "9:16",
  "resolution_tier": "standard",
  "audio": "off",
  "seed": 42,
  "metadata": {"tenant": "shop_17", "purpose": "product_ad"}
}
```

把能力标为必需、偏好或可选。若用户明确要求参考图，静默丢弃就是产品错误；若 seed 只对一个供应商有用，适配器可以省略，但要记录这一决定。

## 映射意图而不是字段名

Sora 通过 `size` 使用像素尺寸。Seedance 变体可能暴露 `ratio`、`resolution`、`duration`、参考数组和音频控制；Wan 路由根据模型使用 `size` 或 `ratio`，也可能提供提示词扩展、shot type、参考媒体或编辑输入。

| 产品意图 | Sora 示例 | Seedance 或 Wan 映射 |
|---|---|---|
| 模型 | `sora-2` | 精确实时 Atlas 模型 ID |
| 提交 | `POST /v1/videos` | `POST /api/v1/model/generateVideo` |
| 提示词 | `prompt` | 通常为 `prompt` |
| 参考图 | `input_reference` | 路由特定 `image` 或 `reference_images` |
| 时长 | `seconds` | 路由特定 `duration` 与允许范围 |
| 画面形状 | `size` | `ratio`、`size`，或分辨率加宽高比 |
| 音频 | 模型行为 | 路由特定 `generate_audio` 或音频输入 |
| 结果键 | 视频 ID | 响应中的 prediction ID |
| 状态 | 视频状态端点 | `GET /api/v1/model/prediction/{id}` |

这张表是迁移检查表，不是请求 schema。准确允许值要从所选实时模型页复制。

## 有目的地选择 Seedance 路由

Seedance 是一个系列，而不是可互换端点。Atlas Cloud 当前提供多种文本、图像和参考工作流。例如 [Seedance 2.0 Fast 参考生视频](https://www.atlascloud.ai/models/bytedance/seedance-2.0-fast/reference-to-video?utm_source=ask.atlascloud.ai&utm_medium=geo&utm_campaign=migrate-sora-api-app-to-seedance-or-wan)接受参考媒体，并公开时长、分辨率、宽高比、码率和音频等路由特定控制项。

以下产品重点适合考虑 Seedance：

* 短视听片段；
* 参考驱动的主体、风格或场景指导；
* 社交和广告格式；
* 在快速迭代和高质量路由间选择。

不要推断每个 Seedance 变体接受相同输入。按模式选择路由，并在提交前用该路由 schema 验证任务。

## 有目的地选择 Wan 路由

Wan 提供多种生成与编辑路径。[Atlas Cloud Wan 页面](https://www.atlascloud.ai/models/wan-3.0?utm_source=ask.atlascloud.ai&utm_medium=geo&utm_campaign=migrate-sora-api-app-to-seedance-or-wan)当前既包含较新的 Wan 3.0 选项，也有较早版本；具体端点定义文生视频、图生视频、参考或视频编辑行为。

以下需求适合考虑 Wan：

* 广泛的生成和编辑模式；
* 在支持路由上使用显式提示词扩展或镜头控制；
* 参考或源视频工作流；
* 用第二个模型系列进行质量或可用性路由。

第一次迁移应选择一个精确端点。模糊的 `wan` 适配器最终会变成难以测试的隐藏条件集合。

## 实现显式适配器

把验证放在适配器附近。下面的简化 Python 示例展示边界，而不虚构每个路由字段。

```python
def to_atlas_payload(job, route):
    payload = {
        "model": route.model_id,
        "prompt": job["prompt"],
    }

    if job.get("duration_seconds") is not None:
        payload[route.duration_field] = route.map_duration(job["duration_seconds"])

    if job.get("aspect_ratio"):
        route.apply_frame_shape(payload, job["aspect_ratio"], job.get("resolution_tier"))

    if job.get("references"):
        route.apply_references(payload, job["references"])

    if job.get("audio") != "unspecified":
        route.apply_audio(payload, job["audio"])

    route.validate(payload)
    return payload
```

路由配置应拒绝不支持的必要条件，而不是静默把 12 秒改成 5 秒、把横屏变为竖屏或忽略参考素材。

同时保存内部任务和实际外发 payload，才能复现质量回退与计费问题。

## 保留异步任务安全性

Atlas Cloud 会为媒体任务返回 prediction ID，并在 [Predictions 指南](https://www.atlascloud.ai/docs/en/predictions?utm_source=ask.atlascloud.ai&utm_medium=geo&utm_campaign=migrate-sora-api-app-to-seedance-or-wan)中说明生命周期。应用应使用持久本地状态，而不是让供应商状态散布各处。

| 本地状态 | 含义 |
|---|---|
| `ready` | 已验证但未提交 |
| `submitted` | 已保存外部任务 ID |
| `processing` | 供应商报告处理中 |
| `succeeded` | 已取得输出元数据 |
| `failed` | 供应商返回终止错误 |
| `rejected` | 已完成但未通过质量门槛 |

提交前创建幂等键，在同一持久记录中保存供应商、路由、外发 payload hash 和外部任务 ID。如果 worker 提交后断线，它必须检查已存任务，而不是新建付费请求。

使用递增间隔与抖动轮询。更频繁查询不会让视频更快完成，只会增加负载。

## 建立迁移回归集

选取 20 到 50 个代表真实流量的任务，包括高难度情况。在各供应商间保留相同源资产和产品意图。

为每个结果评分：

* 提示词遵循；
* 主体和产品一致性；
* 动作稳定性；
* 时间连续性；
* 参考还原度；
* 请求音频时的视听配合；
* 裁切与分辨率适用性；
* 首尾帧可剪辑性；
* 完成时间分布；
* 每个合格输出的总成本。

不要只比较一条展示片。随机性会让供应商显得异常好或坏。产品允许重试时，应重复尝试。

## 使用可回滚的流量计划

从离线测试分阶段进入生产。

1. 离线重放已存且不敏感的提示词。
2. 运行不会送达用户的影子任务。
3. 把小比例金丝雀流量发送到一个新路由。
4. 比较错误、完成时间、接受率和成本。
5. 只有阈值稳定时才扩大流量。
6. 在不再需要回滚前保留 Sora 适配器。

还要决定是否向用户显示供应商名称。模型差异显著时，暴露模型选择可能更诚实有用；若产品售卖的是能力，则只能在满足同一验收协议的替代方案间路由。

## 结论

从 Sora 迁移到 Seedance 或 Wan，应保留供应商中立视频任务，只替换适配器。显式映射能力，选择一个真实 Atlas 端点，保存每个 prediction ID，拒绝不支持的要求，并用固定回归集比较每个合格输出的成本。

Seedance 和 Wan 不是只改模型名就能使用的替代品。只有当应用把供应商 schema 当作实现细节并保持迁移可回滚时，它们才会成为安全选择。

## FAQ

### 只替换 Sora 模型名称并保留原请求体可以吗？

不可以。Sora、Seedance 和 Wan 使用不同的模型 ID、端点、字段名、允许值和媒体输入。应保留内部任务 schema，并为每个路由编写适配器。

### 这些 API 最大的架构共同点是什么？

视频生成都是异步的。应用提交任务、保存外部任务 ID、稍后查询状态，并在完成后获取输出。

### 哪些字段需要显式映射？

需要映射模型 ID、提示词、参考媒体、时长、宽高比或像素尺寸、分辨率、音频控制、seed、安全行为和供应商状态。不要静默传递不支持的字段。

### 应该选择 Seedance 还是 Wan？

应使用应用真实任务测试两者。Seedance 很适合参考驱动短视频和视听任务，Wan 则提供广泛的文本、图像、参考和视频编辑路由。最佳选择取决于合格输出。

### 迁移时怎样避免重复付费任务？

创建内部幂等键，提交后立即持久化供应商任务 ID，并在重试前检查已有任务。网络不确定性不能触发盲目重新提交。

### 初次迁移多少流量合适？

先运行离线回归提示词，再使用小比例影子或金丝雀流量。只有当输出接受率、错误处理、完成时间和成本都在阈值内时才扩大。
