开发文档
大模型调用 · 视频任务教程示例
覆盖对话 / 流式 / 图像生成等大模型调用,以及视频任务生成与获取、 素材上传、状态同步的完整链路。示例可直接复制运行, 替换 API Key 与模型名即可接入。
整体流程
从对话到视频生成的调用链路
- 1
准备 API Key
在控制台创建密钥,请求头携带 Bearer Token。
- 2
调用大模型(对话 / 图像)
Chat Completions 同步或流式;也可走 Claude Messages / Responses。
- 3
(可选)上传素材
上传素材 → 轮询至 Active。
- 4
生成视频任务
POST 提交异步任务,立即拿到 task_id,不阻塞等待。
- 5
获取任务结果
按 task_id 轮询,succeeded 后从 content.video_url 取成片。
- 6
(可选)同步素材状态
Processing 素材可通过 sync 接口刷新上游状态。
为什么是异步任务?
task_id,状态由后台轮询更新,客户端通过查询接口获取进度与结果, 避免长连接超时。准备工作
API Key、Base URL 与鉴权头
- Base URL:
https://api.modelsai.cn - 鉴权:所有请求携带
Authorization: Bearer <API_KEY> - Content-Type:写操作使用
application/json - 获取密钥:登录控制台→ API Keys → 创建密钥。
# 环境变量export MODELS_AI_API_KEY="sk-你的密钥"export BASE_URL="https://api.modelsai.cn" # 通用请求头# Authorization: Bearer $MODELS_AI_API_KEY# Content-Type: application/json大模型对话
Chat Completions 同步与流式
/v1/chat/completions平台兼容 OpenAI Chat Completions 协议。沿用现有 SDK, 只需把 base_url 指到平台并替换 API Key 即可。stream 为 false 或省略时返回 JSON; 设为 true 时返回 SSE 流。
同步调用
curl -X POST "https://api.modelsai.cn/v1/chat/completions" \ -H "Authorization: Bearer $MODELS_AI_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-4o", "messages": [ {"role": "system", "content": "你是一个简洁的中文助手"}, {"role": "user", "content": "用一句话介绍你自己"} ], "stream": false }'# 响应:choices[0].message.content 为模型回复流式输出
适合聊天机器人、实时字幕等场景;增量内容在 choices[0].delta.content。
curl -N -X POST "https://api.modelsai.cn/v1/chat/completions" \ -H "Authorization: Bearer $MODELS_AI_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-4o", "messages": [ {"role": "user", "content": "写一首关于春天的四行短诗"} ], "stream": true }'# 返回 text/event-stream,逐段输出 data: {...}# 以 data: [DONE] 结束多模态输入(图片理解)
将 content 写成数组,混合 text 与 image_url 条目即可。
from openai import OpenAI client = OpenAI( api_key="YOUR_API_KEY", base_url="https://api.modelsai.cn/v1",) resp = client.chat.completions.create( model="gpt-4o", messages=[ { "role": "user", "content": [ {"type": "text", "text": "这张图里有什么?"}, { "type": "image_url", "image_url": { "url": "https://your-cdn.example.com/photo.jpg", }, }, ], } ],)print(resp.choices[0].message.content)| 字段 | 说明 |
|---|---|
| model | 模型编码,可在「模型广场」或 /v1/models 查看 |
| messages | 对话历史,role 取 system / user / assistant |
| stream | true 返回 text/event-stream,默认 false 返回 JSON |
| temperature / top_p / max_tokens | 采样与长度控制,按模型能力可选 |
推荐用官方 SDK
openai SDK,只改 base_url 与 api_key, 无需改动业务里的 messages 结构。多协议接入
Claude Messages / OpenAI Responses
除 Chat Completions 外,平台还暴露 Anthropic Messages 与 OpenAI Responses 入口,便于已有 Claude / Responses 客户端零改造迁移。
Anthropic Messages
/v1/messages请求头建议携带 anthropic-version: 2023-06-01;Python / Node.js 使用 anthropic SDK,base_url 指向平台根路径 (不含 /v1)。
curl -X POST "https://api.modelsai.cn/v1/messages" \ -H "Authorization: Bearer $MODELS_AI_API_KEY" \ -H "Content-Type: application/json" \ -H "anthropic-version: 2023-06-01" \ -d '{ "model": "claude-sonnet-4-5", "max_tokens": 1024, "messages": [ {"role": "user", "content": "用一句话介绍你自己"} ], "stream": false }'# 响应:content[0].text 为模型回复OpenAI Responses
/v1/responses输入放在 input, 回复文本在 output_text(也可解析 output 结构)。
curl -X POST "https://api.modelsai.cn/v1/responses" \ -H "Authorization: Bearer $MODELS_AI_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-4o", "input": "用一句话介绍你自己", "stream": false }'# 响应:output_text 为模型回复怎么选协议?
图像生成
文生图 Images API
/v1/images/generations文生图走 OpenAI Images 兼容接口。返回 data[].url(或 b64_json,取决于模型与参数)。生成结果请及时落盘或转存, URL 可能有时效。
curl -X POST "https://api.modelsai.cn/v1/images/generations" \ -H "Authorization: Bearer $MODELS_AI_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-image-1", "prompt": "一只橘猫坐在窗台上,柔和光线", "n": 1, "size": "1024x1024" }'# 响应:data[0].url 为图片地址| 字段 | 说明 |
|---|---|
| model | 图像模型编码,见模型广场 |
| prompt | 画面描述,支持中英文 |
| n | 生成张数,默认 1 |
| size | 分辨率,如 1024x1024;以模型支持范围为准 |
获取模型列表
OpenAI 兼容 /v1/models
/v1/models列出当前 API Key 可用的模型。企业专属模型只对已授权账号可见。 前端调试也可直接打开模型广场查看规格与价格。
curl "https://api.modelsai.cn/v1/models" \ -H "Authorization: Bearer $MODELS_AI_API_KEY"# 响应:{ "object": "list", "data": [{ "id": "...", ... }, ...] }生成视频任务
异步提交,立即返回 task_id
/v1/contents/generations/tasks请求体中的 model 为模型编码,content 为多模态输入数组。纯文生视频只需 type=text 条目;图生视频可追加 type=image_url。
文生视频
curl -X POST "https://api.modelsai.cn/v1/contents/generations/tasks" \ -H "Authorization: Bearer $MODELS_AI_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "doubao-seedance-1-0-pro", "content": [ { "type": "text", "text": "一只橘猫在草地上奔跑,电影感镜头,浅景深" } ] }'图生视频
将参考图 URL 放入 content;支持公网可访问的图片地址 (也可先通过素材上传接口获得资产后再引用)。
curl -X POST "https://api.modelsai.cn/v1/contents/generations/tasks" \ -H "Authorization: Bearer $MODELS_AI_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "doubao-seedance-1-0-pro", "content": [ { "type": "image_url", "image_url": { "url": "https://your-cdn.example.com/input.png" } }, { "type": "text", "text": "人物轻轻回头微笑,镜头缓慢推近" } ] }'提交响应
{
"id": "cgt-01j8xk...",
"task_id": "cgt-01j8xk...",
"task_no": "VT20260415...",
"status": "queued",
"model": "doubao-seedance-1-0-pro"
}id / task_id
上游任务 ID,后续查询用它。两者在视频任务中通常相同。
task_no
平台侧任务编号,便于在控制台「视频任务记录」中检索。
计费说明
获取任务结果
轮询状态并取回视频 URL
/v1/contents/generations/tasks/{id}用创建时返回的 id / task_id 查询。非终态时会回查上游刷新进度;终态直接返回缓存结果。
# 将 {id} 替换为创建任务返回的 id / task_idcurl "https://api.modelsai.cn/v1/contents/generations/tasks/{id}" \ -H "Authorization: Bearer $MODELS_AI_API_KEY"成功响应示例
{
"id": "cgt-01j8xk...",
"status": "succeeded",
"content": {
"video_url": "https://ark-content-generation-result.cn/xxx.mp4",
"last_frame_url": "https://.../last_frame.jpg"
},
"usage": {
"prompt_tokens": 120,
"completion_tokens": 1480,
"total_tokens": 1600
}
}任务状态
| 状态 | 含义 | 客户端动作 |
|---|---|---|
| queued | 已受理,排队中 | 继续轮询 |
| running | 生成中 | 继续轮询 |
| succeeded | 生成成功 | 读取 content.video_url |
| failed | 生成失败 | 读取 error,检查参数/额度 |
| expired | 超时未完成已过期 | 可重新提交任务 |
轮询建议
素材上传
上传接口与字段说明
素材用于数字人、图生视频等需要可信输入的场景。 通过素材接口直接上传即可。 上传后状态通常为 Processing, 需等待或同步至 Active 才可用于推理。
/volc/ctyun-assets# 上传素材curl -X POST "https://api.modelsai.cn/volc/ctyun-assets" \ -H "Authorization: Bearer $MODELS_AI_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "url": "https://your-cdn.example.com/avatar.png", "assetType": "Image", "name": "形象图" }'# 响应:{"code":200,"msg":"success","data":789}| 字段 | 类型 | 说明 |
|---|---|---|
| url | string | 公网可访问的图片/视频/音频 URL |
| assetType | string | Image / Video / Audio |
| name | string | 素材名称,便于管理 |
响应包装
{ code, msg, data },成功时 code=200,data 为本地素材 ID。视频任务接口返回上游原始结构 (含 id / task_id / status)。素材状态同步
Processing → Active / Failed
素材上传后由上游异步审核/处理。可通过同步接口主动拉取最新状态, 而不必反复查询列表。
/volc/ctyun-assets/{id}/sync/volc/ctyun-assets/processing/sync# 1) 同步单个素材curl -X POST "https://api.modelsai.cn/volc/ctyun-assets/789/sync" \ -H "Authorization: Bearer $MODELS_AI_API_KEY"# 响应 data 为最新状态:Processing / Active / Failed # 2) 批量同步全部 Processingcurl -X POST "https://api.modelsai.cn/volc/ctyun-assets/processing/sync" \ -H "Authorization: Bearer $MODELS_AI_API_KEY"| 接口 | 返回 | 用途 |
|---|---|---|
| /volc/ctyun-assets/{id}/sync | data = 最新状态字符串 | 刷新单个素材 |
| /volc/ctyun-assets/processing/sync | data = 同步条数 | 批量刷新全部 Processing 素材 |
素材状态
完整示例
素材 → 视频成片的端到端脚本
下面的 Python 脚本串起「上传素材 → 同步状态 → 提交视频任务 → 轮询结果」全流程,可直接改参数试跑。
"""端到端示例:上传素材 → 同步状态 → 生成视频 → 轮询结果依赖:pip install requests"""import osimport timeimport requests BASE = "https://api.modelsai.cn"HEADERS = { "Authorization": f"Bearer {os.environ['MODELS_AI_API_KEY']}", "Content-Type": "application/json",} def api(method, path, json=None, timeout=60): resp = requests.request( method, BASE + path, headers=HEADERS, json=json, timeout=timeout ) resp.raise_for_status() return resp.json() # ---------- 1. 上传素材 ----------asset = api("POST", "/volc/ctyun-assets", { "url": "https://your-cdn.example.com/portrait.png", "assetType": "Image", "name": "demo-portrait",})asset_id = asset["data"]print("asset_id =", asset_id) # ---------- 2. 同步素材状态,等待 Active ----------for _ in range(30): status = api("POST", f"/volc/ctyun-assets/{asset_id}/sync")["data"] print("asset status:", status) if status == "Active": break if status == "Failed": raise SystemExit("素材审核/处理失败,请检查 URL 与内容合规") time.sleep(2) # ---------- 3. 提交视频任务 ----------# 若模型支持素材引用,可将素材 URL 写入 contentcreated = api("POST", "/v1/contents/generations/tasks", { "model": "doubao-seedance-1-0-pro", "content": [ {"type": "text", "text": "人物在窗边看书,自然光,电影感"}, ],})task_id = created.get("id") or created.get("task_id")print("task_id =", task_id) # ---------- 4. 轮询任务直至终态 ----------for _ in range(120): task = api("GET", f"/v1/contents/generations/tasks/{task_id}", timeout=30) status = task.get("status") print("task status:", status) if status == "succeeded": video_url = (task.get("content") or {}).get("video_url") print("video_url =", video_url) break if status in ("failed", "expired"): print("error:", task.get("error")) break time.sleep(5)else: print("轮询超时,请稍后在控制台「视频任务」中查看")状态与常见问题
任务状态机与排错建议
提交后一直 queued / running?
视频生成本身需要时间。按 3–10 秒间隔继续查询;若超过模型常见时长仍无进展,可到控制台「视频任务记录」查看,或联系支持。
返回 failed 怎么办?
查看响应中的 error 字段与控制台任务详情。常见原因:模型名错误、content 结构不合法、余额不足、输入素材未通过审核。
素材一直是 Processing?
调用对应 sync 接口刷新。若长时间不变为 Active,检查 URL 是否公网可访问、文件类型是否匹配 assetType,以及内容合规策略。
素材上传用哪个接口?
使用素材接口 /volc/ctyun-assets 上传。上传后通过 sync 接口刷新状态。
视频任务和素材接口返回格式不一样?
是的。视频任务返回结构含 id/status/content;素材接口是平台 Result 包装(code/msg/data)。解析时请注意区分。
还是卡住了?
可在控制台提交工单(分类选「视频任务」),或查阅完整 API 参考。