基于多模态大模型(MLLM)+ 图文结构化抽取构建的商品详情素材自动生成产品,面向电商平台 / 品牌商的商品详情页素材补齐场景。
1、产品简介
基于多模态大模型(MLLM)+ 图文结构化抽取构建的商品详情素材自动生成产品,面向电商平台 / 品牌商的商品详情页素材补齐场景。调用方推送待查询商品信息(商品 ID、标题、品牌、主图、店铺名),产品自动定位其同款商品并做一致性校验,再从同款商品详情中抽取尺码信息与商品属性,渲染为可直接用于详情页的尺码图与属性图(SVG),同时返回结构化的详情文案分类与处理备注。
同款采集与图文抽取均为跨天耗时任务(T 日提交,T+3.5 日起才可发起查询),因此本产品以异步方式提供 2 个接口:
T 日调用提交接口创建识别任务;
获取返回的
TaskId并持久化落库(提交与查询相隔 3.5 个自然日);T+3.5 日起使用
TaskId调用查询接口查询任务结果;当任务进入终态(
COMPLETED/FAILED)后停止查询。
2、适用场景
详情素材补齐:商品缺少尺码图 / 属性图时,自动从同款商品详情中还原并渲染出图,替代人工找图、抠图、排版。
尺码信息结构化沉淀:把散落在同款详情长图里的尺码表抽取为结构化数据,可入库复用。
详情文案治理:把同款详情文案自动归入 8 类(
marketing/feature/material/style/scenario/service/compliance/noise),供内容审核与二次编排使用。
3、功能介绍
同款校验前置:先定位候选同款,再由多模态大模型做品牌一致性与主图图像一致性校验;校验不通过即判定为
no_match,不会用错款商品的尺码去出图(尺码错一位即退货,宁缺毋滥)。尺码抽取与多表融合:同一商品可能有多张尺码表(不同版型 / 性别 / 年龄段),产品对多表做抽取与融合,输出尺码图与选码建议;单位不默认,源数据未明确给出时不凭空补
cm。属性抽取与融合:结构化属性与详情图中的属性描述融合,同名属性自动合并(
+串接),避免图上出现多行同名属性。素材渲染与托管:尺码图 / 属性图以 SVG 渲染(矢量、体积小、任意缩放不失真),上传至对象存储并返回可访问 URL;URL 中的 hash 取自 SVG 内容,内容不变则 URL 不变,相同渲染结果复用同一 URL。
逐条可解释:
notes数组回传处理过程中的提示、告警与审计信息(如「图片清洗阶段丢弃 7 张无效图」「未产出任何文案分类」),且不混入sizeImageUrl/attrImageUrl/textClassification业务字段。支持的输入格式:当前支持公网可访问的商品主图 URL + 商品文本信息;单商品一次提交,输出结构统一。
4、开发指南
4.0 调用模式(异步:提交 + 查询)
# | 接口 | 作用 | 关键返回 |
① | 提交接口 | 创建识别任务,立即返回,不等待处理完成 |
|
② | 查询接口 | 用 |
|
调用方 本产品服务端 同款数据源 识别与抽取引擎
│ │ │ │
│── ① 提交识别任务 ─────────────▶│ │ │
│◀─ ② 返回 TaskId ───────────────│ │ │
│ │── ③ 提交同款采集 ───────▶│ │
│ │ │(跨天采集T~T+3)│
│ │◀─ ④ 拿到同款候选 ────────│ │
│ │ │
│ │── ⑤ 同款校验 / 尺码属性抽取 / 文案分类 ─▶│
│ │◀─ ⑥ 结构化结果 ─────────────────────────│
│ │ │
│ │── ⑦ 渲染 SVG → ⑧ 上传对象存储 → URL │
│ │ │
│── ⑨ T+3.5 日起用 TaskId 查询 ───▶│ │
│◀─ ⑩ 返回 Status + Result ───────│ │
处理周期(供查询调度参考)
阶段 | 外层 | 时间 |
排队受理 |
| T 日提交,秒级受理 |
同款采集 |
| T 日 ~ T+3.5 日,跨天异步采集(主要耗时环节) |
识别与抽取 |
| 秒级 |
渲染与上传 |
| 秒级 |
端到端 | — | T 日提交,T+3.5 日起可查询到终态结果 |
⚠️ 本接口不是分钟级返回:提交当日及 T+1 / T+2 查询几乎必然是QUEUED/RUNNING,请按天调度查询,勿做秒级轮询(见 4.3)。
4.1 提交接口 —— 创建同款识别任务
项 | 设定 |
调用模式 | 同步 HTTP POST,Body 为 JSON |
响应 | 立即返回 |
原始请求留存 | 服务端按天留存一份原始 JSON,作为字段语义争议时的凭据 |
4.1.1 请求参数
参数名 | 类型 | 必填 | 说明 | 缺失影响 |
| String | 是 | 调用方侧商品 ID,全链路溯源主键,回传在 | 无法入池 |
| String | 是 | 商品主图 URL(公网可访问),用于同款校验的图像一致性判定 | 图像一致性无法执行,链路不可用 |
| String | 是 | 商品所属店铺名,用于品牌提取;回传在 | 失去品牌否决能力 |
| String | 是 | 商品标题,用于同款检索 | 无法提交同款采集 |
| String | 否 | 商品品牌 | — |
| String | 否 | 商品详情页 URL,仅用于溯源,不影响识别结果 | 溯源信息少一项 |
| String | 否 | 商品类目名,扩展字段 | — |
4.1.2 请求示例
{
"ItemId": "228516909",
"Title": "FILA 儿童训练鞋",
"BrandName": "FILA",
"ImageUrl": "https://example.com/items/228516909/main.jpg",
"ShopName": "FILA斐乐官方旗舰店",
"ProductUrl": "https://example.com/items/228516909",
"Category": "童鞋"
}
4.1.3 响应参数
字段 | 类型 | 必有 | 说明 |
| String | ✅ | 本次接口调用的链路标识,每次调用都不同,不可用于查询任务 |
| String | ✅ | 调用状态码,成功为 |
| String | ✅ | 调用状态描述,成功为 |
| Bool | ✅ | 调用是否成功,成功为 |
| Object | ⬜ | 业务数据对象, |
└ | String | ✅ | 异步任务 ID,用于查询任务结果;提交与查询跨 3.5 个自然日,请务必与 |
└ | String | ✅ | 服务端受理任务的时间,UTC ISO 8601 格式;其自然日即为 T 日, |
4.1.4 响应示例
1)提交成功
{
"RequestId": "01A05BD6-A1A6-1950-8E0E-75E55A3C5DC8",
"Code": "success",
"Message": "Success",
"Success": true,
"Data": {
"TaskId": "3a7754d6048642778eba01253ea18068",
"SubmittedAt": "2026-09-04T09:30:00Z"
}
}
2)必填参数缺失 —— 提交失败
关键字段缺失时服务端记 reject_reason 并计数,不用空串填充后往下游传。
{
"RequestId": "5F2C9B41-77D3-1C22-8F31-1E5B31A0C912",
"Code": "InvalidParameter",
"Message": "missing required parameter: ImageUrl",
"Success": false,
"Data": null
}
3)品牌无法确定 —— 提交失败
{
"RequestId": "9AC2B0E1-2E45-1907-B0AA-6D5E19C7A331",
"Code": "InvalidParameter",
"Message": "BrandName is empty and cannot be derived from ShopName",
"Success": false,
"Data": null
}
4.2 查询接口 —— 查询异步任务结果
项 | 设定 |
调用模式 | 同步 HTTP POST,Body 为 JSON |
最早可查询时间 | T+3.5 日(T = 提交日,取提交响应 |
计费 | 查询接口不计费;但请按 T+3.5 日起的按天节奏调度,不做高频轮询 |
4.2.1 请求参数
参数名 | 类型 | 必填 | 说明 |
| String | 是 | 提交接口返回的 |
注意大小写:提交接口响应中为Data.TaskId(大驼峰),查询接口请求中为taskId(小驼峰),按网关规范原样使用,勿自行统一。
4.2.2 请求示例
{
"taskId": "3a7754d6048642778eba01253ea18068"
}
4.2.3 响应参数
顶层字段:
字段 | 类型 | 必有 | 说明 |
| String | ✅ | 本次接口调用的链路标识(每次轮询都不同) |
| String / String / Bool | ✅ | 调用状态,成功为 |
| Object | ⬜ | 任务数据对象 |
Data 内部结构:
字段 | 类型 | 必有 | 说明 |
| String | ✅ | 原样回传的任务 ID |
| String | ✅ | 网关异步任务状态: |
| Object | ⬜ | 处理计数,形如 |
| String | ⬜ | 业务结果,JSON 字符串; |
Data.Result 反序列化后结构:
字段 | 类型 | 必有 | 说明 |
| String | ✅ | 业务码,正常为字符串 |
| String | ✅ | 业务描述,正常为 |
| Bool | ✅ | 业务是否正常执行 |
| String | ✅ | 业务识别结果: |
| Object | ✅ | 业务数据; |
└ | String | ✅ | 任务标识,与 |
└ | Object | ⬜ | 请求商品基本信息回显, |
└ | String | ✅ | 原样回传提交时的 |
└ | String | ✅ | 原样回传提交时的 |
└ | String|null | ⬜ | 尺码图 SVG URL;无尺码数据时字段存在,值为 |
└ | String|null | ⬜ | 属性图 SVG URL;无属性数据时字段存在,值为 |
└ | Object | ⬜ | 详情文案 8 类分类,8 个 key 恒存在,值均为数组,可能全空 |
└ | Array | ✅ | 营销卖点 |
└ | Array | ✅ | 功能特性 |
└ | Array | ✅ | 材质成分 |
└ | Array | ✅ | 款式风格 |
└ | Array | ✅ | 使用场景 |
└ | Array | ✅ | 服务承诺 |
└ | Array | ✅ | 合规声明 |
└ | Array | ✅ | 噪声文案(无业务价值) |
└ | Array | ⬜ | 处理备注(提示 / 告警 / 审计),可为空数组 |
4.2.4 响应示例
1)任务处理中(T+3 之前查询的正常表现)
{
"RequestId": "01A05BD6-A1A6-1950-8E0E-75E55A3C5DC8",
"Code": "success",
"Message": "Success",
"Success": true,
"Data": {
"TaskId": "3a7754d6048642778eba01253ea18068",
"Status": "RUNNING"
}
}
2)识别到同款
{
"RequestId": "01A05BD6-A1A6-1950-8E0E-75E55A3C5DC8",
"Code": "success",
"Message": "Success",
"Success": true,
"Data": {
"TaskId": "3a7754d6048642778eba01253ea18068",
"Status": "COMPLETED",
"UsageMap": {
"ProcessingCount": 1
},
"Result": "{\"code\":\"0\",\"data\":{\"requestId\":\"3a7754d6048642778eba01253ea18068\",\"baseInfo\":{\"itemId\":\"228516909\",\"shopName\":\"FILA斐乐官方旗舰店\"},\"sizeImageUrl\":\"https://example.com/size.svg\",\"attrImageUrl\":\"https://example.com/attr.svg\",\"textClassification\":{\"marketing\":[],\"feature\":[],\"material\":[],\"style\":[],\"scenario\":[],\"service\":[],\"compliance\":[],\"noise\":[]},\"notes\":[]},\"message\":\"Success\",\"status\":\"success\",\"success\":true}"
}
}
解析 Data.Result 后的业务结果:
{
"code": "0",
"data": {
"requestId": "3a7754d6048642778eba01253ea18068",
"baseInfo": {
"itemId": "228516909",
"shopName": "FILA斐乐官方旗舰店"
},
"sizeImageUrl": "https://example.com/size.svg",
"attrImageUrl": "https://example.com/attr.svg",
"textClassification": {
"marketing": [],
"feature": [],
"material": [],
"style": [],
"scenario": [],
"service": [],
"compliance": [],
"noise": [ ]
},
"notes": [ ]
},
"message": "Success",
"status": "success",
"success": true
}
3)识别到同款,但该商品无尺码数据 —— sizeImageUrl 为 null
解析 Data.Result 后的业务结果(外层结构同上,略):
{
"code": "0",
"data": {
"requestId": "5c88f1e2a4b1490d9f2b7c3d6e8a0b12",
"baseInfo": {
"itemId": "230972423",
"shopName": "某品牌童装官方旗舰店"
},
"sizeImageUrl": null,
"attrImageUrl": "https://example.com/attr.svg",
"textClassification": {
"marketing": [],
"feature": ["透气速干"],
"material": ["涤纶 100%"],
"style": [],
"scenario": ["日常通勤"],
"service": ["七天无理由退换"],
"compliance": [],
"noise": [ ]
},
"notes": ["该商品无尺码/规格表数据,未生成尺码图", "图片清洗阶段丢弃 7 张无效图"]
},
"message": "Success",
"status": "success",
"success": true
}
4)未识别到同款
{
"RequestId": "01A05BD6-A1A6-1950-8E0E-75E55A3C5DC8",
"Code": "success",
"Message": "Success",
"Success": true,
"Data": {
"TaskId": "3a7754d6048642778eba01253ea18068",
"Status": "COMPLETED",
"UsageMap": {
"ProcessingCount": 1
},
"Result": "{\"code\":\"0\",\"data\":{\"requestId\":\"3a7754d6048642778eba01253ea18068\"},\"message\":\"Success\",\"status\":\"no_match\",\"success\":true}"
}
}
解析 Data.Result 后的业务结果 —— data 内仅含 requestId,无 baseInfo 与图片 URL:
{
"code": "0",
"data": {
"requestId": "3a7754d6048642778eba01253ea18068"
},
"message": "Success",
"status": "no_match",
"success": true
}
5)识别失败
{
"RequestId": "01A05BD6-A1A6-1950-8E0E-75E55A3C5DC8",
"Code": "success",
"Message": "Success",
"Success": true,
"Data": {
"TaskId": "3a7754d6048642778eba01253ea18068",
"Status": "FAILED",
"UsageMap": {
"ProcessingCount": 1
},
"Result": "{\"code\":\"0\",\"data\":{\"requestId\":\"3a7754d6048642778eba01253ea18068\"},\"message\":\"download main image failed after 3 retries: 403\",\"status\":\"failed\",\"success\":true}"
}
}
6)taskId 不存在或已过期
{
"RequestId": "3B71D2A8-2E45-1907-B0AA-6D5E19C7A331",
"Code": "TaskNotFound",
"Message": "task not found or expired: 3a7754d6048642778eba01253ea18068",
"Success": false,
"Data": null
}
4.3 状态判断与查询节奏
状态判断矩阵
外层 | 内层 | 含义 | 是否继续查询 |
| - | 等待处理 | 是 |
| - | 正在处理(同款采集 / 识别抽取 / 渲染上传);T+3 之前基本都在此状态 | 是 |
|
| 识别成功且找到同款 | 否 |
|
| 识别完成但未找到同款 | 否 |
|
| 识别失败 | 否 |
外层Data.Status表示网关异步任务状态;实际同款识别结果保存在字符串类型的Data.Result中,需反序列化后读取其status与data字段。
Data.Status ∈ {QUEUED, RUNNING}时Data.Result不返回,请勿直接反序列化。
接入要求
要求 | 说明 |
首次查询时机 | T+3.5 日(T = 提交日,取 |
查询节奏 | 按天定时批量查询(建议 T+3.5 日起每日 1~2 次);不要做秒级 / 分钟级轮询 |
未终态时 | T+3.5 日仍为 |
停止查询条件 |
|
超时判定 | 超期未终态的判定阈值与服务端熔断时间待确认(见 6 章);建议调用侧先按“T+3 起连续查询仍未终态则告警”接入 |
任务落库 | 提交与查询跨 3.5 个自然日, |
提交重试 | 5xx / 超时 退避重试 3 次(3s / 6s / 12s + 随机抖动);4xx 不重试(重试无意义且掩盖问题) |
漏斗计数 | 建议按批次统计 |
4.4 素材 URL 说明
sizeImageUrl / attrImageUrl 指向的素材按以下 key 规则存储于对象存储:
same-item/render/{tenantId}/{yyyymmdd}/{ItemId}/{size|attr}_{sha1前10位}.svg
项 | 说明 |
| 客户 / 租户隔离 |
| 取自 SVG 内容,内容不变则 URL 不变,可直接用于缓存判重 |
格式 | 固定 SVG;如业务侧需要 PNG / JPG,请在消费端自行转换 |
生命周期 | 按该前缀配置 7 天自动清理(自素材生成日起算,即大致 T+3 ~ T+10),请在有效期内转存到自有存储再对外投放 |
4.5 异常处理
场景 | 外层 | 内层 | 出参表现 |
无尺码 / 规格表数据 |
|
|
|
无属性数据 |
|
|
|
SVG 渲染异常 |
|
| 对应图片字段存在但值为 |
素材上传失败 |
|
| 重试 3 次仍失败则该图为 |
素材 URL 不可访问 |
|
| 上传后做 HEAD 探测,失败则服务端告警 |
未找到同款 / 同款校验未通过 |
|
|
|
主图不可下载 |
|
| 失败原因见内层 |
识别与抽取环节运行失败 |
|
| 不进入渲染,失败原因见内层 |
同款采集超期未结束 |
|
| 服务端熔断 + 告警,内层 |
4.6 错误码
网关级错误码(顶层 Code,Success = false,Data 为 null)
| 含义 | 处理建议 |
| 调用成功 | — |
| 必填参数缺失或格式非法 | 修正入参,不重试 |
|
| 核对 |
| 超出 QPS / 并发配额 | 退避后重试 |
| 服务内部错误 | 退避重试 3 次,仍失败请联系支持 |
业务级失败:任务本身失败时,网关调用仍成功(顶层 Code = success、Success = true),失败信息位于 Data.Status = FAILED + 内层 Result.status = failed + 内层 message。请勿仅凭顶层字段判定成功。
平台公共错误码:https://help.aliyun.com/document_detail/3038043.html
5、计费方式
项 | 说明 |
计费接口 | 仅提交接口计费,查询接口免费 |
计费口径 | 按 |
不计费 | 提交失败(顶层 |
计费 |
|
6、约束
项 | 约束 |
处理周期 | T 日提交,T+3.5 日起才可发起查询;本接口不提供分钟级回归,不适用于实时链路 |
任务态保存 | 调用方需自行持久化 |
输入图片 | 商品主图需公网可访问;如有防盗链,请提供无 Referer 限制的 URL 或 OSS 直链,否则任务以 |
输出格式 | 素材固定为 SVG,不提供 PNG / JPG 转换 |
素材有效期 | 自素材生成日起 7 天,请在拉取到 URL 后尽快转存 |
明确不做 | 不做 0→1 文生图(数字保真率不足,尺码错一位即退货);不做同款商品采集能力对外输出;不做详情长图切片 |