You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LangGraph嵌入编译子图节点触发KeyError: 'scheduler_assistant'求助

问题:LangGraph父图调用子图节点触发KeyError

使用LangGraph 0.6.7 + Python 3.12构建多智能体工作流并部署在FastAPI中,父图通过builder.add_node("scheduler_assistant", subgraph)嵌入已编译的scheduler_assistant子图,同时配置了进入节点和关联边。但在START阶段的路由逻辑返回"scheduler_assistant"委托控制权时,流式处理图事件出现如下错误:

KeyError: 'scheduler_assistant'
During task with name '__start__' and id '...'
During task with name 'scheduler_assistant' and id '...'

错误表明LangGraph内部路由未在编译后的图端点字典中找到scheduler_assistant节点。

最小结构示例

# 子图代码
subgraph = StateGraph(SharedState)
# 定义子图节点和边
subgraph = subgraph.compile()

# 父图代码
builder = StateGraph(SharedState)
builder.add_node("scheduler_assistant", subgraph)
builder.add_node("enter_scheduler_assistant", create_entry_node(...))
builder.add_edge("enter_scheduler_assistant", "scheduler_assistant")
builder.add_conditional_edges(
    START, route_to_workflow, ["primary_assistant", "scheduler_assistant", "generate_query_or_respond"]
)
graph = builder.compile()
解决方案
  • 路由指向子图的进入节点而非子图本身
    子图作为节点添加后,不能直接在路由中返回子图节点名,需要指向对应的进入节点。修改条件路由的目标列表和路由逻辑返回值:

    builder.add_conditional_edges(
        START, route_to_workflow, ["primary_assistant", "enter_scheduler_assistant", "generate_query_or_respond"]
    )
    # 同时确保route_to_workflow函数在需要调度时返回"enter_scheduler_assistant"
    

    因为子图的执行需要通过你定义的进入节点enter_scheduler_assistant来触发,直接路由到子图节点会绕过LangGraph的子图嵌入逻辑,导致找不到端点。

  • 检查子图编译后的端点配置
    确认子图编译时是否正确设置了入口端点。如果子图没有显式指定入口,可在编译时添加:

    subgraph = subgraph.compile(entry_point="subgraph_start_node")
    

    不过在你的场景中,已经通过父图的进入节点关联子图,所以优先用第一种方案更稳妥,无需大规模重构。

  • 验证父图编译后的节点映射
    可以在父图编译后打印节点列表,确认scheduler_assistant是否存在:

    print(graph.nodes)
    

    如果存在但仍报错,检查路由逻辑返回的字符串是否和节点名完全一致(注意大小写、空格等拼写问题)。

内容的提问来源于stack exchange,提问作者Bennison J

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 05:12:35