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.
Community Notes
No notes yetBe the first to share a version-specific fix or tip.