04 边Edges边定义了节点之间的转换逻辑决定执行流程。一、普通边fromlanggraph.constantsimportSTART,END# A 执行完直接到 Bgraph.add_edge(node_a,node_b)# 从 START 开始graph.add_edge(START,node_1)# 到 END 结束graph.add_edge(node_last,END)执行顺序节点按边的定义顺序执行前一个节点完成后才执行下一个。二、条件边根据状态动态决定下一个节点。 条件边演示 运行方式python 04_条件边.py fromtypingimportLiteralfromlanggraph.graphimportStateGraph,START,ENDclassMyState(dict):query:strneed_rag:booldefrouter(state)-Literal[rag_node,direct_answer]:ifstate.get(need_rag):returnrag_nodereturndirect_answerdefrag_node(state):return{result:RAG检索结果}defdirect_answer(state):return{result:直接回答}builderStateGraph(MyState)builder.add_node(rag_node,rag_node)builder.add_node(direct_answer,direct_answer)builder.add_conditional_edges(router,router,{rag_node:rag_node,direct_answer:direct_answer})builder.add_edge(START,router)builder.add_edge(rag_node,END)builder.add_edge(direct_answer,END)graphbuilder.compile()resultgraph.invoke({query:你好,need_rag:False})print(result)三、可控循环 可控循环演示 运行方式python 04_可控循环.py fromtypingimportLiteralfromlanggraph.graphimportStateGraph,START,ENDfromlanggraph.errorsimportGraphRecursionErrorclassLoopState(dict):count:intmax_count:intdefnode_a(state):print(f执行A计数:{state[count]})return{count:state[count]1}defnode_b(state):print(f执行B计数:{state[count]})return{}defroute(state)-Literal[b,__end__]:ifstate[count]state[max_count]:returnENDreturnbbuilderStateGraph(LoopState)builder.add_node(a,node_a)builder.add_node(b,node_b)builder.add_edge(START,a)builder.add_conditional_edges(a,route)builder.add_edge(b,a)graphbuilder.compile()try:resultgraph.invoke({count:0,max_count:3},config{recursion_limit:6})print(f结果:{result})exceptGraphRecursionErrorase:print(f递归错误:{e})四、并行边 并行边演示 运行方式python 04_并行边.py fromlanggraph.graphimportStateGraph,START,ENDclassMyState(dict):result_a:strresult_b:strmerged:strdefnode_a(state):return{result_a:结果A}defnode_b(state):return{result_b:结果B}defmerge_node(state):return{merged:f{state[result_a]}{state[result_b]}}builderStateGraph(MyState)builder.add_node(node_a,node_a)builder.add_node(node_b,node_b)builder.add_node(merge,merge_node)# 并行从 START 分出两条边builder.add_edge(START,node_a)builder.add_edge(START,node_b)# 汇合两条边指向同一节点builder.add_edge(node_a,merge)builder.add_edge(node_b,merge)builder.add_edge(merge,END)graphbuilder.compile()resultgraph.invoke({})print(result)# {result_a: 结果A, result_b: 结果B, merged: 结果A 结果B}五、核心要点总结要点代码说明普通边add_edge(from, to)A 执行完直接到 B条件边add_conditional_edges(src, func, map)根据状态动态选择并行边多条add_edge(START, node)从同一点分出多条边循环边add_edge(b, a) 条件边形成循环需配合 recursion_limit递归限制config{recursion_limit: 25}防止无限循环相关笔记[[01-LangGraph概述与快速入门]] · [[02-状态]] · [[03-节点]] · [[05-子图Subgraph|子图]]