Files
pod_trend_agent/db/.workbuddy/memory/2026-09-03.md
T
3218485270 5ab5cf6586 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=运动
- 童装特征库更新 + 标题模板外部化 + 图源映射增强
2026-09-03 18:28:39 +08:00

10 KiB
Raw Blame History

2026-09-03 工作日志

新增:Inkreach 商城款号爬取脚本 crawl_style_codes.py

  • 需求:按【国家 + 品类】爬取款号(如 DG505 / JPTM001 / PLTK005),去重输出。
  • 接口探查结论(重要,见 MEMORY.md 已固化):后端走 mapi.sdspod.comapi.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.csvcountry_code,country,category,style_codeutf-8-sig)。

数据维护(同日早些时候)

  • SPU 表新增 kids_typekids_age 两字段(TEXT,默认 NULL 空),create_db.py 已同步;SPU 现 39 字段。备份 spu_sku.db.bak_spu_kids
  • SKU:按 PLTK005-WH01 复制生成 6 行 PLTK005-BL016Y/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.codeUPPER+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(下装)、JPJF005PL 的 PLHM011/PLPM014/PLSU025(下装);GB 的 GBIU009/014/015DE 的 DEPM004MX 的 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;审计 SQLkids_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;审计 SQLmen_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_lengthsleeve_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;审计 SQLsleeve_backfill.sql106 条逐款 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;审计 SQLtee_long_update.sql

童装款 SKU size_type 统一为「欧美尺码年龄码」

  • 范围:清单 category 含「童装」的款号 = 童装T恤 19 + 童装卫衣 5 = 24 个;库中命中 22 个GBHK007/GBTK012 未入库)。
  • 更新:22 款对应 508 条 SKUsize_type='欧美尺码年龄码'
  • 注意:① JPTK015(JP) 的 size_group 仍为「亚洲尺码」、size_type 现在是「欧美尺码年龄码」——组合不一致,待用户确认是否妥当;② 部分童装款实际 size 是 XS-XL5000B/METN001/SATK004/DG012 等)或 90~170 体码(DG014/DG503/DG504/JSA004/JPTK015),本次仅统一 size_type 文案、未改 size。
  • 备份:spu_sku.db.bak_kids_sizetype;审计 SQLkids_size_type_update.sql

背心款 sleeve_length_type 幂等确认

  • 范围:清单品类含「背心」共 9 款(男士背心 AUTM003/JPTM002/JPTM008/TBB001/VS001/VS003;女士背心 JSA009/VS002/VS004),库中全部命中。
  • 结果:9 款在「袖长回填」那步已统一为「无袖」,本轮幂等 UPDATE 确认状态正确(值无实际变化)。
  • 备份:spu_sku.db.bak_vest;审计 SQLvest_update.sql(可复用)。