个人主页 for_ever_love__ 欢迎各位大佬莅临其他栏目: 大模型开发从0到1 其他栏目: iOS项目总结大全 其他栏目: 我想学python了 其他栏目: iOS UI 文章目录子图把一张图嵌进另一张图一、先编一张子图二、把子图当节点挂上去三、子图的价值四、状态 schema 的衔接子图把一张图嵌进另一张图当图变复杂把所有节点平铺在一张图里会越来越难维护。LangGraph 支持子图Subgraph把一组相关节点先编成一张独立的小图再把它整体当成一个节点挂到主图里。结构像函数调用函数图也能嵌套图。一、先编一张子图fromtypingimportTypedDictfromlanggraph.graphimportStateGraph,START,ENDclassSubState(TypedDict):x:intok:booldefvalidate(state:SubState)-SubState:return{ok:state[x]0}deffix(state:SubState)-SubState:return{x:1}subStateGraph(SubState)sub.add_node(validate,validate)sub.add_node(fix,fix)sub.add_edge(START,validate)sub.add_edge(validate,fix)sub.add_edge(fix,END)sub_appsub.compile()二、把子图当节点挂上去主图里只需add_node(预处理, sub_app)就能像普通节点一样连边classMainState(TypedDict):x:intok:booldefmain_logic(state:MainState)-MainState:return{x:state[x]10}mainStateGraph(MainState)main.add_node(预处理,sub_app)# 直接传编译好的子图main.add_node(主逻辑,main_logic)main.add_edge(START,预处理)main.add_edge(预处理,主逻辑)main.add_edge(主逻辑,END)appmain.compile()当主图走到「预处理」节点时会完整执行整张子图子图跑完的最终状态再交还给主图继续走后面的边。三、子图的价值模块复用同一张子图可被多张主图引用改一处全局生效职责清晰每张子图聚焦一件事清洗、校验、检索……主图只关心编排可独立测试子图单独 compile 就能跑不必带着主图一起调状态隔离子图内部状态变化对主图透明主图只看到子图的输入/输出。四、状态 schema 的衔接子图和主图的状态可以是同一份也可以各自独立。若共享同一State类型子图节点直接读写主图状态若子图有自己的状态定义则通过「主图传入子图需要的字段、子图返回主图关心的字段」来衔接。新手建议先用共享状态等真出现命名冲突再拆。一句话子图让图从「一整张平铺的网」变成「可组合的层级结构」是构建大型 Agent 系统的必备手段。