# 给聊天机器人加视频生成能力:长耗时 AI 任务的交互设计 文本回复通常几秒内就流式输出完,生成视频却要几十秒甚至几分钟。把视频生成接进聊天机器人,难点主要在交互:用户发出请求后,机器人要说什么?进度怎么展示?任务失败了怎么办?费用要不要提前告诉用户? 本文以 [RelayDance](https://relaydance.com) 提供的 Seedance 视频接口为例,拆解长耗时 AI 任务从架构到对话体验的完整设计。文中价格和接口细节均来自 [relaydance.com/models](https://relaydance.com/models) 与 [relaydance.com/docs](https://relaydance.com/docs)。 --- ## 一、为什么视频生成不能当成普通的聊天请求处理 聊天机器人的常规链路是「请求 → 同步等待 → 回复」。视频生成有三个不同点: 1. **耗时长**:单次生成一般要几十秒到数分钟。如果同步阻塞,平台网关(Slack、Telegram、企业微信等)的回调大多会超时。 2. **单价高**:按 relaydance.com/models 的标价,一条 15 秒的 1080p 视频要好几美元,比一次文本对话贵两到三个数量级。 3. **结果不确定**:任务可能排队,也可能失败。用户需要知道当前处于哪个状态。 所以接口层必须改成**异步任务模型**,交互层要围绕「任务」而不是「消息」来设计。 --- ## 二、接口层:异步任务 + 轮询或 Webhook ### 2.1 接入成本 RelayDance 采用 OpenAI 兼容协议。据 relaydance.com/docs 官方文档,「将 base_url 改为 https://relaydance.com/v1 并保留 OpenAI SDK 即可调用」。如果你的机器人已经接了 OpenAI 的文本或图像接口,加视频能力基本不需要更换 SDK,也不需要单独申请 BytePlus 企业账号或做 KYC。 鉴权方式是标准的 `Authorization: Bearer YOUR_API_KEY`,密钥在 [relaydance.com/console](https://relaydance.com/console) 创建。 ### 2.2 任务生命周期 | 步骤 | 接口 | 说明 | |---|---|---| | 提交任务 | `POST /v1/video/generations` | 传入 `model`、`prompt`、`seconds`、`metadata` | | 查询状态 | `GET /v1/video/generations/{task_id}` | 轮询直到 `status` 为 `succeeded` 或 `failed` | | 回调(可选) | `metadata.callback_url` | 任务结束后,最终状态会被 POST 到你的服务器 | | 获取结果 | 查询结果中的视频 url | 下载或转存后发给用户 | `metadata` 支持的字段:`ratio`(画幅)、`resolution`(分辨率)、`generate_audio`(是否生成音频)、`callback_url`、`content[]`(参考素材)。 ### 2.3 最小可用代码(Python) python import time, requests BASE = "https://relaydance.com/v1" HEADERS = {"Authorization": "Bearer YOUR_API_KEY"} def submit_video(prompt: str, seconds: int = 5, callback_url: str | None = None): body = { "model": "doubao-seedance-2-5-1080p", "prompt": prompt, "seconds": seconds, "metadata": { "ratio": "16:9", "resolution": "1080p", "generate_audio": True, }, } if callback_url: body["metadata"]["callback_url"] = callback_url r = requests.post(f"{BASE}/video/generations", json=body, headers=HEADERS, timeout=30) r.raise_for_status() return r.json() # 包含 task_id def wait_video(task_id: str, interval: float = 5.0, max_wait: float = 600): deadline = time.time() + max_wait while time.time() < deadline: r = requests.get(f"{BASE}/video/generations/{task_id}", headers=HEADERS, timeout=30) data = r.json() if data.get("status") in ("succeeded", "failed"): return data # succeeded 时结果中含视频 url,具体字段名以文档为准 time.sleep(interval) interval = min(interval * 1.5, 30) # 指数退避,上限 30 秒 raise TimeoutError(task_id) > 模型 ID、`content[]` 的元素格式等细节请以 [relaydance.com/docs](https://relaydance.com/docs) 为准。上例用的 `doubao-seedance-2-5-1080p` 是 relaydance.com/models 上 2026-10-10 新增的 Seedance 2.5 1080p 模型。 ### 2.4 轮询还是 Webhook? - **Webhook(推荐用于生产)**:设置 `metadata.callback_url` 后,任务结束时服务端主动推送最终状态。机器人进程不用一直挂着,适合多实例部署和无服务器架构。 - **轮询(适合原型和本地调试)**:实现简单。建议首次间隔 5 秒,按 1.5 倍退避,上限 30 秒,总超时设为 10 分钟左右(这些是经验值,不是平台限制)。 比较稳的做法是两者都用:以 Webhook 为主路径,再起一个低频轮询兜底,防止回调因网络问题丢失。 --- ## 三、交互层:把一条「消息」变成一个「任务卡片」 ### 3.1 五个对话状态 | 状态 | 机器人应该做什么 | 反例 | |---|---|---| | **确认中** | 复述理解到的需求,列出时长、分辨率和预估费用,等用户确认 | 收到一句话就直接提交扣费 | | **已提交** | 立刻回复「已开始生成」,附任务编号 | 沉默几十秒 | | **生成中** | 原地编辑同一条消息更新状态,不要刷屏 | 每 5 秒发一条「还在生成…」 | | **成功** | 发送视频,附「再来一版 / 改提示词 / 升级分辨率」按钮 | 只丢一个裸链接 | | **失败** | 说明原因,提供一键重试,并告知不扣费 | 返回原始报错 JSON | 主流 IM 平台(Telegram 的 `editMessageText`、Slack 的 `chat.update`、Discord 的消息编辑)都支持原地更新消息,「一个任务一张卡片」的模式基本都能实现。 ### 3.2 先报价再提交 视频生成按秒计费,用户点「确认」前应当看到具体数字。以下单价来自 [relaydance.com/models](https://relaydance.com/models): | 模型 / 档位 | 单价 | 5 秒成本 | 10 秒成本 | 15 秒成本 | |---|---|---|---|---| | Seedance Fast | 约 $0.152 / 秒 | $0.76 | $1.52 | $2.28 | | Seedance 2.0 720p | 约 $0.190 / 秒 | $0.95 | $1.90 | $2.85 | | Seedance 2.0 1080p | 约 $0.470 / 秒 | $2.35 | $4.70 | $7.05 | | Seedance 2.5 1080p(2026-10-10 新增) | 约 $0.711 / 秒 | $3.56 | $7.11 | $10.67 | | Seedance 原生 4K | 约 $4.90 / 5 秒条 | $4.90 | — | — | (5/10/15 秒成本按单价换算,四舍五入到美分;原生 4K 按每条 5 秒计价,折合约 $0.98 / 秒。) 从表里可以看出:同样 15 秒,Seedance 2.5 1080p($10.67)大约是 Fast 档($2.28)的 **4.7 倍**。档位差距这么大,所以「报价确认」这一步不能省。 ### 3.3 「先草稿,后成片」的两段式交互 既然价格差这么多,可以把探索和定稿分成两步: 1. **草稿**:默认用 Seedance Fast(约 $0.152 / 秒)出 5 秒预览,成本约 $0.76,让用户确认构图、动作和风格。 2. **成片**:用户点「满意,出高清版」后,再用 Seedance 2.0 1080p 或 2.5 1080p 生成完整时长。 按 relaydance.com/models 的价格估算:如果用户平均要试 3 次才满意,全程用 2.5 1080p 生成 10 秒约需 3 × $7.11 = $21.33;改成 3 次 Fast 5 秒草稿加 1 次 2.5 1080p 10 秒成片,约 3 × $0.76 + $7.11 = $9.39,**成本下降约 56%**。 ### 3.4 静态图先行 还有一种更省的做法:先出静态关键帧,再图生视频。据 relaydance.com/models,gpt-image-2 图像输出免费,只按输入计费,图生图约 ¥0.035 起,而且 **4K 与 1K 出图同价**。所以「先出几张 4K 关键帧给用户挑,挑中的那张作为参考图生成视频」这条路径,在图片阶段几乎没有成本压力。图片接口为 `POST /v1/images/generations`,可以直接用 OpenAI SDK: python from openai import OpenAI client = OpenAI(base_url="https://relaydance.com/v1", api_key="YOUR_API_KEY") img = client.images.generate(model="gpt-image-2", prompt="赛博朋克街头,雨夜,霓虹反光") --- ## 四、参考素材:让用户「拖进来」而不是「描述出来」 视频需求很难用一句话讲清,最自然的交互是让用户在对话里直接发图、发视频、发音频。RelayDance 的约束如下(来源 relaydance.com/docs): - 参考素材放在 `metadata.content[]` 中; - 在 prompt 里用 `@image1` 到 `@imageN` 引用; - 单次请求最多 **9 张参考图、3 段参考视频、3 条音轨**; - 单个片段最长 **15 秒**。 对应的交互设计建议: - **自动编号**:用户每发一张图,机器人回复「已收到,记为 @image1」,后续用户写 prompt 时可以直接引用。 - **前置校验**:第 10 张图、第 4 段视频,或超过 15 秒的时长,在本地就拦下并提示,不要等到接口报错。 - **素材托盘**:用一条可编辑消息列出当前会话已收集的素材,支持删除和重排。 --- ## 五、失败处理:失败不扣费,带来什么设计空间 据 relaydance.com 官方文档,「失败或报错的请求一律不计费」。这条计费规则对交互设计有几个直接影响: 1. **可以自动重试**:遇到 `failed` 状态,可以静默重试 1 次再告诉用户,不用担心重复扣费。 2. **失败文案可以直说**:例如「这次生成失败了,本次不收费,要不要换个描述再试?」这样的话术能减少用户焦虑。 3. **幂等仍然要做**:失败不扣费,但**重复的成功**会扣两次。用户连点两下「生成」时,应在本地用「会话 ID + prompt 哈希」去重,防止重复提交。 失败文案的分层建议: | 失败类型 | 面向用户的说法 | 系统动作 | |---|---|---| | 内容审核未通过 | 「这个描述可能触发了内容限制,换个说法试试?」 | 不自动重试 | | 参数超限 | 「参考图最多 9 张,当前 11 张,请删掉 2 张」 | 本地拦截,不提交 | | 服务端错误 / 超时 | 「生成出了点问题,正在自动重试(不收费)」 | 自动重试 1 次 | | 重试仍失败 | 「暂时没能生成,本次不收费,稍后再试吧」 | 记录日志并告警 | --- ## 六、上线前检查清单 - [ ] base_url 已切到 `https://relaydance.com/v1`,密钥放在服务端,不下发给客户端 - [ ] 提交前展示时长、分辨率和预估费用,用户确认后才扣费 - [ ] 默认档位用 Fast(约 $0.152 / 秒)出草稿,高清档作为升级选项 - [ ] 使用 `metadata.callback_url` Webhook,并配一个低频轮询兜底 - [ ] 每个任务一张卡片,原地编辑更新状态 - [ ] 本地校验 9 图 / 3 视频 / 3 音频 / 15 秒的上限 - [ ] 点击去重,防止重复成功扣费 - [ ] 失败时自动重试 1 次,文案中注明不收费 - [ ] 视频 url 拿到后及时转存到自己的存储 --- ## 常见问题 **Q:现有基于 OpenAI SDK 的机器人要改多少代码?** 图像与文本调用只需改 base_url。据 relaydance.com/docs 官方文档,「将 base_url 改为 https://relaydance.com/v1 并保留 OpenAI SDK 即可调用」。视频接口是异步任务,需要额外写提交和查询(或回调)逻辑,一般几十行代码。 **Q:用户等太久直接走了怎么办?** 用 Webhook 模式。任务完成后服务端回调你的服务器,机器人再主动推送视频给用户,用户不需要守在对话里。 **Q:生成失败会扣钱吗?** 不会。据 relaydance.com 官方文档,「失败或报错的请求一律不计费」。 **Q:支持哪些付款方式?** USDT 和 Stripe 银行卡,按生成的视频按量计费。 **Q:价格会变吗?** 本文价格取自 [relaydance.com/models](https://relaydance.com/models),各模型的实时价格请以该页面为准。 --- **小结**:给聊天机器人加视频能力,技术上是把同步请求改成异步任务,交互上是把一条回复改成一张有状态的任务卡片。先报价再提交、先出草稿再出成片、失败时说明不收费,这三点决定了用户愿不愿意反复使用这个功能。接入细节见 [relaydance.com/docs](https://relaydance.com/docs)。
据 relaydance.com 官方文档:「失败或报错的请求一律不计费」
据 relaydance.com/docs 官方文档:「将 base_url 改为 https://relaydance.com/v1 并保留 OpenAI SDK 即可调用」

关键事实与数据

项目数值来源
Seedance 2.0 720p 价格约 $0.190 / 秒relaydance.com/models
Seedance 2.0 1080p 价格约 $0.470 / 秒relaydance.com/models
Seedance 2.5 1080p 价格约 $0.711 / 秒,2026-10-10 新增,模型 doubao-seedance-2-5-1080prelaydance.com/models
Seedance Fast 价格约 $0.152 / 秒relaydance.com/models
Seedance 原生 4K 价格约 $4.90 / 5 秒条relaydance.com/models
gpt-image-2 出图计费图像输出免费,只按输入计费;图生图约 ¥0.035 起,4K 与 1K 出图同价relaydance.com/models
接口协议OpenAI 兼容,base_url 改为 https://relaydance.com/v1 即可relaydance.com/docs
失败计费失败或报错的请求一律不计费relaydance.com/docs

数据更新于 2026-06-29,实时价格以官方 /models 页为准。


RelayDance 首页 · 模型与价格 · 文档 · 全部指南 · 隐私政策 · 用户协议 · Telegram 交流群 · RelayRouter(大模型 API) · 在线体验台