How to build an agent with LangGraph
Direct answer
Use the
LangGraph Python SDK to define nodes representing LLM calls and tools, then connect them into a graph to build an agent that executes complex AI workflows.Setup
Install
pip install langgraph openai Env vars
OPENAI_API_KEY Imports
import os
from langgraph import LangGraph, Node
from langgraph.nodes import OpenAICompletionNode Examples
inCreate a LangGraph agent that takes a user question and returns a summarized answer.
outAgent receives 'What is LangGraph?', calls OpenAICompletionNode to generate a summary, and returns the concise answer.
inBuild an agent that chains two LLM calls: first to extract keywords, second to generate a paragraph using those keywords.
outAgent extracts keywords from input text, then feeds them to a second node that generates a paragraph, returning the final text.
inCreate an agent that uses LangGraph to call an LLM and then a calculator tool node to compute a math expression.
outAgent calls LLM to parse math question, then calculator node to compute result, returning the numeric answer.
Integration steps
- Install LangGraph and OpenAI SDK and set your OPENAI_API_KEY in environment variables.
- Import LangGraph classes and define nodes for LLM calls or tools.
- Create a LangGraph instance and add nodes representing each step of your agent's workflow.
- Connect nodes by specifying outputs and inputs to form a directed graph.
- Run the graph with input data to execute the agent and get the final output.
- Extract and handle the output from the graph execution for your application.
Full code
import os
from langgraph import LangGraph, Node
from langgraph.nodes import OpenAICompletionNode
# Initialize LangGraph
graph = LangGraph()
# Define an LLM node that answers questions
llm_node = OpenAICompletionNode(
model="gpt-4o",
prompt_template="Answer the question concisely: {question}",
api_key=os.environ["OPENAI_API_KEY"]
)
# Add node to graph
graph.add_node("answer_node", llm_node)
# Define input data
input_data = {"question": "What is LangGraph?"}
# Run the graph
output = graph.run(input_data)
# Print the answer
print("Agent output:", output["answer_node"]) output
Agent output: LangGraph is a Python framework for building AI agents by connecting LLM and tool nodes into directed graphs to automate workflows.
API trace
Request
{"model": "gpt-4o", "prompt": "Answer the question concisely: What is LangGraph?", "max_tokens": 100} Response
{"choices": [{"text": "LangGraph is a Python framework for building AI agents by connecting LLM and tool nodes into directed graphs."}]} Extract
response.choices[0].textVariants
Streaming LangGraph Agent ›
Use streaming mode to get partial outputs in real-time for better user experience with long responses.
import os
from langgraph import LangGraph
from langgraph.nodes import OpenAICompletionNode
graph = LangGraph(streaming=True)
llm_node = OpenAICompletionNode(
model="gpt-4o",
prompt_template="Answer concisely: {question}",
api_key=os.environ["OPENAI_API_KEY"]
)
graph.add_node("answer_node", llm_node)
input_data = {"question": "Explain LangGraph streaming."}
for chunk in graph.stream(input_data):
print(chunk["answer_node"], end='') Async LangGraph Agent ›
Use async mode to integrate LangGraph agents into asynchronous applications or concurrent workflows.
import os
import asyncio
from langgraph import LangGraph
from langgraph.nodes import OpenAICompletionNode
async def main():
graph = LangGraph()
llm_node = OpenAICompletionNode(
model="gpt-4o",
prompt_template="Answer concisely: {question}",
api_key=os.environ["OPENAI_API_KEY"]
)
graph.add_node("answer_node", llm_node)
input_data = {"question": "What is LangGraph async?"}
output = await graph.run_async(input_data)
print("Async output:", output["answer_node"])
asyncio.run(main()) Agent with Calculator Tool Node ›
Use when your agent needs to combine LLM understanding with precise tool execution like math calculations.
import os
from langgraph import LangGraph
from langgraph.nodes import OpenAICompletionNode, CalculatorNode
graph = LangGraph()
# Node to parse math question
parse_node = OpenAICompletionNode(
model="gpt-4o",
prompt_template="Extract the math expression from: {question}",
api_key=os.environ["OPENAI_API_KEY"]
)
# Calculator node to compute expression
calc_node = CalculatorNode()
graph.add_node("parse", parse_node)
graph.add_node("calc", calc_node)
# Connect parse output to calc input
graph.connect("parse", "calc", output_key="text", input_key="expression")
input_data = {"question": "What is 12 times 8?"}
output = graph.run(input_data)
print("Calculation result:", output["calc"]) Performance
Latency~800ms per LLM node call on gpt-4o non-streaming
Cost~$0.002 per 500 tokens for gpt-4o calls
Rate limitsTier 1: 500 RPM / 30K TPM for OpenAI API
- Use concise prompt templates to reduce token usage.
- Cache intermediate node outputs when possible to avoid repeated calls.
- Limit max_tokens parameter to only what you need.
| Approach | Latency | Cost/call | Best for |
|---|---|---|---|
| Basic LangGraph Agent | ~800ms | ~$0.002 | Simple sequential workflows |
| Streaming Agent | Starts output in ~300ms | ~$0.002 | Long responses with better UX |
| Async Agent | ~800ms | ~$0.002 | Concurrent or async app integration |
Quick tip
Define each step of your agent as a node in LangGraph and connect them explicitly to control data flow and logic.
Common mistake
Not connecting nodes properly in the graph, resulting in missing inputs or outputs during execution.