LangGraph之条件边

在 LangGraph 中,条件边(conditional edges) 是用于在图(graph)中根据节点的输出动态决定下一步应执行哪个节点的一种机制。它通过 add_conditional_edges() 方法添加到图中。

例如:

python 复制代码
state_graph.add_conditional_edges(NodeConstant.COORDINATION.value, coor_to_other,
                                      {NodeConstant.PLANNER.value: NodeConstant.PLANNER.value, NodeConstant.END.value: END})

条件函数触发(被调用)场景

前一个节点执行完成并返回结果之后立即被调用。LangGraph 会将该节点的输出作为参数传递给这个条件函数。

例如:

python 复制代码
def decide_next(state):
    if state["score"] > 50:
        return "pass"
    else:
        return "fail"

graph.add_conditional_edge("evaluate", decide_next, {"pass": "accept", "fail": "reject"})
  • "evaluate" 节点运行结束,返回一个状态字典(如 {"score": 70}),
  • LangGraph 就会调用 decide_next(state)
  • 根据其返回值(如 "pass")决定下一步跳转到 "accept" 节点。

中断机制 与 条件边函数 的执行顺序

结论:条件边函数会在中断生效前被调用

详细解释

1. __interrupt__ 的作用时机

在 LangGraph(特别是 v0.2+ 的 StateGraph + Command 模式)中:

  • 当你在 update 字典中包含 "__interrupt__": [...] 时,表示:在本次节点执行完成后、进入下一个节点之前,暂停图的执行
  • 但注意:"完成当前节点" ≠ "直接中断"。LangGraph 仍需知道"如果没中断,下一步该去哪",这样才能在恢复时知道从哪里继续。

因此,LangGraph 的执行流程如下:

text 复制代码
[当前节点执行] 
   → 返回 Command(update={..., "__interrupt__": ...})
   → 应用 state 更新
   → **计算下一跳(包括调用条件边函数)**
   → 发现 __interrupt__ 存在
   → **暂停执行,并记录"计划中的下一个节点"**

✅ 所以,条件边函数是在中断检查之前就被调用的,因为它是"确定下一跳"的必要步骤。


2. 为什么需要先算"下一跳"再中断?

LangGraph 的中断机制设计为 "可恢复的工作流" 。当中断发生后,外部系统(如用户)处理完中断事件(例如提供人工输入),会调用 .stream().invoke() 继续执行。

此时,LangGraph 必须知道:

  • 中断前原本打算去哪个节点?
  • 这个"原本打算去的节点"正是通过条件边(或普通边)计算出来的。

所以,即使要中断,也必须先走完路由逻辑(包括条件边),把"计划中的下一个节点"保存下来。


自此,本文分享到此结束!!!

相关推荐
l12586521 分钟前
# RAG上线评估指标体系:六大核心指标与压测实战全解析
数据库·人工智能·python·mysql·langchain·milvus
用户38845671995420 小时前
LangChain 源码解析:HumanInTheLoopMiddleware 如何实现 Agent 人机协同
langchain
l1258651 天前
# RAG向量数据库优化实战:HNSW索引调参与生产级性能设计
数据库·python·mysql·langchain
l1258651 天前
# RAG噪声知识库治理:一致性与可信度的四层防线设计
数据库·人工智能·python·自然语言处理·langchain
二进制_博客1 天前
rag面试题之rag 系统如何解决 llm 的幻觉问题
langchain·rag
jyOverQ1 天前
LangGraph 流式执行详解:stream、astream 与 stream_mode 怎么选?
python·langchain
l1258651 天前
# RAG低延迟架构设计:从5秒到500ms的优化全链路
数据库·人工智能·python·langchain
睡觉时不困4421 天前
17.LangChain 1.0+ 第五篇:Tools 工具——让大模型从认识世界到改变世界
langchain
为你学会写情书1 天前
NestJS + LangChain 集成指南:从库封装到手动构建
langchain
草莓熊Lotso1 天前
【Linux网络加餐】手动部署:SSH 与 Web 服务实战 + 底层原理全解析
linux·运维·网络·人工智能·python·langchain·ssh