Monday, November 11, 2024

What is Langgraph Subgraph

Subgraphs allow you to build complex systems with multiple components that are themselves graphs. A common use case for using subgraphs is building multi-agent systems.


The main question when adding subgraphs is how the parent graph and subgraph communicate, i.e. how they pass the state between each other during the graph execution. There are two scenarios:


parent graph and subgraph share schema keys. In this case, you can add a node with the compiled subgraph

parent graph and subgraph have different schemas. In this case, you have to add a node function that invokes the subgraph: this is useful when the parent graph and the subgraph have different state schemas and you need to transform state before or after calling the subgraph

Below we show to to add subgraphs for each scenario.



subgraph_builder = StateGraph(SubgraphState)

subgraph_builder.add_node(subgraph_node_1)

subgraph_builder.add_node(subgraph_node_2)

subgraph_builder.add_edge(START, "subgraph_node_1")

subgraph_builder.add_edge("subgraph_node_1", "subgraph_node_2")

subgraph = subgraph_builder.compile()



builder = StateGraph(ParentState)

builder.add_node("node_1", node_1)

# note that we're adding the compiled subgraph as a node to the parent graph

builder.add_node("node_2", subgraph)

builder.add_edge(START, "node_1")

builder.add_edge("node_1", "node_2")

graph = builder.compile()


Add a node function that invokes the subgraph¶


def node_2(state: ParentState):

    # transform the state to the subgraph state

    response = subgraph.invoke({"bar": state["foo"]})

    # transform response back to the parent state

    return {"foo": response["bar"]}



builder = StateGraph(ParentState)

builder.add_node("node_1", node_1)

# note that instead of using the compiled subgraph we are using `node_2` function that is calling the subgraph

builder.add_node("node_2", node_2)

builder.add_edge(START, "node_1")

builder.add_edge("node_1", "node_2")

graph = builder.compile()



 references:

https://langchain-ai.github.io/langgraph/how-tos/subgraph/#add-a-node-with-the-compiled-subgraph

No comments:

Post a Comment