- 产品持久化:每完成一个产品立即追加写入 products_pending.jsonl,崩溃不丢已完成产品,finish 读盘合并后统一写模板 - 503 致命错误提前终止:compose/product/seed_shot 端到端识别,提前终止搜索分析,丢弃未完成简报,保留已完成落盘产品直接合成模板 - 模特分配:material_library 合格模特图按任务序号独立随机,同 SPU 多款不再共用同一模特 - 图像网关适配:execution_mode/background 默认不再传入 yunfei 等标准网关,base_url 需带 /v1;429/5xx/空响应退避重试 - Pinterest 分析:删除 term 注入与纯文本降级,失败直接放弃;图片上传前 PIL 完整性校验;suitable_for_print=False 过滤丢弃 - 模板导出:不再产生空白 xlsx,文件名=模板原文件名_已填写;写入前按货号末 3 位升序排序 - 删除对接文档.md,更新 README,gitignore 排除测试产物
47 lines
3.6 KiB
Python
47 lines
3.6 KiB
Python
"""LangGraph 共享状态定义。
|
||
|
||
所有节点都读写 AgentState。键全部 optional(total=False),
|
||
因此单个节点崩溃 / 返回空时不会破坏整图,下游可用上一节点的残余数据继续。
|
||
"""
|
||
from typing import TypedDict, List, Dict, Any, Optional
|
||
|
||
|
||
class AgentState(TypedDict, total=False):
|
||
# —— 路由 / 配置 ——
|
||
country: str # 当前处理的国家代码(US/GB/JP/AU)
|
||
config: Dict[str, Any] # 全局配置(config.yaml)
|
||
country_config: Dict[str, Any] # 该国合并后的配置(全局 + configs/countries/*.yaml + prompts/<country>/aesthetics.yaml)
|
||
prompts_dir: str # prompts/<country> 绝对路径
|
||
output_dir: str # output/<country> 绝对路径
|
||
cache_dir: str # output/<country> 根目录(采集缓存/去重/简报缓存)
|
||
task_timestamp: str # 任务开始时间戳(OSS 路径段 / 产物文件夹名)
|
||
oss_seq: int # 货号计数(000 起,最多 999)
|
||
base_image: str # 平铺衣服底图路径(可选,印图用)
|
||
|
||
# —— 流水线数据(逐节点累积)——
|
||
raw_rows: List[Dict[str, Any]] # fetch 产出:各源原始行(统一格式)
|
||
filtered_rows: List[Dict[str, Any]] # filter 产出:去黑名单/人名/泛词后
|
||
scored_rows: List[Dict[str, Any]] # score 产出:归一化 + 融合 + 综合分
|
||
screened: List[Dict[str, Any]] # screen 产出:合规风险 + 结构化四要素
|
||
briefs: List[Dict[str, Any]] # prompt_build 产出:含最终 image/wearable/composite 提示词
|
||
composite: List[Dict[str, Any]] # compose 产出:封装提示词包(= briefs 子集,便于下游印图)
|
||
designs: List[Dict[str, Any]] # compose 产出:纯印花设计稿 [{topic, path}](product 用它做图2)
|
||
product: List[Dict[str, Any]] # product 产出:产品图生成(SPU/SKU/底图/印花/模特合成)
|
||
seed_words: Dict[str, Any] # seed 产出:动态种子词(含 llm_style_seeds / llm_related_seeds)
|
||
|
||
# —— Pinterest 参考模式(独立于 Google Trends 采集链路)——
|
||
pinterest_search_terms: List[str] # pinterest_search 产出:LLM 生成的搜索词
|
||
pinterest_images: Dict[str, List[str]] # pinterest_scrape 产出:搜索词 → 爬取图片路径列表
|
||
pinterest_briefs: List[Dict[str, Any]] # pinterest_analyze 产出:LLM 分析图片的原始设计简报
|
||
pinterest_login: Dict[str, Any] # pinterest_scrape 产出:登录态检测结果 {status, detail, ...}
|
||
|
||
# —— Pinterest 按需搜索循环状态 ——
|
||
pinterest_target: int # 目标简报数(= spu_tasks 数量,每款一个设计)
|
||
pinterest_rounds: int # 已搜索轮次
|
||
pinterest_attempted: List[str] # 本轮已尝试(未持久化)的搜索词,防同轮重复
|
||
pinterest_pipeline: Any # PinterestPipeline 实例(简报池 + 并发生成线程)
|
||
|
||
# —— 可观测性 ——
|
||
errors: List[Dict[str, Any]] # 各节点兜底捕获的错误:{node, type, message, trace}
|
||
stats: Dict[str, Any] # 各阶段统计:{fetch, filter, score, screen, prompt, compose}
|