Wanford望步—AI鞋类视频生成专家
POST/v1/skills/stream
使用 new-api Token 调用 Wanford望步—AI鞋类视频生成专家。本页面固定 skill_key=app-footwear-product-video,并以 SSE 返回流式结果。
Request
Responses
- 200
- 400
- 401
- 402
- 403
SSE 流式返回
请求体无效、缺少 skill_key,或 prompt 与 attachments 同时为空。
API Key 无效或缺失
余额不足
API Key 已停用、过期,或无权调用该 Skill。
SSE 流式返回事件说明(通用)
SSE 每条业务消息都通过 data: {json}\n\n 推送,客户端按顶层 type 解析。
type | 含义 | 前端处理建议 |
|---|---|---|
system | 流初始化事件(通常 subtype=init) | 提取平台下发的 session_id,后续请求必须带上 |
assistant | 助手输出内容块(文本/图片/thinking 等) | 作为主消息流渲染 |
user | 工具执行输出 | 建议标记为“工具输出”,不要当作用户手输内容 |
file_upload_request | 请求用户上传图片或文件 | 展示上传入口,上传完成后将文件 URL 组织进下一轮 attachments,并携带同一 session_id 继续调用 /v1/skills/stream |
ask_user_question | 请求用户回答问题或选择选项 | 展示问题和选项,收集答案后组织进下一轮 prompt,并携带同一 session_id 继续调用 /v1/skills/stream |
token_stats | 本轮 token 用量增量(输入/输出/缓存) | 用于展示用量,不要当助手正文渲染。收到后立即扣费 |
turn_media_stats | 本次新扣费的生成图片/视频 | 用于展示用量,不要当助手正文渲染。收到后立即扣费。会话总量自行累加 |
result | 本轮成功结束信号 | 停止流式拼接,进入完成态 |
error | 本轮失败结束信号 | 停止流式拼接,提示错误并允许重试 |
done | 可选的结束提示 | 可用于关闭 loading,但业务完成仍以 result / error 为准 |
heartbeat | 保活事件(JSON data,约每 15 秒一次) | 忽略业务渲染 |
low_balance | 余额低于 Skill 阈值(可能在本轮结束后下发) | 提示充值,不要当流失败处理 |
接入扣费流程
能收到的用量事件就是该记账的增量。把收到的事件累加即可,不要从 assistant 正文抠 URL 计费。
- 第一轮
POST /v1/skills/stream不必传session_id。 - 收到
system:存下session_id,后续请求都带上。 - 收到
token_stats:按事件里的inputTokens/outputTokens/ 缓存字段立即记账(本段增量)。 - 收到
turn_media_stats:按media_summary.image_count、video_count以及images/videos立即记账(本次新扣的图/视频)。没有新素材时不会下发这条。 - 流断开:用同一把 Key 调用
GET /v1/skills/usage?session_id=...对账;重连带上该session_id,已扣过的图/视频不会再下发。
本地落账时可用 billing_event_id 做幂等键。
补充说明:
- 流中会定期收到
{"type":"heartbeat"},用于保活,忽略业务渲染即可。 - 流结束时可能出现
data: [DONE],按传输结束处理,不是业务事件。 - 用户补充输入(回答追问、回传上传结果等)通过下一轮
POST /v1/skills/stream继续,并带上同一session_id。 - 对未知
type做“可观测但不阻断”处理(记录日志 + 忽略渲染)。流中还可能出现stream_event等额外事件,同样忽略渲染。 token_stats/turn_media_stats是本轮/本段增量,会话总量需自行累加。用量事件会带上request_id、session_id、sequence(同一次 HTTP 请求内递增)、billing_event_id、billing_mode: "delta"、billable。turn_media_stats只在本次有新的图片/视频 URL 扣费时下发。media_summary.images/videos以及数量就是本次扣费内容。已扣过的 URL 在重连时不会再下发、也不会再扣。- 收到用量事件时按事件实时扣费;整段流都没有这两类事件时,才在流结束时按汇总用量扣费。
- 第一轮不必自带
session_id。从首个system事件取出平台下发的session_id,后续请求必须带上。SSE 建连成功后立刻记下响应头X-Oneapi-Request-Id。若连接中断但已经扣费,用同一把 API Key 调用GET /v1/skills/usage。优先用下发的session_id;已读到响应头可用request_id;billing_event_id只能对上已经收到的那一条用量事件。
file_upload_request 示例:
{
"type": "file_upload_request",
"questionId": "d7078aab-b67a-427d-ac0c-a87bb7e07dcf",
"uploads": [
{
"prompt": "上传您的服装或 lookbook 图片即可开始(JPG/PNG,支持多张)",
"header": "服装图片",
"accept": "image/*",
"description": "支持 JPG、PNG、WebP 格式"
}
]
}
ask_user_question 示例:
{
"type": "ask_user_question",
"toolUseId": "eabec243-a985-458d-a3e0-50f7fa8e128e",
"questionId": "eabec243-a985-458d-a3e0-50f7fa8e128e",
"questions": [
{
"question": "今天由哪位大师为你设计?",
"header": "选择你的大师",
"options": [
{
"label": "可可·香奈儿",
"value": "Coco Chanel",
"description": "通过简约解放身体——释放身体,磨砺心智"
},
{
"label": "克里斯汀·迪奥",
"value": "Christian Dior",
"description": "新风貌——女性美的建筑学"
}
]
}
]
}
token_stats 示例:
{
"type": "token_stats",
"turn_id": "turn-1",
"inputTokens": 500,
"outputTokens": 100,
"cacheReadInputTokens": 0,
"cacheCreationInputTokens": 0,
"request_id": "req-123",
"session_id": "sess_abc123",
"sequence": 1,
"billing_event_id": "skill:req-123:sess_abc123:turn-1:token_stats:1",
"billing_mode": "delta",
"billable": true
}
turn_media_stats 示例:
{
"type": "turn_media_stats",
"turn_id": "turn-1",
"media_summary": {
"image_count": 1,
"video_count": 1,
"images": [
{
"url": "https://assets.example.com/a.png"
}
],
"videos": [
{
"url": "https://assets.example.com/v.mp4",
"duration_seconds": 3.5
}
]
},
"request_id": "req-123",
"session_id": "sess_abc123",
"sequence": 2,
"billing_event_id": "skill:req-123:sess_abc123:turn-1:turn_media_stats:2",
"billing_mode": "delta",
"billable": true
}