💻 源码
from langgraph.graph import StateGraph, START, END
from typing import TypedDict


# ---------- 子图 ----------
class SubState(TypedDict):
    msg: str


def say_hello(state: SubState):
    print("👋 子图:你好,我是子流程!")
    print(state)
    return state


def say_bye(state: SubState):
    print("👋 子图:再见!")
    return state


def build_subgraph():
    graph_builder = StateGraph(SubState)
    graph_builder.add_node("hello", say_hello)
    graph_builder.add_node("bye", say_bye)
    graph_builder.add_edge(START, "hello")
    graph_builder.add_edge("hello", "bye")
    graph_builder.add_edge("bye", END)
    return graph_builder.compile()


# ---------- 主图 ----------
class MainState(TypedDict):
    done: bool


def start_main(state: MainState):
    print("🚀 主图开始运行!")
    return state


def finish_main(state: MainState):
    print("✅ 主图:全部完成!")
    state["done"] = True
    return state


def build_main_graph():
    subgraph = build_subgraph()  # ✅ 子图

    g = StateGraph(MainState)
    g.add_node("start", start_main)
    g.add_node("sub", subgraph)  # 👈 把子图当作一个节点
    g.add_node("finish", finish_main)

    g.add_edge(START, "start")
    g.add_edge("start", "sub")
    g.add_edge("sub", "finish")
    g.add_edge("finish", END)
    return g.compile()


# ---------- 运行 ----------
if __name__ == "__main__":
    graph = build_main_graph()
    result = graph.invoke({})
    print("结果:", result)