From b8b71523b551225c40b752d53ecc3d09b53ac92b Mon Sep 17 00:00:00 2001 From: fengxiangdebaozi <10845145+fengxiangdebaozi@user.noreply.gitee.com> Date: Wed, 17 Jun 2026 23:18:05 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=B5=81=E7=A8=8B=E5=9B=BE=E8=BF=9E?= =?UTF-8?q?=E7=BA=BF=E6=8E=A8=E5=AF=BC=E5=8A=A0=E5=9B=BA=E2=80=94=E2=80=94?= =?UTF-8?q?=E4=B8=AA=E5=88=AB=E8=8A=82=E7=82=B9=E6=BC=8F=20group=20?= =?UTF-8?q?=E6=97=B6=E6=8C=89=E5=8F=91=E5=B0=84=E9=A1=BA=E5=BA=8F=E5=B0=B1?= =?UTF-8?q?=E8=BF=91=E5=BD=92=E5=B1=82(carry-forward)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 弱模型可能漏标个别节点的 group,原逻辑一漏标就整体放弃推导导致节点平铺。改为漏 group 的 节点沿用前一节点的层级,只有开头无 group / 全程无 group 才回退模型连边。 Co-Authored-By: Claude Opus 4.8 (1M context) --- .../backend/app/gateway/routers/flow_extract.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) 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]]