跳到主要内容

Sion商商-AI招商方案策划专家

POST 

/v1/skills/stream

使用 new-api Token 调用 Sion商商-AI招商方案策划专家。本页面固定 skill_key=app-mall-leasing-proposal-master,并以 SSE 返回流式结果。

Request

Responses

SSE 流式返回

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 计费。

  1. 第一轮 POST /v1/skills/stream 不必传 session_id
  2. 收到 system:存下 session_id,后续请求都带上。
  3. 收到 token_stats:按事件里的 inputTokens / outputTokens / 缓存字段立即记账(本段增量)。
  4. 收到 turn_media_stats:按 media_summary.image_countvideo_count 以及 images / videos 立即记账(本次新扣的图/视频)。没有新素材时不会下发这条。
  5. 流断开:用同一把 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_idsession_idsequence(同一次 HTTP 请求内递增)、billing_event_idbilling_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_idbilling_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
}