同款素材生成

更新时间:
复制 MD 格式

基于多模态大模型(MLLM)+ 图文结构化抽取构建的商品详情素材自动生成产品,面向电商平台 / 品牌商的商品详情页素材补齐场景。

1、产品简介

基于多模态大模型(MLLM)+ 图文结构化抽取构建的商品详情素材自动生成产品,面向电商平台 / 品牌商的商品详情页素材补齐场景。调用方推送待查询商品信息(商品 ID、标题、品牌、主图、店铺名),产品自动定位其同款商品并做一致性校验,再从同款商品详情中抽取尺码信息与商品属性,渲染为可直接用于详情页的尺码图与属性图(SVG),同时返回结构化的详情文案分类与处理备注。

同款采集与图文抽取均为跨天耗时任务(T 日提交,T+3.5 日起才可发起查询),因此本产品以异步方式提供 2 个接口:

  1. T 日调用提交接口创建识别任务;

  2. 获取返回的 TaskId 并持久化落库(提交与查询相隔 3.5 个自然日);

  3. T+3.5 日起使用 TaskId 调用查询接口查询任务结果;

  4. 当任务进入终态(COMPLETED / FAILED)后停止查询。

2、适用场景

  1. 详情素材补齐:商品缺少尺码图 / 属性图时,自动从同款商品详情中还原并渲染出图,替代人工找图、抠图、排版。

  2. 尺码信息结构化沉淀:把散落在同款详情长图里的尺码表抽取为结构化数据,可入库复用。

  3. 详情文案治理:把同款详情文案自动归入 8 类(marketing / feature / material / style / scenario / service / compliance / noise),供内容审核与二次编排使用。

3、功能介绍

  1. 同款校验前置:先定位候选同款,再由多模态大模型做品牌一致性与主图图像一致性校验;校验不通过即判定为 no_match,不会用错款商品的尺码去出图(尺码错一位即退货,宁缺毋滥)。

  2. 尺码抽取与多表融合:同一商品可能有多张尺码表(不同版型 / 性别 / 年龄段),产品对多表做抽取与融合,输出尺码图与选码建议;单位不默认,源数据未明确给出时不凭空补 cm。

  3. 属性抽取与融合:结构化属性与详情图中的属性描述融合,同名属性自动合并(+ 串接),避免图上出现多行同名属性。

  4. 素材渲染与托管:尺码图 / 属性图以 SVG 渲染(矢量、体积小、任意缩放不失真),上传至对象存储并返回可访问 URL;URL 中的 hash 取自 SVG 内容,内容不变则 URL 不变,相同渲染结果复用同一 URL。

  5. 逐条可解释:notes 数组回传处理过程中的提示、告警与审计信息(如「图片清洗阶段丢弃 7 张无效图」「未产出任何文案分类」),且不混入 sizeImageUrl / attrImageUrl / textClassification 业务字段。

  6. 支持的输入格式:当前支持公网可访问的商品主图 URL + 商品文本信息;单商品一次提交,输出结构统一。

4、开发指南

4.0 调用模式(异步:提交 + 查询)

#

接口

作用

关键返回

①

提交接口

创建识别任务,立即返回,不等待处理完成

Data.TaskId

②

查询接口

用 TaskId 查询任务状态与识别结果

Data.Status + Data.Result

调用方                          本产品服务端                同款数据源      识别与抽取引擎
  │                                 │                          │               │
  │── ① 提交识别任务 ─────────────▶│                          │               │
  │◀─ ②  返回 TaskId ───────────────│                          │               │
  │                                 │── ③ 提交同款采集 ───────▶│               │
  │                                 │                          │(跨天采集T~T+3)│
  │                                 │◀─ ④ 拿到同款候选 ────────│               │
  │                                 │                                          │
  │                                 │── ⑤ 同款校验 / 尺码属性抽取 / 文案分类 ─▶│
  │                                 │◀─ ⑥ 结构化结果 ─────────────────────────│
  │                                 │                                          │
  │                                 │── ⑦ 渲染 SVG → ⑧ 上传对象存储 → URL      │
  │                                 │                                          │
  │── ⑨ T+3.5 日起用 TaskId 查询 ───▶│                                          │
  │◀─ ⑩ 返回 Status + Result ───────│                                          │

处理周期(供查询调度参考)

阶段

外层 Data.Status

时间

排队受理

QUEUED

T 日提交,秒级受理

同款采集

RUNNING

T 日 ~ T+3.5 日,跨天异步采集(主要耗时环节)

识别与抽取

RUNNING

秒级

渲染与上传

RUNNING

秒级

端到端

—

T 日提交,T+3.5 日起可查询到终态结果

⚠️ 本接口不是分钟级返回:提交当日及 T+1 / T+2 查询几乎必然是 QUEUED / RUNNING,请按天调度查询,勿做秒级轮询(见 4.3)。

4.1 提交接口 —— 创建同款识别任务

项

设定

调用模式

同步 HTTP POST,Body 为 JSON

响应

立即返回 Data.TaskId,不等待处理完成

原始请求留存

服务端按天留存一份原始 JSON,作为字段语义争议时的凭据

4.1.1 请求参数

参数名

类型

必填

说明

缺失影响

ItemId

String

是

调用方侧商品 ID,全链路溯源主键,回传在 Result.data.baseInfo.itemId

无法入池

ImageUrl

String

是

商品主图 URL(公网可访问),用于同款校验的图像一致性判定

图像一致性无法执行,链路不可用

ShopName

String

是

商品所属店铺名,用于品牌提取;回传在 Result.data.baseInfo.shopName

失去品牌否决能力

Title

String

是

商品标题,用于同款检索

无法提交同款采集

BrandName

String

否

商品品牌

—

ProductUrl

String

否

商品详情页 URL,仅用于溯源,不影响识别结果

溯源信息少一项

Category

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 响应参数

字段

类型

必有

说明

RequestId

String

✅

本次接口调用的链路标识,每次调用都不同,不可用于查询任务

Code

String

✅

调用状态码,成功为 success

Message

String

✅

调用状态描述,成功为 Success

Success

Bool

✅

调用是否成功,成功为 true

Data

Object

⬜

业务数据对象,Success = true 时返回

└ TaskId

String

✅

异步任务 ID,用于查询任务结果;提交与查询跨 3.5 个自然日,请务必与 ItemId 一并持久化落库

└ SubmittedAt

String

✅

服务端受理任务的时间,UTC ISO 8601 格式;其自然日即为 T 日,T+3 由此推算

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 = 提交日,取提交响应 Data.SubmittedAt 的自然日)

计费

查询接口不计费;但请按 T+3.5 日起的按天节奏调度,不做高频轮询

4.2.1 请求参数

参数名

类型

必填

说明

taskId

String

是

提交接口返回的 Data.TaskId

注意大小写:提交接口响应中为 Data.TaskId(大驼峰),查询接口请求中为 taskId(小驼峰),按网关规范原样使用,勿自行统一。

4.2.2 请求示例

{
  "taskId": "3a7754d6048642778eba01253ea18068"
}

4.2.3 响应参数

顶层字段:

字段

类型

必有

说明

RequestId

String

✅

本次接口调用的链路标识(每次轮询都不同)

Code / Message / Success

String / String / Bool

✅

调用状态,成功为 success / Success / true

Data

Object

⬜

任务数据对象

Data 内部结构:

字段

类型

必有

说明

Data.TaskId

String

✅

原样回传的任务 ID

Data.Status

String

✅

网关异步任务状态:QUEUED / RUNNING / COMPLETED / FAILED

Data.UsageMap

Object

⬜

处理计数,形如 {"ProcessingCount": 1};任务进入终态后返回

Data.Result

String

⬜

业务结果,JSON 字符串;Data.Status = COMPLETED / FAILED 时返回,需反序列化后读取

Data.Result 反序列化后结构:

字段

类型

必有

说明

code

String

✅

业务码,正常为字符串 "0"

message

String

✅

业务描述,正常为 Success

success

Bool

✅

业务是否正常执行

status

String

✅

业务识别结果:success(找到同款并出图) / no_match(未找到同款) / failed(识别失败)

data

Object

✅

业务数据;status = no_match 时仅含 requestId

└ requestId

String

✅

任务标识,与 Data.TaskId 一致

└ baseInfo

Object

⬜

请求商品基本信息回显,status = success 时返回

└ itemId

String

✅

原样回传提交时的 ItemId

└ shopName

String

✅

原样回传提交时的 ShopName

└ sizeImageUrl

String|null

⬜

尺码图 SVG URL;无尺码数据时字段存在,值为 null

└ attrImageUrl

String|null

⬜

属性图 SVG URL;无属性数据时字段存在,值为 null(实际商品通常都有属性)

└ textClassification

Object

⬜

详情文案 8 类分类,8 个 key 恒存在,值均为数组,可能全空

└ marketing

Array

✅

营销卖点

└ feature

Array

✅

功能特性

└ material

Array

✅

材质成分

└ style

Array

✅

款式风格

└ scenario

Array

✅

使用场景

└ service

Array

✅

服务承诺

└ compliance

Array

✅

合规声明

└ noise

Array

✅

噪声文案(无业务价值)

└ notes

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 状态判断与查询节奏

状态判断矩阵

外层 Data.Status

内层 Result.status

含义

是否继续查询

QUEUED

-

等待处理

是

RUNNING

-

正在处理(同款采集 / 识别抽取 / 渲染上传);T+3 之前基本都在此状态

是

COMPLETED

success

识别成功且找到同款

否

COMPLETED

no_match

识别完成但未找到同款

否

FAILED

failed

识别失败

否

外层 Data.Status 表示网关异步任务状态;实际同款识别结果保存在字符串类型的 Data.Result 中,需反序列化后读取其 status 与 data 字段。
Data.Status ∈ {QUEUED, RUNNING} 时 Data.Result 不返回,请勿直接反序列化。

接入要求

要求

说明

首次查询时机

T+3.5 日(T = 提交日,取 Data.SubmittedAt 的自然日);T+3 之前查询几乎必然是 QUEUED / RUNNING,无法加快处理

查询节奏

按天定时批量查询(建议 T+3.5 日起每日 1~2 次);不要做秒级 / 分钟级轮询

未终态时

T+3.5 日仍为 QUEUED / RUNNING 时,次日继续按日查询,不需重提(重提会重复计费)

停止查询条件

Data.Status ∈ {COMPLETED, FAILED}

超时判定

超期未终态的判定阈值与服务端熔断时间待确认(见 6 章);建议调用侧先按“T+3 起连续查询仍未终态则告警”接入

任务落库

提交与查询跨 3.5 个自然日,TaskId 必须与 ItemId 一并持久化,并记录 SubmittedAt 以计算可查询日

提交重试

5xx / 超时 退避重试 3 次(3s / 6s / 12s + 随机抖动);4xx 不重试(重试无意义且掩盖问题)

漏斗计数

建议按批次统计 提交数 → COMPLETED 数 → status=success 数 → 出图数;注意提交批次(T 日)与回收批次(T+3.5 日)不在同一天,对账需按提交日归集

4.4 素材 URL 说明

sizeImageUrl / attrImageUrl 指向的素材按以下 key 规则存储于对象存储:

same-item/render/{tenantId}/{yyyymmdd}/{ItemId}/{size|attr}_{sha1前10位}.svg

项

说明

tenantId

客户 / 租户隔离

sha1

取自 SVG 内容,内容不变则 URL 不变,可直接用于缓存判重

格式

固定 SVG;如业务侧需要 PNG / JPG,请在消费端自行转换

生命周期

按该前缀配置 7 天自动清理(自素材生成日起算,即大致 T+3 ~ T+10),请在有效期内转存到自有存储再对外投放

4.5 异常处理

场景

外层 Data.Status

内层 Result.status

出参表现

无尺码 / 规格表数据

COMPLETED

success

sizeImageUrl 字段存在,值为 null

无属性数据

COMPLETED

success

attrImageUrl 字段存在,值为 null

SVG 渲染异常

COMPLETED

success

对应图片字段存在但值为 null,notes 记录原因

素材上传失败

COMPLETED

success

重试 3 次仍失败则该图为 null

素材 URL 不可访问

COMPLETED

success

上传后做 HEAD 探测,失败则服务端告警

未找到同款 / 同款校验未通过

COMPLETED

no_match

data 内仅含 requestId

主图不可下载

FAILED

failed

失败原因见内层 message

识别与抽取环节运行失败

FAILED

failed

不进入渲染,失败原因见内层 message

同款采集超期未结束

FAILED

failed

服务端熔断 + 告警,内层 message 标注超时(熔断阈值待确认,见 6 章)

4.6 错误码

网关级错误码(顶层 Code,Success = false,Data 为 null)

Code

含义

处理建议

success

调用成功

—

InvalidParameter

必填参数缺失或格式非法

修正入参,不重试

TaskNotFound

taskId 不存在或已过期

核对 taskId;如需重跑请重新提交

Throttling

超出 QPS / 并发配额

退避后重试

InternalError

服务内部错误

退避重试 3 次,仍失败请联系支持

业务级失败:任务本身失败时,网关调用仍成功(顶层 Code = success、Success = true),失败信息位于 Data.Status = FAILED + 内层 Result.status = failed + 内层 message。请勿仅凭顶层字段判定成功。

平台公共错误码:https://help.aliyun.com/document_detail/3038043.html

5、计费方式

项

说明

计费接口

仅提交接口计费,查询接口免费

计费口径

按 Data.UsageMap.ProcessingCount 计数

不计费

提交失败(顶层 Success = false,如参数非法 / 品牌无法确定)

计费

status = no_match 与 status = failed 已消耗同款采集与识别算力,按提交计费(ProcessingCount = 1)

6、约束

项

约束

处理周期

T 日提交,T+3.5 日起才可发起查询;本接口不提供分钟级回归,不适用于实时链路

任务态保存

调用方需自行持久化 TaskId / ItemId / SubmittedAt,服务端不提供按 ItemId 反查任务的接口

输入图片

商品主图需公网可访问;如有防盗链,请提供无 Referer 限制的 URL 或 OSS 直链,否则任务以 FAILED / failed 结束

输出格式

素材固定为 SVG,不提供 PNG / JPG 转换

素材有效期

自素材生成日起 7 天,请在拉取到 URL 后尽快转存

明确不做

不做 0→1 文生图(数字保真率不足,尺码错一位即退货);不做同款商品采集能力对外输出;不做详情长图切片