Agents Course documentation
Building Blocks of LangGraph
Building Blocks of LangGraph
To build applications with LangGraph, you need to understand its core components. Let’s explore the fundamental building blocks that make up a LangGraph application.

An application in LangGraph starts from an entrypoint, and depending on the execution, the flow may go to one function or another until it reaches the END.

1. State
State is the central concept in LangGraph. It represents all the information that flows through your application.
from typing_extensions import TypedDict
class State(TypedDict):
graph_state: str
The state is User defined, hence the fields should carefully be crafted to contain all data needed for decision-making process!
💡 Tip: Think carefully about what information your application needs to track between steps.
2. Nodes
Nodes are python functions. Each node:
- Takes the state as input
- Performs some operation
- Returns updates to the state
def node_1(state):
print("---Node 1---")
return {"graph_state": state['graph_state'] +" I am"}
def node_2(state):
print("---Node 2---")
return {"graph_state": state['graph_state'] +" happy!"}
def node_3(state):
print("---Node 3---")
return {"graph_state": state['graph_state'] +" sad!"}
For example, Nodes can contain:
- LLM calls: Generate text or make decisions
- Tool calls: Interact with external systems
- Conditional logic: Determine next steps
- Human intervention: Get input from users
💡 Info: Some nodes necessary for the whole workflow like START and END exist from langGraph directly.
3. Edges
Edges connect nodes and define the possible paths through your graph:
import random
from typing import Literal
def decide_mood(state) -> Literal["node_2", "node_3"]:
# Often, we will use state to decide on the next node to visit
user_input = state['graph_state']
# Here, let's just do a 50 / 50 split between nodes 2, 3
if random.random() < 0.5:
# 50% of the time, we return Node 2
return "node_2"
# 50% of the time, we return Node 3
return "node_3"
Edges can be:
- Direct: Always go from node A to node B
- Conditional: Choose the next node based on the current state
4. StateGraph
The StateGraph is the container that holds your entire agent workflow:
from IPython.display import Image, display
from langgraph.graph import StateGraph, START, END
# Build graph
builder = StateGraph(State)
builder.add_node("node_1", node_1)
builder.add_node("node_2", node_2)
builder.add_node("node_3", node_3)
# Logic
builder.add_edge(START, "node_1")
builder.add_conditional_edges("node_1", decide_mood)
builder.add_edge("node_2", END)
builder.add_edge("node_3", END)
# Add
graph = builder.compile()
Which can then be visualized!
# View
display(Image(graph.get_graph().draw_mermaid_png()))

But most importantly, invoked:
graph.invoke({"graph_state" : "Hi, this is Lance."})
output :
---Node 1---
---Node 3---
{'graph_state': 'Hi, this is Lance. I am sad!'}
What’s Next?
In the next section, we’ll put these concepts into practice by building our first graph. This graph lets Alfred take in your e-mails, classify them, and craft a preliminary answer if they are genuine.
< > Update on GitHub