v89-v91 模板增强 + 图源映射 + 多模态提示词可配置化
- 图源映射统一:热点采集与 Pinterest 模式均走 config.product.mark_dirs 配置,按任务序号随机抽模特图/平铺图 - 商品产地固定:统一为「中国大陆」+「产地省份=广东省」(不再读站点/字典映射) - 模板 SKU 字段检测:按建议售价同一套路检测 SKU分类/SKU数量/SKU数量单位,必填时填入单品/1/件 - 多模态分析提示词可配置:prompts/pinterest_analyze_system.md + user.md,支持国家覆盖,不丢文件回退内置 - 自定义图片模式:新增 pinterest_custom_load_node,图片数量硬校验,选品清单 ≤ 有效图片数 - 模板导出优化:写入前按货号末 3 位升序排序,不再产生空白 xlsx - 修复 v90 project review 10 项(503 致命终止、线程安全、原子写入等)
This commit is contained in:
@@ -64,7 +64,38 @@ START → pinterest_init → pinterest_search → pinterest_scrape → pinterest
|
||||
`scrape_concurrency`(爬图并发,必须=1)、`err400_limit`(400 超限放弃当前种子词)。
|
||||
|
||||
**每个节点都用 `graph/validate.with_fallback` 包裹**:任何未预料异常都被捕获、记入
|
||||
`state['errors']`、返回最小更新,整图继续往下走,单点故障不中断流水线。
|
||||
`state['errors']`、返回最小更新,整图继续往下走,单点故障不中断流水线。致命图像服务错误(503 /
|
||||
"No available compatible accounts")除外——`with_fallback` 不再静默吞掉,会同步标记流水线终止,
|
||||
让路由短路到 `pinterest_finalize → template_export` 提前收尾合成模板。
|
||||
|
||||
### 模式 B-2:自定义图片模式(Custom)
|
||||
|
||||
无需采集/搜索图片,把用户本地图片文件夹里的**有效图片**直接送进多模态分析,沿用 Pinterest
|
||||
后续所有步骤(分析 → 设计稿 → 三合一 → OSS → 种草图 → 模板导出)。
|
||||
|
||||
```
|
||||
START → pinterest_init → pinterest_custom_load → pinterest_analyze
|
||||
→ [pinterest_custom_route 循环:图池有未消费图 → 继续分析;图池空/简报达标 → 结束]
|
||||
→ pinterest_finalize → template_export → END
|
||||
```
|
||||
|
||||
| 节点 | 职责 |
|
||||
|---|---|
|
||||
| `pinterest_custom_load` | 读取 `pinterest.custom_image_dir` 文件夹 → 统计有效图片 → **数量硬校验** → 每次重建图池 + 清空已消费拉黑 |
|
||||
|
||||
**启用方式**(两种任选):
|
||||
- 配置 `config.yaml` 的 `pinterest.mode: "custom"` 并填 `pinterest.custom_image_dir: "<文件夹路径>"`;
|
||||
- 或直接在 UI 选择「**自定义图片**」流程 →「📁 选图片文件夹…」选择文件夹后运行(自动写入配置)。
|
||||
|
||||
**数量硬校验(必过)**:
|
||||
- 必须先选定上传的文件夹(UI 未选会弹窗报错,任务不启动);
|
||||
- 文件夹内所有有效图片(`jpg/jpeg/png/webp`,递归)数量必须 `> 0`;
|
||||
- **选品清单总数(`product.spu_tasks` 展开后)不得大于有效图片数**。不满足则在
|
||||
UI 弹窗 / `run_pinterest_ref` 提前抛错 / `custom_load` 节点记录错误,三重拦截,任务不进入分析。
|
||||
|
||||
**行为差异**:自定义模式每次运行把图池重建为该文件夹的图片集(唯一图源)并清空已消费 md5 拉黑,
|
||||
保证用户每次重新上传/选择的所有有效图片都会被重新多模态分析;分析批上限按「选品清单总数」截断,
|
||||
避免对多余图片浪费配额。`pinterest_custom_route` 只在 wait / analyze / done 间流转,从不 search。
|
||||
|
||||
## 目录结构
|
||||
|
||||
@@ -82,6 +113,8 @@ pod_trend_agent/
|
||||
├── prompts/<country>/ # ★ 每个国家不同的提示词单独文件夹
|
||||
│ ├── system_prompt.md # 该国 LLM 系统提示(补充段,叠加到默认规则)
|
||||
│ └── aesthetics.yaml # 审美 hint + 风格-配色 extra 规则 + 额外黑名单
|
||||
├── prompts/pinterest_analyze_system.md # 多模态分析系统提示词(Pinterest/自定义模式),可配置
|
||||
├── prompts/pinterest_analyze_user.md # 多模态分析用户提示词,可配置
|
||||
├── graph/
|
||||
│ ├── state.py # AgentState(共享状态)
|
||||
│ ├── validate.py # with_fallback 兜底 + 数据校验
|
||||
@@ -134,6 +167,23 @@ pod_trend_agent/
|
||||
每完成一个产品立即追加落盘到 `output/<country>/<ts>/products_pending.jsonl`(中断/崩溃也不丢已
|
||||
完成产品),全部完成后统一合并写模板。
|
||||
|
||||
## 多模态分析提示词(可配置)
|
||||
|
||||
Pinterest 参考模式与自定义图片模式的多模态分析提示词已**外部化为配置**,无需改代码即可调优:
|
||||
|
||||
- `prompts/pinterest_analyze_system.md`——多模态分析**系统提示词**(POD T 恤设计分析师角色 +
|
||||
禁止抄袭/违禁项/输出 JSON 结构等规则);
|
||||
- `prompts/pinterest_analyze_user.md`——**用户提示词**("Analyze the attached image and produce
|
||||
one ORIGINAL T-shirt print design brief...")。
|
||||
|
||||
**加载优先级**(`graph/llms/openai_compat_backend.py`):
|
||||
1. `prompts/<国家>/pinterest_analyze_*.md`(国家专属覆盖);
|
||||
2. `prompts/pinterest_analyze_*.md`(全局配置,先查运行根 exe 旁再查内置);
|
||||
3. 内置默认常量(兜底,向前兼容)。
|
||||
|
||||
直接编辑这两份文件即可自定义分析与生图引导规则;`pinterest_analyze_system.md` 里可调整
|
||||
`image_prompt` 二段式结构 / `negative_prompt` / `suitable_for_print` 判定标准等约束。
|
||||
|
||||
## 生成可靠性 / 错误处理
|
||||
|
||||
- **致命 503(图像服务不可用,如 "No available compatible accounts")**:端到端识别
|
||||
@@ -145,8 +195,11 @@ pod_trend_agent/
|
||||
- **yunfei / 标准 OpenAI 网关适配**:`compose.execution_mode` 与 `background` 参数默认不再传入——
|
||||
yunfei 等网关不认识它们会返回空 body;`base_url` 需带 `/v1` 前缀(如
|
||||
`https://img.yunfei.best/v1`),否则请求错误路径得到空响应。
|
||||
- **模特分配**:`material_library/<品类>` 内的合格模特图(3:4 比例过滤)按**任务序号**独立随机,
|
||||
同一 SPU 的多款不再共用同一张模特。每张种草图随机取不同模特特征。
|
||||
- **图源映射(可配置)**:`config.product.mark_dirs` 定义 SPU.mark → `material_library` 下的
|
||||
`model_dir`(模特图)/ `flat_dir`(平铺图)两个图源文件夹及对应合成提示词。热点采集与 Pinterest
|
||||
两种模式统一走该映射:在「有图的文件夹」间按**任务序号**独立随机抽图,抽到模特图用模特三图提示词
|
||||
(图1模特+图2印花+图3底图),抽到平铺图用平铺三图提示词(图1平铺实拍+图2印花+图3底图)。
|
||||
同一 SPU 的多款不再共用同一张图;某类目录无图则只用另一类。每张种草图随机取不同模特特征。
|
||||
|
||||
## 模特性别分组
|
||||
|
||||
@@ -180,7 +233,8 @@ pod_trend_agent/
|
||||
- **胸围识别**:识别「基码表-胸围(cm)」「胸围全围(cm)」等含「胸围」的列,全部填 `sku.bust` 值;
|
||||
- **申报价格**:模糊匹配所有含「申报价格」的列,统一按加价后价格填写(`price × (1+markup_percent%)`);
|
||||
- **款式来源**:SPU 行「款式来源」统一填「现货款」;
|
||||
- **商品产地**:国家简称映射正式名称(如「沙特」→「沙特阿拉伯」,`_COUNTRY_NAME_MAP` 可扩展);
|
||||
- **商品产地**:所有国家统一填「中国大陆」;新增「产地省份」精确匹配列,统一填「广东省」(不再读站点/做字典映射);
|
||||
- **SKU 分类 / SKU 数量 / SKU 数量单位**:按「建议售价」同一套路检测——关键词模糊匹配定位列,读取列头下一行备注判断是否必填(含「非必填」才跳过),检测到且为必填时统一填固定值:`SKU分类=单品`、`SKU数量=1`、`SKU数量单位=件`;
|
||||
- **详情图文**:由全部主图 + 种草图组成(不再拼接 img_url_2);
|
||||
- 规格类型2 = `{size}*{color}`;币种=CNY;发货仓1~N 取模板顶头按「、」分隔,库存均 200;
|
||||
- 模板文件被占用(打开中)时自动换名 `<SKU>_已填写_N.xlsx`,不中断导出;
|
||||
@@ -220,7 +274,7 @@ python ui_app.py
|
||||
python ui_app.py --self-test
|
||||
```
|
||||
|
||||
UI 功能:国家多选、**流程选择(热点采集 / Pinterest 参考模式)**、LLM 后端选择、种子上限、
|
||||
UI 功能:国家多选、**流程选择(热点采集 / Pinterest 参考模式 / 自定义图片模式)**、LLM 后端选择、种子上限、
|
||||
**SPU/颜色选品**、运行(后台线程 + 实时日志)、结果表格(双击看完整提示词)、打开产物目录。
|
||||
|
||||
## 打包
|
||||
|
||||
Reference in New Issue
Block a user