v110-v112 自定义模式完善 + 模板导出增强 + 多模态兼容优化
- 自定义模式:分析模型输出 delta 唯一改动指令,生图模板 custom_image_prompt.md({delta} 占位符),不再使用负向提示词;generate_design 按 custom_mode 分支,Pinterest 模式保留原创化指令,两模式互不影响
- 多模态分析 response_format 三级回退(json_schema → json_object → none),兼容 DeepSeek
- 模板导出:details 扩展列(细节1/2/3)、target_audience 扩展列(适用人群1)、固定值风格1=休闲/风格2=运动
- 童装特征库更新 + 标题模板外部化 + 图源映射增强
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
# 2026-09-03 工作日志
|
||||
|
||||
## 新增:Inkreach 商城款号爬取脚本 `crawl_style_codes.py`
|
||||
- 需求:按【国家 + 品类】爬取款号(如 DG505 / JPTM001 / PLTK005),去重输出。
|
||||
- 接口探查结论(重要,见 MEMORY.md 已固化):后端走 **mapi.sdspod.com**(`api.sdspod.com` 在本机 DNS 解析不到,勿用)。
|
||||
- 端点:`/products/pageOptionGroup`(国家列表 14 国)、`/products/page`(商品分页)、`/categories`(品类树 26 顶层)。
|
||||
- 坑:`overseasArea`(国家)与 `id`(品类)筛选参数**实测不生效**(各国 totalCount 恒为 536)→ 改为全量分页拉取 + 本地聚合。
|
||||
- 商品 `categories` 标签顺序固定:`[国家/工厂标签, 品类, "款号 品名"]`(如 `美国工厂直发 | 男士T恤 | DG505 180g男士纯棉长袖`),这是国家/品类/款号最可靠的来源。
|
||||
- 款号提取三个坑及修复:
|
||||
1. `SFB`(墨西哥运动短裤)是**纯字母无数字**款号 → 改为优先用 categories 的「款号 品名」标签识别,不再强制要求含数字。
|
||||
2. 「中东本地工厂直发」属沙特,但正式国名是「沙特阿拉伯」→ 加 `COUNTRY_ALIASES` 别名表(中东→SA、国内工厂→CN)。
|
||||
3. 尺码串(S/M/XL/2XL/3XL)会被旧规则误当款号 → 加 `SIZE_WORDS` 黑名单(US 因此由 60 校正为 56)。
|
||||
- CN(国内工厂)4 条商品 name 无国家前缀、且本身无款号 → 用 `shipmentArea` 兜底归国家,款号留空。
|
||||
- 结果:在架商品 540(海外 536 + 国内 4)→ **13 国 / 65 个品类组合 / 150 条;全局去重款号 149 个**。
|
||||
- 产物:`style_codes_by_country.json`(按国家→品类→款号)、`style_codes_by_country.csv`(country_code,country,category,style_code,utf-8-sig)。
|
||||
|
||||
## 数据维护(同日早些时候)
|
||||
- SPU 表新增 `kids_type`、`kids_age` 两字段(TEXT,默认 NULL 空),`create_db.py` 已同步;SPU 现 39 字段。备份 `spu_sku.db.bak_spu_kids`。
|
||||
- SKU:按 `PLTK005-WH01` 复制生成 6 行 `PLTK005-BL01`(6Y/7Y/8Y/9Y/10Y/11-12Y),code 与 color=黑色 覆盖,其余字段照抄;PLTK005 SKU 由 12 → 18。备份 `spu_sku.db.bak_pltk005_bl01`。
|
||||
- SKU `color` 规范化(单字 → 「X色」):
|
||||
- 纯「黑」256 + 纯「白」149 = 405 行(备份 `spu_sku.db.bak_color_fix`)。
|
||||
- 其余单字 杏68/棕8/灰136/粉23/紫32/红76/绿45/蓝30/黄3 = 421 行(备份 `spu_sku.db.bak_color_single`)。
|
||||
- 未动:多字与组合色(`黑色 白色`、`白色 蓝色 红色 皇家蓝`、`黑胡椒色`、`象牙白`、`米白` 等)。
|
||||
|
||||
## 品类白名单过滤(同日追加)
|
||||
- 需求:只保留 T恤/卫衣/长袖/背心/夹克,删除下装与家居类,**对应款号一并删除**。
|
||||
- 实现:`crawl_style_codes.py` 加常量 `KEEP_CATEGORY_KEYWORDS = ("T恤","卫衣","长袖","背心","夹克")`,在按品类聚合前过滤(品类名含任一关键词才保留);**置空该常量即恢复全量输出**。
|
||||
- 剔除 80 条商品,涉及品类:下装(短裤 & 长裤)20、男士短裤 16、女士短裤 14、家居配饰 10、内衣 6、家居 5、桌面用品 2、配饰 2、男士长裤 2、童装短裤 2、印花烫贴 1。
|
||||
- 结果:13 国 / 10 个品类(女士T恤/女士卫衣/女士背心/男士T恤/男士T恤·GBTM011长袖T/男士卫衣/男士夹克/男士背心/童装T恤/童装卫衣)/ 116 条;**全局去重款号 149 → 115**。
|
||||
- 注:此过滤只作用于爬取产物(json/csv),未改动 SQLite 数据库。
|
||||
|
||||
## 按爬取清单清洗数据库(删除非清单款号)
|
||||
- 备份:`spu_sku.db.bak_before_style_filter`(删前状态 SPU 143 / SKU 2864)。
|
||||
- 规则:以 `style_codes_by_country.json` 的 115 个款号为准,`spu.code`(UPPER+TRIM)不在清单内的 SPU 及其 SKU 全部删除。
|
||||
- 结果:删除 **37 个 SPU / 476 条 SKU**;剩余 **SPU 106 / SKU 2388**;孤儿 SKU = 0。
|
||||
- 被删主力:US 的 DG201/202/204/205/206/210(下装)、JSD001~007(短裤)、JSA002/003/007/010(内衣·短裤)、USIU002/005/012(家居)、YSM01/02(配饰);JP 的 JPIU014/020/021(家居配饰)、JPPM011/JPSM018(下装)、JPJF005;PL 的 PLHM011/PLPM014/PLSU025(下装);GB 的 GBIU009/014/015;DE 的 DEPM004;MX 的 SFB。
|
||||
- 清单有但库里未入库的 9 个款号(本次未补,后续可从 PG 同步):BRTF004、DG505、GBHK007、GBTK012、GBTM010、GBTM011、JPPX012、JPPX013、PLTM031。
|
||||
- 审计文件:`delete_non_keep_codes.sql`(含完整 115 款号 IN 清单,可复核/重放)。
|
||||
|
||||
## 童装T恤款号字段批量更新
|
||||
- 依据:`style_codes_by_country.csv/json` 中品类含「童装T恤」的款号共 19 个,库中命中 **18 个**(GBTK012 尚未入库)。
|
||||
- 更新 4 个字段:`target_audience='男童'`、`season='ALL/全球/所有'`、`kids_type='上衣'`、`kids_age='12岁及以下'`,影响 18 行。
|
||||
- 覆盖国家:US(5000B/DG012/DG014/DG301/DG503/JSA004)、PL(PLHM012/PLHM013/PLTK005/PLTK015/PLTK016)、GB(GBTK005/GBTK008)、JP(JPTK015)、MX(METN001)、SA(SATK004)、ES(ESTK005)、IT(ITTK002);清单国家与库内 country 全部一致。
|
||||
- 备份:`spu_sku.db.bak_kids_tshirt`;审计 SQL:`kids_tshirt_update.sql`。
|
||||
- 备注:GBHM002/GBHM003 的 season 早就是 'ALL/全球/所有'(历史值,非本次改动);**童装卫衣**品类(清单 5 个 / 库中 4 个)本次未改,待用户决定是否同样套用童装字段。
|
||||
|
||||
## 男士卫衣款号字段批量更新
|
||||
- 依据:清单中品类含「男士卫衣」的款号共 21 个,库中命中 **19 个**(JPPX012/JPPX013 尚未入库);国家一致性全部 OK。
|
||||
- 更新 5 个字段:`details='抽绳'`、`collar_style='连帽'`、`target_audience='男士'`、`season='秋/冬'`、`sleeve_length_type='长袖'`,影响 19 行。
|
||||
- 覆盖:US(DF009/DF010/JSB001/JSB002/JSB003)、PL(PLHM002/PLHM003)、GB(GBHM002/GBHM003)、JP(JPHM009/JPHM010)、KR(KRHM002/KRHM003)、ES(ESHM003/ESHM004)、MX(HM01)、CA(CAHM002)、DE(DEHM003)、SA(SAHM003)。
|
||||
- 备份:`spu_sku.db.bak_men_hoodie`;审计 SQL:`men_hoodie_update.sql`。
|
||||
- 备注:GBHM002/GBHM003 原 season='ALL/全球/所有'(历史值)已被本次覆盖为 '秋/冬';当前全表 season 分布 = 秋/冬 19 + ALL/全球/所有 18(童装T恤)+ 四季 69。
|
||||
|
||||
## 品类→字段批量套用模板(可复用)
|
||||
- 数据源固定:`style_codes_by_country.json`(按 国家→品类→款号 组织),脚本 `crawl_style_codes.py` 可重跑刷新。
|
||||
- 标准流程:备份 → 从 json 取「品类含关键词」的款号 → 与 spu.code(UPPER+TRIM) 比对(列出命中/缺失/国家是否一致)→ 事务 UPDATE → 验证明细与全表分布 → 审计 SQL 落盘。
|
||||
- 已套用:童装T恤(18 个,男童/ALL全球/上衣/12岁及以下)、男士卫衣(19 个,抽绳/连帽/男士/秋·冬/长袖)。
|
||||
|
||||
## 新增袖长列 sleeve_length(用户选「加一列」方案)
|
||||
- 背景:商城无袖长分类字段(见 MEMORY.md 三套分类体系),长袖信息只写在商品 name 里,故按分类筛不出长袖。
|
||||
- 实现:`crawl_style_codes.py` 新增 `guess_sleeve_length(name, category)`,判定优先级:
|
||||
1. name 含「无袖/背心/吊带」或品类含「背心」→ 无袖
|
||||
2. name 含「长袖」→ 长袖
|
||||
3. name 含「短袖」→ 短袖
|
||||
4. 品类含「卫衣/夹克」→ 长袖(推断)
|
||||
5. 其余普通 T 恤 → 短袖(默认)
|
||||
- 产出:CSV 由 4 列扩为 5 列(country_code, country, category, style_code, **sleeve_length**);JSON 每个国家下新增 `sleeve_length` 与 `sleeve_source`(判定来源,便于审计修正)。
|
||||
- 结果:长袖 37(name 标注 9 + 品类推断 28)、短袖 69(name 标注 6 + 默认 63)、无袖 9,合计 115 个款号全覆盖、无空值。
|
||||
- 注意:63 个「默认短袖」与 28 个「卫衣/夹克推断长袖」属推断值,如需人工校正以 `sleeve_source` 列筛选即可。
|
||||
|
||||
## 袖长回填 SPU.sleeve_length_type(区分长袖)
|
||||
- 用户需求:「先帮我把长袖给区分出来」→ 把清单 sleeve_length 回填到 SPU 表,让库里能直接筛出长袖。
|
||||
- 执行:以 `style_codes_by_country.csv` 的 sleeve_length 为准回填全部 106 个款号;**更新 20 行**:
|
||||
- 12 个 **短袖→长袖**(藏在 T恤/卫衣/夹克里):DG501/DG502/DG503/DG504/GBHK006/JPTM006/KRTM004/PLHF029/PLHM009/PLHM010/PLJM030/PLTF026
|
||||
- 8 个 **短袖→无袖**(背心款):AUTM003/JPTM008/JSA009/TBB001/VS001/VS002/VS003/VS004
|
||||
- 更新后分布:**长袖 31 / 短袖 66 / 无袖 9**(=106)。清单长袖 37 − 6 个未入库长袖款(DG505/GBTM011/GBTK012/JPPX012/JPPX013 等)= 31。
|
||||
- 备份:`spu_sku.db.bak_sleeve_backfill`;审计 SQL:`sleeve_backfill.sql`(106 条逐款 UPDATE)。
|
||||
|
||||
## 长袖T恤细化(品类含 T恤 且 长袖 → season=秋/冬)
|
||||
- 规则:清单 category 含「T恤」且 sleeve_length='长袖' 的款号 → SPU `sleeve_length_type='长袖'`、`season='秋/冬'`。
|
||||
- 清单共 8 款(DG502/DG503/DG505/GBTK012/GBTM011/JPTM006/KRTM004/PLTF026),库中命中 **5 个**(DG505/GBTK012/GBTM011 未入库)。
|
||||
- sleeve_length_type 上一步回填时已为长袖;本次主要把 season 改「秋/冬」;注意 DG503(童装T恤)season 由「ALL/全球/所有」被覆盖为「秋/冬」(用户指定)。
|
||||
- 全表 season 分布更新为:秋/冬 24(男士卫衣 19 + 长袖T恤 5)/ ALL/全球/所有 17 / 四季 65。
|
||||
- 备份:`spu_sku.db.bak_tee_long`;审计 SQL:`tee_long_update.sql`。
|
||||
|
||||
## 童装款 SKU size_type 统一为「欧美尺码年龄码」
|
||||
- 范围:清单 category 含「童装」的款号 = 童装T恤 19 + 童装卫衣 5 = 24 个;库中命中 **22 个**(GBHK007/GBTK012 未入库)。
|
||||
- 更新:22 款对应 **508 条 SKU** 的 `size_type='欧美尺码年龄码'`。
|
||||
- 注意:① JPTK015(JP) 的 size_group 仍为「亚洲尺码」、size_type 现在是「欧美尺码年龄码」——组合不一致,待用户确认是否妥当;② 部分童装款实际 size 是 XS-XL(5000B/METN001/SATK004/DG012 等)或 90~170 体码(DG014/DG503/DG504/JSA004/JPTK015),本次仅统一 size_type 文案、未改 size。
|
||||
- 备份:`spu_sku.db.bak_kids_sizetype`;审计 SQL:`kids_size_type_update.sql`。
|
||||
|
||||
## 背心款 sleeve_length_type 幂等确认
|
||||
- 范围:清单品类含「背心」共 9 款(男士背心 AUTM003/JPTM002/JPTM008/TBB001/VS001/VS003;女士背心 JSA009/VS002/VS004),库中全部命中。
|
||||
- 结果:9 款在「袖长回填」那步已统一为「无袖」,本轮幂等 UPDATE 确认状态正确(值无实际变化)。
|
||||
- 备份:`spu_sku.db.bak_vest`;审计 SQL:`vest_update.sql`(可复用)。
|
||||
@@ -23,3 +23,20 @@
|
||||
- 部分品类 colors.code 为脏数据(如 'METB001-S-3XL黑色'、'5000B-黑色'、'SFB-黑色')→ 兜底补全
|
||||
- 部分品类无 product_extra(如 SFB/5000B)→ 尺码走 size_chart 回退,包装/重量留空
|
||||
- 家居类尺码格式不一致('30*40/76.2*101.6' vs '30*40')、均码叫法不同(Onesize vs 均码)→ 已加归一化兜底
|
||||
|
||||
## Inkreach 商城公开 API(供 crawl_style_codes.py 复用)
|
||||
- 域名:`https://mapi.sdspod.com`(**坑:前端 JS 里写的 `api.sdspod.com` 在本机 DNS 解析不到,不可用**)
|
||||
- 端点(无需鉴权,带 Referer: https://www.inkreach.cn/ 即可):
|
||||
- `/products/pageOptionGroup` → shipmentCountryList:14 国(US/PL/GB/JP/MX/SA/CA/ES/AU/DE/KR/BR/IT/CN,含各国商品数)
|
||||
- `/products/page` → 商品分页,参数 `shipmentArea=overseas|CN`、`page`、`size`(size 可到 100)
|
||||
- `/categories` → 品类树,26 个顶层(含「美国/欧洲/日本…本地直发」这类国家维度)
|
||||
- **大坑**:`overseasArea`(国家)与 `id`(品类)筛选参数实测**不生效**(各国 totalCount 恒等)→ 只能全量分页拉取后本地聚合。
|
||||
- 商品结构:`categories` 标签顺序固定 = `[国家/工厂标签, 品类, "款号 品名"]`,例:`美国工厂直发 | 男士T恤 | DG505 180g男士纯棉长袖`——国家/品类/款号最可靠的来源。
|
||||
- 款号提取:优先 categories 的「款号 品名」标签(能覆盖纯字母款号如 `SFB`),其次 name 的 `-` 分段;必须用 `SIZE_WORDS` 排除尺码串(S/M/XL/2XL/3XL 会被误判)。
|
||||
- 国家别名:中东→SA(沙特,站点文案非「沙特阿拉伯」)、国内工厂→CN;CN 商品 name 无国家前缀,用 `shipmentArea` 兜底。
|
||||
- 规模参考:在架商品 540(海外 536 + 国内 4)→ 13 国、**149 个去重款号**(CN 4 条本身无款号)。
|
||||
- **三套分类体系(大坑,已查证)**:
|
||||
1. `/categories` 品类树:625 个节点,含「长袖T恤」等 14 个长袖节点,但**没有任何商品挂在上面**(商品 category_id 全都不在这棵树里)。
|
||||
2. 商品 `category_id`:取值在 8186~8741 区间,**不属于** `/categories` 树(树节点 id 是 1295~8659 另一套),无法互相映射。
|
||||
3. 商品 `categories` 标签(脚本用的就是它):`[国家/工厂, 人群款式, "款号 品名"]`,按国家+人群款式组织。
|
||||
- **「长袖/短袖」不是分类,只写在商品 name 里**:全站 name 含"长袖"的商品 30 条 → 9 个款号(DG502/DG503/DG505/GBTK012/GBTM011/JPTM006/KRTM004/PLHF029/PLTF026),它们被并入 男士T恤/女士T恤/童装T恤/女士卫衣 品类。要按长袖筛选只能从 name 判断。
|
||||
|
||||
Reference in New Issue
Block a user