feat(seedance): 加 seedance_2_pro variant + smoke 支持 --variant 参数

- yaml 加 seedance_2_pro (model_id=doubao-seedance-2-0-260128, ¥46/Mtok 文生,
  支持 480p/720p/1080p);放在 fast 后面,fast 仍是默认 (yaml 首位 = agent fallback)
- Pro 出片慢,poll_timeout_s 拉到 900s (实测 480p 4s 等了 177s)
- smoke_seedance.py 加 sys.argv[1] 选 variant:`smoke_seedance.py seedance_2_pro`
- SKILL 把 "30-90s" 校准到 "Fast 30-90s / Pro 2-3min" (实测)

smoke Pro 跑通:body schema 完全对,响应带真 usage.total_tokens (40594),tool
_extract_tokens 命中走真值不估算;480p 4s 实测 ¥1.87,与官方源数据线性外推吻合。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
caoqianming 2026-05-22 10:11:31 +08:00
parent da71daa789
commit 5faff8a127
3 changed files with 44 additions and 6 deletions

View File

@ -26,6 +26,7 @@ image:
request_timeout_s: 60 # 出图慢于此判超时
video:
# fast 放第一个 → 默认 variant(成本敏感场景优先);开通了 Pro 的用户从顶栏下拉切。
seedance_2_fast:
model_id: doubao-seedance-2-0-fast-260128
display_name: 豆包 Seedance 2.0 Fast
@ -61,3 +62,32 @@ video:
request_timeout_s: 60 # submit POST 超时(异步,只是提交)
poll_interval_s: 5 # 单次 GET 间隔(秒);典型 30-90s 出片
poll_timeout_s: 600 # 总等待上限(10min)→ 超时返 [Error]
seedance_2_pro:
model_id: doubao-seedance-2-0-260128
display_name: 豆包 Seedance 2.0 Pro
# 同 fast 一套异步 task + 轮询接口,只换 model_id + 单价 + 分辨率上限。
endpoint_submit: /contents/generations/tasks
endpoint_poll: /contents/generations/tasks
# 计费(per-token,公式同 fast):
# 文生视频: ¥46 / Mtok (vs fast ¥37)
# 图生视频: ¥28 / Mtok (vs fast ¥22)
# 实测档位(Pro, 5s, 文生视频, 24fps):
# 720p 16:9 → ¥4.97 (vs fast ¥4.00)
# 1080p 16:9 → 更高(Pro 独占,fast 不支持)
price_cny_per_mtoken_text2video: 46.0
price_cny_per_mtoken_video2video: 28.0
fps: 24
# 支持参数 — Pro 支持 1080p,默认仍 720p 控成本
default_resolution: 720p # 480p / 720p / 1080p(Pro 独占)
default_ratio: "16:9"
default_duration: 5
default_watermark: false
default_generate_audio: false
# 轮询参数:Pro 出片慢于 Fast(更精细),拉长超时
request_timeout_s: 60
poll_interval_s: 5
poll_timeout_s: 900 # Pro 上限拉到 15min 保险

View File

@ -48,6 +48,14 @@ def main() -> int:
if not video_cfg:
print("[SKIP] doubao.yaml 无 video 段")
return 0
# 允许命令行指定 variant:`smoke_seedance.py seedance_2_pro`;不传走 yaml 第一个
want_variant = sys.argv[1] if len(sys.argv) > 1 else ""
if want_variant:
if want_variant not in video_cfg:
print(f"[FAIL] variant {want_variant!r} 不在 yaml video 段, 已知: {list(video_cfg.keys())}")
return 2
variant_key, variant_cfg = want_variant, video_cfg[want_variant]
else:
variant_key, variant_cfg = next(iter(video_cfg.items()))
print(f"[setup] variant={variant_key} model={variant_cfg.get('model_id')}")
print(f" price_text2video=¥{variant_cfg.get('price_cny_per_mtoken_text2video')}/Mtok")

View File

@ -1,6 +1,6 @@
---
name: videogen
description: 用豆包 Seedance 2.0 Fast 生视频(`seedance` tool)。**任何生视频任务调 tool 前必须 load 本 skill**。触发词:视频 / 动画 / 动起来 / 做个 video / 做段视频 / 出段视频 / 生成视频 / mov / mp4 / 短片 / 镜头 / 运动镜头 / 演示视频 / 动效。核心:视频比图贵 10 倍(¥1.86-¥4+ / 段),且要等 30-90s,问清楚再画 + 强制确认。
description: 用豆包 Seedance 2.0 Fast 生视频(`seedance` tool)。**任何生视频任务调 tool 前必须 load 本 skill**。触发词:视频 / 动画 / 动起来 / 做个 video / 做段视频 / 出段视频 / 生成视频 / mov / mp4 / 短片 / 镜头 / 运动镜头 / 演示视频 / 动效。核心:视频比图贵 10 倍(¥1.86-¥4+ / 段),且要等 Fast 30-90s / Pro 2-3min,问清楚再画 + 强制确认。
---
# Videogen
@ -20,7 +20,7 @@ description: 用豆包 Seedance 2.0 Fast 生视频(`seedance` tool)。**任何
- 用户**沉默 / 长时间不回 / 追问别的事** → 不算确认,**继续等**,不要自作主张
- 用户回 "看起来不错" / "差不多" / 模棱两可 → **主动追问一句"这就开烧 ¥X?"**,拿到明确"是"再调
**为什么比 imagegen 还严**:视频单价 ¥4 起,比图贵 10 倍以上;一次失败相当于 18 张错图;且要等 30-90s,用户改方向的等待代价也很高。**装配 prompt 不等于授权调用** —— 装配是模型脑内运算,授权要落到用户的"嗯,画吧"上。
**为什么比 imagegen 还严**:视频单价 ¥4 起,比图贵 10 倍以上;一次失败相当于 18 张错图;且要等 Fast 30-90s / Pro 2-3min,用户改方向的等待代价也很高。**装配 prompt 不等于授权调用** —— 装配是模型脑内运算,授权要落到用户的"嗯,画吧"上。
## 何时用本 skill
@ -49,7 +49,7 @@ description: 用豆包 Seedance 2.0 Fast 生视频(`seedance` tool)。**任何
**模糊时主动问一句**:
> 你这是想要 **一张静态图**(seedream,¥0.22,3-5 秒出图),还是 **一段短视频**(seedance,¥4 起,等 30-90s)?静态图够的话省钱省时间。
> 你这是想要 **一张静态图**(seedream,¥0.22,3-5 秒出图),还是 **一段短视频**(seedance,¥4 起,等 Fast 30-90s / Pro 2-3min)?静态图够的话省钱省时间。
## 诊断模糊度 — 六维清单(运动是新增的必填维)
@ -78,7 +78,7 @@ description: 用豆包 Seedance 2.0 Fast 生视频(`seedance` tool)。**任何
> - **场景**:工地中景,远处有塔吊
> - **镜头**:固定俯视 + 缓慢推近模板中心
> - **风格**:写实工程纪录片
> - **时长 / 分辨率 / 比例**:5s / 720p / 16:9(ppt 用) — ¥4.00,等 30-90s
> - **时长 / 分辨率 / 比例**:5s / 720p / 16:9(ppt 用) — ¥4.00,等 Fast 30-90s / Pro 2-3min
>
> 这样画可以吗?或者告诉我:想突出什么?(浇筑工艺细节 / 振动棒动作 / 大场面气势 / 慢动作)
@ -201,7 +201,7 @@ seedance(
)
```
**调用是同步阻塞 30-90s** —— tool 内部 submit 后轮询直到 succeeded,期间 LLM 卡住。这不是 bug,告诉用户"提交了,等 30-90 秒"再耐心等返回。
**调用是同步阻塞 Fast 30-90s / Pro 2-3min** —— tool 内部 submit 后轮询直到 succeeded,期间 LLM 卡住。这不是 bug,告诉用户"提交了,等 30-90 秒"再耐心等返回。
返回串首行是 `[seedance] model=... · resolution=... · ratio=... · duration=Xs · cost=¥... · elapsed=...s` —— 原样保留给用户(SPA 会 parse 挂徽章)。第二行 `saved: <相对路径>` 是产物路径,告诉用户。