LangGraph add_conditional_edges 完整详解

LangGraph add_conditional_edges 完整详解

一、基础语法

python

运行

复制代码
workflow.add_conditional_edges(
    source: str,                # 起始节点名
    path_fn: Callable,          # 路由判断函数
    path_map: Dict[str, str]    # 返回值 → 目标节点映射
)

作用:条件分支跳转,同一个节点执行完后,根据函数返回值走不同分支,类似 if/else。

二、参数拆解

  1. source 条件边的起点节点,字符串,如 "analyze"。

  2. path_fn(路由函数 router) 接收完整 state,返回一个字符串(分支标识):

    python

    运行

    复制代码
    def router(state):
        if state["is_quick"]:
            return "quick"
        else:
            return "detailed"
  3. path_map 映射字典 {返回值: 目标节点}

    • key:router 函数返回的字符串
    • 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_map:

python

运行

复制代码
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(
    source="analyze",
    path_fn=route_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. 条件边指向结束节点 END

python

运行

复制代码
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")

六、常见踩坑

  1. router 返回值不在 path_map 的 key 里 → KeyError 所有可能返回的字符串必须全部写入映射字典。
  2. 节点名写错 path_map 的 value 必须是已经 add_node 注册过的节点。
  3. 路由函数必须接收完整 state 参数,不能无参。
  4. 条件边只能有一个起点,一个 add_conditional_edges 对应一个 source。
相关推荐
云水初1 小时前
【项目篇】基于LanGraph的自动处理客服邮件的 Agent汇总
开发语言·笔记·python·学习·fastapi·langgraph
坊钰3 天前
【LangGraph框架入门级】12. 人机交互:interrupt 中断与 Command 恢复
开发语言·数据库·python·人机交互·ai编程·langgraph
范中勤4 天前
LangGraph Checkpointer 封装(下):with 的双层上下文与 MemorySaver 为什么不用 with
python·大模型·llm·agent·langgraph
for_ever_love__5 天前
LangGraph State 设计:多节点之间怎么安全地共享数据
redis·mysql·状态模式·checkpoint·state·状态图·langgraph
for_ever_love__5 天前
LangGraph Checkpointer:持久化、断点续跑与多轮记忆
服务器·数据库·学习·持久化·langgraph·checkpointer·断点续跑
for_ever_love__5 天前
LangChain 多工具协作:一个 Agent 不够用时怎么办
人工智能·langchain·langgraph·协作·多agent·多工具·工具编排
寻道码路5 天前
AI Agent 工程化开发实战(一):Agent 开发的四个层次——积木、运行时、薄壳、套件
人工智能·langchain·大模型·ai agent·langgraph·ai工程化·deep agents
旖旎夜光5 天前
【LangGraph实战】LangGraph 学习笔记(五):信息裁剪、人机交互与时间旅行
笔记·python·学习·ai·人机交互·langgraph
范中勤5 天前
LangChain / LangGraph Memory 记忆体系技术文档(作用域判定 · 官方现版本实现 · 工程坑点)
langchain·大模型·agent·langgraph·记忆体系
坊钰6 天前
【LangGraph框架入门级】4. 支持联网搜索的智能代理系统
python·ai编程·langgraph