feat:优化节点错误处理
This commit is contained in:
+23
-5
@@ -28,9 +28,11 @@ def route_after_intent(state: QueryState) -> str:
|
||||
return state["intent"]
|
||||
|
||||
|
||||
def route_after_requirement(state: QueryState) -> bool:
|
||||
# True 进入澄清,False 进入修改范围判断
|
||||
return state["requirement"].needs_clarification
|
||||
def route_after_requirement(state: QueryState) -> str:
|
||||
# 需求输出校验失败直接收尾;需要澄清进入澄清,否则进入修改范围判断
|
||||
if state["status"] == "failed":
|
||||
return "fallback_node"
|
||||
return "clarify_node" if state["requirement"].needs_clarification else "scope_node"
|
||||
|
||||
|
||||
def route_after_wait(state: QueryState) -> str:
|
||||
@@ -38,7 +40,15 @@ def route_after_wait(state: QueryState) -> str:
|
||||
return "input_node" if state["status"] == "running" else END
|
||||
|
||||
|
||||
# TODO 目前“资源”只有物料目录,数据源和 RAG 尚未准备好
|
||||
# 接入后把 needs_planning 与 resource_needs 拆成两个独立开关:
|
||||
# 规划 -> 按需查资源 -> planner;无需规划但有 resource_needs -> 查资源 -> action
|
||||
# 并让 component_resource_node 按 resource_needs 决定查什么,而不是固定全量目录
|
||||
# 在此之前,无需规划且带 resource_needs 的请求会由 action_block_reason 判为失败
|
||||
def route_after_scope(state: QueryState) -> str:
|
||||
# 范围输出校验失败或已判定无法执行,直接失败收尾
|
||||
if state["status"] == "failed":
|
||||
return "fallback_node"
|
||||
# 需要规划时先获取组件能力,供规划节点选择可用组件
|
||||
if state["change_scope"].needs_planning:
|
||||
return "component_resource_node"
|
||||
@@ -132,7 +142,11 @@ def build_graph(checkpointer=None):
|
||||
workflow.add_conditional_edges(
|
||||
source="requirement_node",
|
||||
path=route_after_requirement,
|
||||
path_map={True: "clarify_node", False: "scope_node"},
|
||||
path_map={
|
||||
"clarify_node": "clarify_node",
|
||||
"scope_node": "scope_node",
|
||||
"fallback_node": "fallback_node",
|
||||
},
|
||||
)
|
||||
|
||||
# 先保存澄清问题和等待状态,再进入调用 interrupt 的节点暂停执行
|
||||
@@ -160,7 +174,11 @@ def build_graph(checkpointer=None):
|
||||
)
|
||||
|
||||
# 规划完成后交给动作节点转换,动作节点还会检查规划是否可执行
|
||||
workflow.add_edge("planner_node", "action_node")
|
||||
workflow.add_conditional_edges(
|
||||
"planner_node",
|
||||
lambda state: "fallback_node" if state["status"] == "failed" else "action_node",
|
||||
{"action_node": "action_node", "fallback_node": "fallback_node"},
|
||||
)
|
||||
|
||||
# 动作生成后按结果进入校验、修正分析或失败收尾
|
||||
workflow.add_conditional_edges(
|
||||
|
||||
Reference in New Issue
Block a user