diff --git a/offline-backend-20260512/backend/app/gateway/routers/flow_extract.py b/offline-backend-20260512/backend/app/gateway/routers/flow_extract.py index 213f5d21..ae8cac9e 100644 --- a/offline-backend-20260512/backend/app/gateway/routers/flow_extract.py +++ b/offline-backend-20260512/backend/app/gateway/routers/flow_extract.py @@ -346,18 +346,27 @@ def _derive_layered_edges(nodes: list[dict[str, Any]]) -> list[dict[str, Any]] | 返回 None 表示「无法可靠推导」(无 group / 只有一层 / 存在不规则层对),调用方回退模型连边。 """ # 按 group 分层,保持每层内节点的原始顺序 + 层的首次出现顺序。 + # 加固:个别节点漏 group(弱模型可能漏标)→ 按发射顺序**就近归入前一个层级**(carry-forward), + # 不再因一个漏标就整体放弃;只有连开头节点都没 group / 全程无任何 group 才放弃。 order: list[str] = [] layers: dict[str, list[str]] = {} + last_group = "" + any_group = False for n in nodes: g = _as_str(n.get("group")) + if g: + any_group = True + last_group = g + else: + g = last_group # 漏 group → 沿用前一节点的层级 if not g: - return None # 有节点没层级 → 无法分层,回退模型连边 + return None # 开头节点就没 group,无法锚定层级 → 回退模型连边 if g not in layers: layers[g] = [] order.append(g) layers[g].append(n["id"]) - if len(order) < 2: - return None # 只有一层,没有层间连线可推 + if not any_group or len(order) < 2: + return None # 全程无 group / 只有一层 → 回退模型连边 out: list[dict[str, Any]] = [] for k in range(len(order) - 1): a = layers[order[k]]