weight_consistency 实验 — 全流程管线图
6 节点线性管线 · 3 次 AI 调用 · 1 次纯数学分析 · 输出四层优先级评分
📐 管线拓扑(6 节点线性串联)
graph LR
START((START)):::start --> N0
N0["load_assets
━━━━━━━━━━
下载/加载 Excel
筛选评级产品
按母产品分组
验证资产文件"]:::io
N0 --> N1
N1["complete_missing
━━━━━━━━━━
🤖 Vision LLM
对重量≤0的产品
看图估算重量
每批50条报进度"]:::ai
N1 --> N2
N2["estimate_ranges
━━━━━━━━━━
🤖 Vision LLM
对所有评级产品
输出推理链+范围
品类/材质/尺寸/重量"]:::ai
N2 --> N3
N3["cross_judge
━━━━━━━━━━
🤖 Text LLM
按母产品分组
跨产品一致性判断
标记离群值"]:::ai
N3 --> N4
N4["analyze
━━━━━━━━━━
🧮 纯数学计算
锚点降级链
共识区间·250g检查
运费风险·四层评分"]:::calc
N4 --> N5
N5["output
━━━━━━━━━━
📄 导出 Excel
26列→56列
含所有评分与建议"]:::io
N5 --> ENDD((END)):::start
classDef ai fill:#1a1236,stroke:#8250df,color:#d2a8ff
classDef calc fill:#12291a,stroke:#238636,color:#7ee787
classDef io fill:#1a1a2e,stroke:#30363d,color:#8b949e
classDef start fill:#0d1117,stroke:#58a6ff,color:#58a6ff
📊 数据流向(Excel 列变化)
flowchart TD
EXCEL["输入 Excel
26 列原始数据
标题/重量/等级/
人工确定/源头ID"]:::start
N0D["load_assets
筛选+加载"]:::io
N1D["complete_missing
+4列
_completion_weight
_completion_confidence
_completion_reason
_completion_source"]:::ai
N2D["estimate_ranges
+13列
_range_min/max/center
_range_uncertainty
_range_subcategory+conf
_range_material+conf
_range_size+conf
_range_overall_conf"]:::ai
N3D["cross_judge
+4列
_cross_verdict
_cross_range
_cross_outliers
_cross_reason"]:::ai
N4D["analyze
+9列
_tier
_score
_consensus
_250g_triggered
_250g_diff
_n_outliers
_freight_risk
_recommendation
_is_outlier"]:::calc
N5D["output
导出 56 列 Excel"]:::io
EXCEL --> N0D --> N1D --> N2D --> N3D --> N4D --> N5D
classDef ai fill:#1a1236,stroke:#8250df,color:#d2a8ff
classDef calc fill:#12291a,stroke:#238636,color:#7ee787
classDef io fill:#1a1a2e,stroke:#30363d,color:#8b949e
classDef start fill:#0d1117,stroke:#58a6ff,color:#58a6ff
🧠 分析决策流程(analyze 节点内部)
flowchart TD
GRP["按源头产品ID分组"] --> CHK{"有人工确定重量?"}
CHK --"❌ 无"--> NOREF["整组标记 NO_REF
跳过分析"]
CHK --"✅ 有"--> ANCHOR
ANCHOR["确定锚点重量
━━━━━━━━━━━━
优先级降级链"] --> ANCHOR_TBL
ANCHOR_TBL{"锚点来源?"}
ANCHOR_TBL --"1️⃣ 人工确定"--> FAC12["×1.2 最高可靠"]
ANCHOR_TBL --"2️⃣ cross_judge"--> FAC08["×0.8 较高可靠"]
ANCHOR_TBL --"3️⃣ 数据库重量"--> FAC10["×1.0 正常"]
ANCHOR_TBL --"4️⃣ AI补全"--> FAC06["×0.6 较低可靠"]
ANCHOR_TBL --"5️⃣ 默认500g"--> FAC04["×0.4 最低可靠"]
FAC12 --> SPREAD
FAC08 --> SPREAD
FAC10 --> SPREAD
FAC06 --> SPREAD
FAC04 --> SPREAD
SPREAD["250g 跨度检查
max-min > 250g?"] --> CONSENSUS
CONSENSUS["共识区间计算
三段分治策略"] --> CONS_TBL
CONS_TBL{"锚点重量"}
CONS_TBL --"≤500g(轻货)"--> LIGHT["±30% min ±50g"]
CONS_TBL --"500-1000g(中货)"--> MED["±25% min ±100g"]
CONS_TBL --">1000g(重货)"--> HEAVY["±20% max ±200g"]
LIGHT --> OUTLIER
MED --> OUTLIER
HEAVY --> OUTLIER
OUTLIER["离群检查
重量在共识区间外?"] --> SCORE
SCORE["评分计算
运费风险×权重+质量风险×权重"] --> SCORE_TBL
SCORE_TBL{"重量段"}
SCORE_TBL --"重货>1000g"--> HEAVY_S["运费60% + 质量40%"]
SCORE_TBL --"轻货≤1000g"--> LIGHT_S["运费20% + 质量80%"]
HEAVY_S --> RELIABILITY["× 锚点可靠性因子"]
LIGHT_S --> RELIABILITY
RELIABILITY --> DEGRADE{"全AI场景?"}
DEGRADE --"是"--> DOWN["⚠️ 降一级"]
DEGRADE --"否"--> TIER
DOWN --> TIER
TIER["四层定级"]
TIER --> RED["🔴 RED >7.5
需立即人工排查"]
TIER --> ORG["🟠 ORANGE 5.0-7.5
建议人工确认"]
TIER --> YEL["🟡 YELLOW 2.5-5.0
可批量处理"]
TIER --> GRN["🟢 GREEN ≤2.5
自动通过"]
style CHK fill:#1a1236,stroke:#8250df,color:#d2a8ff
style ANCHOR_TBL fill:#1a1236,stroke:#8250df,color:#d2a8ff
style CONS_TBL fill:#1a1236,stroke:#8250df,color:#d2a8ff
style SCORE_TBL fill:#1a1236,stroke:#8250df,color:#d2a8ff
style DEGRADE fill:#1a1236,stroke:#8250df,color:#d2a8ff
style NOREF fill:#161b22,stroke:#30363d,color:#484f58
style FAC12 fill:#04260f,stroke:#238636,color:#3fb950
style FAC08 fill:#04260f,stroke:#238636,color:#3fb950
style FAC10 fill:#2e2a00,stroke:#d29922,color:#e3b341
style FAC06 fill:#3d2700,stroke:#d29922,color:#d29922
style FAC04 fill:#490202,stroke:#ff7b72,color:#ff7b72
style RED fill:#490202,stroke:#ff7b72,color:#ff7b72
style ORG fill:#3d2700,stroke:#d29922,color:#d29922
style YEL fill:#2e2a00,stroke:#e3b341,color:#e3b341
style GRN fill:#04260f,stroke:#3fb950,color:#3fb950
📋 6 节点详细说明
🔵 节点 0 — load_assets
- 定位 Excel:本地路径 > HTTP 链接 > 默认路径
- 筛选 ①:白名单源产品(可选)
- 筛选 ②:必须有评级(等级≠空/None)
- 筛选 ③:超大组警告(>5 子产品·不删除)
- 验证资产文件(缺则终止运行)
🟣 节点 1 — complete_missing
- 触发:重量 ≤ 0 + 有标题 + 有图片
- 模型:Vision LLM · 温度 0.1
- 输入:商品图 + 标题 + 同源重量参考
- 输出:estimated_weight_g + confidence + reason
- 并发:5 个 · 每 50 条 checkpoint
- 图片:MD5 缓存到 image_cache/
🟣 节点 2 — estimate_ranges
- 触发:有评级 + 有标题(所有评级产品)
- 模型:Vision LLM · 温度 0.05
- 标题信号提取:尺寸关键词、材质关键词
- 品类上下文:典型范围 + 极端边界
- 四步推理链:品类→材质→尺寸→重量
- 输出:范围 + 不确定性 + 三步置信度
🟣 节点 3 — cross_judge
- 触发:同源 ≥ 2 个产品
- 模型:Text LLM · 温度 0.15
- 输入:每条的重量/补全/范围汇总文字
- AI极不确定标记:_range_overall_conf < 0.4
- 输出:consistent / divergent / outlier_exists
- 单位:按母产品组调用(非逐条)
🟢 节点 4 — analyze(纯计算)
- 门槛:必须有 ≥1 个人工确定重量
- 锚点降级链:人工→通判→DB→AI→默认
- 250g 检查:同源产品重量跨度
- 共识区间:三段分治(轻/中/重货)
- 运费公式:重量kg×73+20(上限30kg)
- 全AI降级:整组都是 vision_llm → 降一级
- 检测器分歧:250g触发 但 cross_judge=consistent
🔵 节点 5 — output
- 预置 xlsx_output_node
- 输出路径:storage/outputs/{run_id}.xlsx
- 输入 26 列 → 输出 56 列(含所有 _ 前缀字段)
- 成功后可调 API 下载
🎯 四层优先级评分速查
🔴
RED
评分 > 7.5
需立即人工排查
重量数据严重异常
🟠
ORANGE
评分 5.0 - 7.5
建议人工确认
运费敏感
🟡
YELLOW
评分 2.5 - 5.0
可批量处理
择时审核
🟢
GREEN
评分 ≤ 2.5
自动通过
重量数据可信
📏 三段分治策略(共识区间计算)
flowchart LR
ANCHOR["锚点重量"] --> CHECK
CHECK{"重量区间?"}
CHECK --"≤ 500g"--> L["轻货
±30%
最少 ±50g
例: 300g 锚点
→ 210~390g"]
CHECK --"500-1000g"--> M["中货
±25%
最少 ±100g
例: 800g 锚点
→ 600~1000g"]
CHECK --"> 1000g"--> H["重货
±20%
最多 ±200g
例: 2000g 锚点
→ 1800~2200g"]
style L fill:#04260f,stroke:#3fb950,color:#7ee787
style M fill:#2e2a00,stroke:#e3b341,color:#e3b341
style H fill:#3d2700,stroke:#d29922,color:#d29922
style CHECK fill:#1a1236,stroke:#8250df,color:#d2a8ff
style ANCHOR fill:#1a1a2e,stroke:#30363d,color:#8b949e