LangGraph add_conditional_edges 完整详解

发布时间:2026/7/5 1:03:50
LangGraph add_conditional_edges 完整详解 LangGraphadd_conditional_edges完整详解一、基础语法python运行workflow.add_conditional_edges( source: str, # 起始节点名 path_fn: Callable, # 路由判断函数 path_map: Dict[str, str] # 返回值 → 目标节点映射 )作用条件分支跳转同一个节点执行完后根据函数返回值走不同分支类似 if/else。二、参数拆解source条件边的起点节点字符串如analyze。path_fn路由函数 router接收完整 state返回一个字符串分支标识python运行def router(state): if state[is_quick]: return quick else: return detailedpath_map 映射字典{返回值: 目标节点}keyrouter 函数返回的字符串value要跳转的节点名称 所有 router 可能返回的值都必须在字典里定义否则报错。你上一段代码补全示例python运行def router(state): if state[quick_mode]: return quick return detailed workflow.add_conditional_edges( analyze, router, { quick: quick_node, detailed: detailed_node } )三、两种简写模式模式 1显式映射推荐可读性高python运行workflow.add_conditional_edges( start, branch_func, {a: node_a, b: node_b} )模式 2隐式映射返回值 节点名省略字典如果路由返回的字符串刚好等于目标节点名可以不传 path_mappython运行workflow.add_conditional_edges(analyze, router) # 等价于 {quick:quick, detailed:detailed}对应你最初的代码场景最简写法python运行workflow.add_conditional_edges(analyze, router)四、完整可运行最小示例python运行from langgraph.graph import StateGraph from typing import TypedDict # 1. 定义状态 class State(TypedDict): content: str quick_mode: bool # 2. 节点函数 def analyze(state: State): return state def quick(state: State): print(执行快速流程) return state def detailed(state: State): print(执行详细流程) return state # 3. 路由函数 def route_analyze(state: State): if state[quick_mode]: return quick return detailed # 4. 构建图 builder StateGraph(State) builder.add_node(analyze, analyze) builder.add_node(quick, quick) builder.add_node(detailed, detailed) # 条件分支核心代码 builder.add_conditional_edges( sourceanalyze, path_fnroute_analyze, path_map{ quick: quick, detailed: detailed } ) # 入口 builder.set_entry_point(analyze) graph builder.compile() # 测试 graph.invoke({content: test, quick_mode: True}) graph.invoke({content: test, quick_mode: False})五、常见用法拓展1. 多分支3 个及以上分支python运行def multi_router(state): if state[type] search: return search elif state[type] write: return write return review builder.add_conditional_edges( plan, multi_router, { search: search_node, write: write_node, review: review_node } )2. 条件边指向结束节点 ENDpython运行from langgraph.graph import END builder.add_conditional_edges( check, exit_router, {finish: END, continue: loop_node} )3. 循环逻辑自环条件分支适合 Agent 多轮思考判断是否还要继续调用工具python运行def tool_router(state): if state[need_tool]: return tool return end builder.add_conditional_edges( agent, tool_router, {tool: tool, end: END} ) # tool执行完再回到agent builder.add_edge(tool, agent)六、常见踩坑router 返回值不在 path_map 的 key 里 → KeyError所有可能返回的字符串必须全部写入映射字典。节点名写错path_map 的 value 必须是已经add_node注册过的节点。路由函数必须接收完整 state 参数不能无参。条件边只能有一个起点一个add_conditional_edges对应一个 source。