v106-v109 童装支持 + 标题模板外部化 + 模板导出增强

- 新增男童/女童检测(gender_from_category 优先判童装)与童装场景图生成
  (configs/kids_features.yaml:模特/场景/服装风格,同一商品固定同一组)
- 童装 SPU 字段映射:kids_type→SPU商品属性-类型、kids_age→适用年龄段、
  target_audience 按性别映射、kids_type_map 女童「上衣」→「针织上衣」
- 标题生成提示词外部化:prompts/title_prompt_{1,2,3}.md + config.yaml 路由表
- 模板多站点匹配:经营站点可配多个,命中任意一个即匹配
- 种草图生成失败自动重试(seed_shot.retries,换场景/模特/风格)
- 模板导出新增 Preview 文件夹(成功产品 _composite.oss.jpg + result.xlsx)
- 修复 SKU 尺码未按从小到大排序(_size_rank 支持单一年龄码 6Y/10Y)
This commit is contained in:
2026-09-01 17:24:23 +08:00
parent 3dc594cf57
commit d68cc3b9e3
20 changed files with 826 additions and 136 deletions
+19 -7
View File
@@ -501,8 +501,8 @@ class App(tk.Tk):
def __init__(self):
super().__init__()
self.title("POD 智能设计 Agent")
self.geometry("1280x840")
self.minsize(1100, 720)
self.geometry("1440x860")
self.minsize(1200, 720)
self.configure(bg="#F2F4F8")
self._q = queue.Queue()
self._busy = False
@@ -1034,7 +1034,8 @@ class App(tk.Tk):
break
if ws is None:
ws = wb.worksheets[0]
# 定位「经营站点」表头所在列(第 1 行),站点名在下一行同列(如 A1=经营站点 → A2=美国站)
# 定位「经营站点」表头所在列(第 1 行),站点名从第 2 行起逐行读取(模板可含多个站点,
# 如德国站/法国站/意大利站…,只要当前国家命中其中任意一个即视为匹配)
site_col = None
for c in range(1, 6):
v = ws.cell(1, c).value
@@ -1042,15 +1043,26 @@ class App(tk.Tk):
site_col = c
break
if site_col is not None:
v2 = ws.cell(2, site_col).value
if v2:
site_name = str(v2).strip()
sites = []
r = 2
while True:
v = ws.cell(r, site_col).value
if not v or not str(v).strip():
break
s = str(v).strip()
# 已离开元信息区(遇到分组行/列名行/说明文字/数据区层级)→ 停止读取站点
if any(k in s for k in ("基础信息", "商品层级", "必填", "spu", "sku")):
break
sites.append(s)
r += 1
if sites:
site_name = "".join(sites)
wb.close()
except Exception: # noqa: BLE001
return True, "" # 读不到站点信息 → 放行(不阻塞)
if not site_name:
return True, "" # 模板无站点信息 → 放行
if any(k in site_name for k in allowed):
if any(any(k in s for k in allowed) for s in site_name.split("")):
return True, site_name
return False, site_name