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:
2026-09-03 18:28:39 +08:00
parent d68cc3b9e3
commit 5ab5cf6586
40 changed files with 1967 additions and 149 deletions
+64
View File
@@ -0,0 +1,64 @@
# -*- coding: utf-8 -*-
"""自定义模式实测:验证参考图是否上传 /images/edits。禁用 OSS/种草图减少副作用。"""
import sys
import time
from pathlib import Path
ROOT = Path(r"C:\Users\Admin\Desktop\test模版\design_agent\pod_trend_agent")
sys.path.insert(0, str(ROOT))
import yaml
from graph.agent import run_pinterest_ref
cfg = yaml.safe_load((ROOT / "config.yaml").read_text(encoding="utf-8")) or {}
# —— 自定义模式配置 ——
cfg["pinterest"]["mode"] = "custom"
cfg["pinterest"]["custom_image_dir"] = r"C:\Users\Admin\Desktop\新建文件夹\新建文件夹"
cfg["pinterest"]["provider"] = "openai"
cfg["product"]["spu_tasks"] = [{"spu": "SATU001", "skus": "SATU001-WH01"}]
cfg["product"]["template_path"] = r"C:\Users\Admin\Desktop\SatVoy Shop--沙特女士白色纯棉T模板.xlsx"
cfg["product"]["backend"] = "openai"
cfg["compose"]["backend"] = "openai"
cfg["oss"]["enabled"] = False
cfg["seed_shot"]["enabled"] = False
# 独立输出目录,避免污染现有 output
out_root = ROOT / "output_test_custom"
out_root.mkdir(parents=True, exist_ok=True)
print("=" * 70)
print("开始自定义模式实测(SA / SATU001-WH01 / 参考图上传验证)")
print("=" * 70)
t0 = time.time()
try:
res = run_pinterest_ref(
"SA", cfg, ROOT, output_root=out_root,
custom_image_dir=r"C:\Users\Admin\Desktop\新建文件夹\新建文件夹",
)
except Exception as e:
import traceback
traceback.print_exc()
sys.exit(1)
print("\n" + "=" * 70)
print(f"完成,耗时 {time.time() - t0:.0f}s")
print("=" * 70)
errs = res.get("errors") or []
print(f"错误 {len(errs)} 条:")
for e in errs:
print(f" - [{e.get('node')}] {e.get('type')}: {e.get('message')}")
briefs = res.get("briefs") or []
print(f"简报 {len(briefs)} 条:")
for b in briefs:
print(f" topic={b.get('topic')} | brief_id={b.get('brief_id')} | "
f"ref_images={b.get('ref_images')} | delta={str(b.get('delta'))[:60]}")
designs = res.get("designs") or []
print(f"设计稿 {len(designs)} 个:")
for d in designs:
print(f" topic={d.get('topic')} | path={d.get('path')}")
products = res.get("product") or []
print(f"产品 {len(products)} 个:")
for p in products:
print(f" img_code={p.get('img_code')} | composite={p.get('composite_path')}")