नमस्ते दोस्तों!
स्वागत है The Easy Master पर!
क्या आपने कभी सोचा है – एक AI agent bohot powerful hai, lekin agar 2, 3, 10 agents milke kaam karein toh kya ho sakta hai? Jaise – एक agent research kare, दूसरा summarise kare, तीसरा code likhe – सब एक साथ, coordinated तरीके से.
Yehi multi-agent AI systems हैं.
Maine jab pehli baar LangGraph seekha, तो mujhe laga – “Bas, simple agent bana diya. Ab kya?” Phir maine multi-agent architecture implement ki – Supervisor agent jo tasks distribute karta hai, worker agents jo actual kaam karte hain. System 10x smarter ho gaya.
Is FastAPI multi-agent AI Hindi article mein main aapko sikhata hoon:
✅ LangGraph kya hai – nodes, edges, StateGraph
✅ Multi-agent architectures – Supervisor, Hierarchical, Swarm
✅ LangGraph 1.0 features – Python/JS support, new APIs
✅ FastAPI integration – async endpoints ke saath
✅ Streaming responses (SSE) – real-time progress
✅ State management aur Checkpointing – memory aur persistence
✅ Human-in-the-Loop (HITL) – interrupt() se agent pause karo
✅ Real project – Research Assistant with Supervisor agents
End mein cheat sheet, practice prompts, aur feature image prompt bhi milega.
Chaliye multi-agent AI banana shuru karte hain! 🤖🚀
Table of Contents
1. LangGraph Kya Hai? – Multi-Agent ka Brain
LangGraph ek framework hai jo LangChain ke upar bana hai. Iska main kaam hai – AI agents ke beech flow control aur state management ko handle karna.
Simple words mein:
LangChain aapko agents banane ki tools deta hai. LangGraph aapko bataata hai ki agents kaise communicate karein, kis order mein execute ho, aur agar kuch galat ho toh wapas kaise jaayein.
Use Case:
- Research agent + Writing agent + Fact-checking agent ko coordinate karna
- LLM calls ke beech mein conditional routing
- Long-running workflows with human approval steps
- Stateful conversations with memory
LangGraph agents powered Uber, LinkedIn, aur Klarna jaise companies mein production mein chal rahe hain.
2. LangGraph vs LangChain – Difference Kya Hai?
| Feature | LangChain | LangGraph |
|---|---|---|
| Flow Control | Linear (chain) | Graph-based (nodes + edges) |
| Loops & Cycles | ❌ Difficult | ✅ Native support |
| State Management | Basic | Advanced with checkpointing |
| Multi-Agent | Limited | Full support (Supervisor, Swarm) |
| Human-in-the-Loop | ❌ No | ✅ Yes (interrupt()) |
| Persistence | Manual | Built-in checkpoints |
LangChain 1.0 ke agents actually LangGraph par built hain. Isliye agar aap LangChain 1.0 use karte ho, toh aap actually LangGraph ki power inherit kar rahe ho.
3. Core Components – Nodes, Edges, StateGraph
LangGraph ka foundation teen cheezo par bana hai:
3.1 State – Shared Data Structure
State ek Python class hai jo graph ke saare nodes ke beech shared rehta hai.
from typing import TypedDict, List, Annotated
from operator import add
class AgentState(TypedDict):
messages: Annotated[List, add] # add operator se history accumulate hogi
current_task: str
result: str3.2 Nodes – Execution Units
Node ek function hai jo state leta hai, kuch kaam karta hai, aur updated state return karta hai.
def research_node(state: AgentState):
# State se data read karo
task = state["current_task"]
# Kaam karo (e.g., call LLM, search web)
result = perform_research(task)
# Updated state return karo
return {"result": result}3.3 Edges – Control Flow
Edges define karte hain ki kaun sa node next execute hoga.
- Basic Edge: Fixed path (
graph.add_edge("node_a", "node_b")) - Conditional Edge: State ke hisaab se next node decide karo
def router(state: AgentState) -> str:
if "research" in state["current_task"]:
return "research_node"
else:
return "default_node"
graph.add_conditional_edges("start", router)3.4 StateGraph – Complete Graph
from langgraph.graph import StateGraph, START, END
graph = StateGraph(AgentState)
# Add nodes
graph.add_node("research", research_node)
graph.add_node("summarize", summarize_node)
# Add edges
graph.add_edge(START, "research")
graph.add_edge("research", "summarize")
graph.add_edge("summarize", END)
# Compile graph
app = graph.compile()4. LangGraph 1.0 – 2026 में क्या नया है?
LangGraph 1.0 (October 2025 stable release) ke baad, 2026 mein kuch important updates aaye hain:
4.1 Python + JavaScript Dual Language Support
LangGraph 1.0 Alpha Python aur JavaScript dono support karta hai. Ab aap apni preferred language mein multi-agent systems bana sakte ho.
4.2 Functional API (New in 1.0)
Naya functional API minimal code mein persistent memory, streaming, aur HITL features provide karta hai – bina complex graph structures ke.
from langgraph.func import entrypoint, task
@entrypoint()
def my_workflow(state):
result = my_task(state)
return result4.3 Improved Multi-Agent Support
LangGraph 1.0 mein multi-agent patterns ka native support hai – Supervisor, Hierarchical, Swarm sab built-in hai.
5. Multi-Agent Architecture Patterns
Multi-agent systems mein agents ek saath kaam karte hain. Teen main patterns hain:
5.1 Supervisor Pattern (Star Topology)
Ek central Supervisor agent sab worker agents ko control karta hai. Supervisor decide karta hai ki kaun sa worker call karna hai, aur kab.
Use case: Question Answering system – ek agent research kare, ek summarise kare, ek final answer format kare.
5.2 Hierarchical Pattern
Multiple levels ke supervisors hote hain. Top-level supervisor high-level tasks distribute karta hai, lower-level supervisors detailed execution handle karte hain.
Use case: Large enterprise workflows, project management systems.
5.3 Swarm Pattern (Decentralized)
Koi central supervisor nahi hai. Agents aapas mein communicate karte hain, task pass karte hain, aur collectively kaam complete karte hain.
Use case: Auction systems, distributed problem solving.
Is article mein hum Supervisor Pattern focus karenge – most common aur easy to implement.
6. Project Setup – Dependencies Install Karein
# Virtual environment banao
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# Dependencies install karo
pip install fastapi uvicorn langgraph langchain langchain-openai python-dotenv sse-starletteHar package kya karta hai:
| Package | Role |
|---|---|
fastapi + uvicorn | Web framework |
langgraph | Multi-agent orchestration |
langchain | LLM abstractions |
langchain-openai | OpenAI integration |
sse-starlette | Server-Sent Events streaming |
.env file banao:
OPENAI_API_KEY="your-api-key-here"7. Multi-Agent System with Supervisor – Step by Step
Chaliye ek practical multi-agent system banate hain.
System Design: Ek Supervisor agent user query ko analyze karega aur decide karega ki:
- Research Agent – web search kare (simulate karenge)
- Math Agent – calculations kare
- Summarize Agent – final answer format kare
Step 1: Define State
from typing import TypedDict, List, Annotated, Literal
from operator import add
class MultiAgentState(TypedDict):
messages: Annotated[List, add]
query: str
next_agent: str
research_result: str
math_result: str
final_answer: strStep 2: Create Worker Agents
from langchain_openai import ChatOpenAI
from langgraph.types import Command
import operator
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
# Research Agent
def research_agent(state: MultiAgentState):
query = state["query"]
# Simulate research (real implementation mein Tavily ya other search use karo)
research_result = f"Research findings for '{query}': Found 5 relevant sources..."
return Command(
update={"research_result": research_result},
goto="supervisor" # Wapas supervisor ke paas jao
)
# Math Agent
def math_agent(state: MultiAgentState):
query = state["query"]
# Simple math extraction
import re
numbers = re.findall(r'\d+', query)
if numbers:
result = sum(int(n) for n in numbers)
math_result = f"Sum of numbers: {result}"
else:
math_result = "No math operations found"
return Command(
update={"math_result": math_result},
goto="supervisor"
)
# Summarize Agent
def summarize_agent(state: MultiAgentState):
research = state.get("research_result", "No research found")
math = state.get("math_result", "")
combined = f"Research: {research}\nMath: {math}"
response = llm.invoke([
{"role": "system", "content": "You are a summarizer. Create a concise final answer from the provided information."},
{"role": "user", "content": combined}
])
return Command(
update={"final_answer": response.content},
goto="__end__" # Graph end
)Step 3: Create Supervisor Agent
Supervisor decide karega ki kaun sa agent next call karna hai.
from langgraph.graph import StateGraph, START, END
from langgraph_supervisor import create_supervisor # Requires pip install langgraph-supervisor
# Ya manually implement with conditional routing
def supervisor_router(state: MultiAgentState) -> str:
"""Decide which agent to call next"""
query = state["query"].lower()
# Check if research needed
if "search" in query or "find" in query or "research" in query:
if not state.get("research_result"):
return "research_agent"
# Check if math needed
if any(word in query for word in ["sum", "add", "calculate", "math", "number"]):
if not state.get("math_result"):
return "math_agent"
# If both done, go to summarize
if state.get("research_result") or state.get("math_result"):
return "summarize_agent"
return "summarize_agent"Step 4: Build and Compile Graph
# Create graph
builder = StateGraph(MultiAgentState)
# Add nodes
builder.add_node("supervisor", lambda state: state) # Router node
builder.add_node("research_agent", research_agent)
builder.add_node("math_agent", math_agent)
builder.add_node("summarize_agent", summarize_agent)
# Add edges
builder.add_edge(START, "supervisor")
builder.add_conditional_edges("supervisor", supervisor_router, {
"research_agent": "research_agent",
"math_agent": "math_agent",
"summarize_agent": "summarize_agent"
})
# Worker agents wapas supervisor ko route karte hain via Command (already handled)
builder.add_edge("research_agent", "supervisor")
builder.add_edge("math_agent", "supervisor")
builder.add_edge("summarize_agent", END)
# Compile
agent_graph = builder.compile()8. FastAPI Integration – Endpoints Banayein
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from contextlib import asynccontextmanager
app = FastAPI(title="Multi-Agent AI Assistant")
# Request/Response models
class QueryRequest(BaseModel):
query: str
class QueryResponse(BaseModel):
final_answer: str
research_result: str = None
math_result: str = None
@app.post("/ask", response_model=QueryResponse)
async def ask_agent(request: QueryRequest):
try:
initial_state = {
"messages": [],
"query": request.query,
"next_agent": "",
"research_result": "",
"math_result": "",
"final_answer": ""
}
result = await agent_graph.ainvoke(initial_state)
return QueryResponse(
final_answer=result.get("final_answer", "No answer generated"),
research_result=result.get("research_result"),
math_result=result.get("math_result")
)
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))9. Streaming Responses (SSE) – Real-Time Agent Activity
User ko real-time mein agent activity dikhane ke liye streaming implement karo – “Agent soch raha hai… Research kar raha hai…”.
from fastapi.responses import StreamingResponse
import json
import asyncio
@app.post("/ask/stream")
async def ask_agent_stream(request: QueryRequest):
async def event_generator():
try:
initial_state = {
"messages": [],
"query": request.query,
"next_agent": "",
"research_result": "",
"math_result": "",
"final_answer": ""
}
# Send start event
yield f"data: {json.dumps({'type': 'start', 'query': request.query})}\n\n"
await asyncio.sleep(0.1)
# Send planning event
yield f"data: {json.dumps({'type': 'planning', 'message': '🤔 Analyzing your query...'})}\n\n"
await asyncio.sleep(0.5)
# Stream each step (simplified – actual implementation use astream_events)
if "search" in request.query.lower():
yield f"data: {json.dumps({'type': 'research', 'message': '🔍 Research Agent searching the web...'})}\n\n"
await asyncio.sleep(1)
if "sum" in request.query.lower() or "add" in request.query.lower():
yield f"data: {json.dumps({'type': 'math', 'message': '🧮 Math Agent calculating...'})}\n\n"
await asyncio.sleep(0.5)
# Execute agent and get final result
result = await agent_graph.ainvoke(initial_state)
# Stream final answer token by token
final_answer = result.get("final_answer", "")
words = final_answer.split()
for i, word in enumerate(words):
yield f"data: {json.dumps({'type': 'token', 'content': word + (' ' if i < len(words)-1 else '')})}\n\n"
await asyncio.sleep(0.03) # Typing effect
# Send done event
yield f"data: {json.dumps({'type': 'done'})}\n\n"
except Exception as e:
yield f"data: {json.dumps({'type': 'error', 'message': str(e)})}\n\n"
return StreamingResponse(
event_generator(),
media_type="text/event-stream",
headers={
"Cache-Control": "no-cache",
"Connection": "keep-alive",
"X-Accel-Buffering": "no"
}
)💡 Pro Tip: LangGraph 1.0 introduces
astream_events()for fine-grained streaming of agent events – node starts, node ends, token generations, etc. Implementation is more complex but provides granular control.
10. State Management and Checkpointing – Persistence Layer
LangGraph production use ke liye checkpointing provide karta hai. Checkpointer har step par graph state save karta hai.
Why checkpointing?
- Human-in-the-loop (pause and resume)
- Memory across conversations
- Fault tolerance – agent crash hua toh resume kar sakte ho
- Time travel – previous states mein wapas ja sakte ho
Checkpointer Implementation
from langgraph.checkpoint.sqlite import SqliteSaver
# Create checkpointer
checkpointer = SqliteSaver.from_conn_string("checkpoints.db")
# Compile graph with checkpointer
agent_graph = builder.compile(checkpointer=checkpointer)
# Use with thread_id for conversation management
config = {"configurable": {"thread_id": "user_123"}}
# Invoke with config
result = await agent_graph.ainvoke(initial_state, config=config)
# Resume from checkpoint (for HITL)
result = await agent_graph.ainvoke(None, config=config)11. Human-in-the-Loop (HITL) – Jab Agent Ko Human Approval Chahiye
Kabhi kabhi agent ko human approval ki zaroorat hoti hai – e.g., “Kya main ye email send karun?” LangGraph ka interrupt() function iske liye perfect hai.
HITL Implementation
from langgraph.types import interrupt, Command
def human_approval_node(state: MultiAgentState):
"""Node that asks for human approval before proceeding"""
# Create interrupt – graph execution pause ho jayegi
user_approval = interrupt({
"question": "Shall I send the email?",
"draft": state.get("draft_email", ""),
"options": ["yes", "no", "edit"]
})
if user_approval == "yes":
return Command(
update={"status": "approved", "user_decision": "yes"},
goto="send_email_node"
)
elif user_approval == "no":
return Command(
update={"status": "rejected", "user_decision": "no"},
goto="__end__"
)
else:
return Command(
update={"status": "needs_edit", "user_decision": "edit"},
goto="edit_email_node"
)
# Add to graph
builder.add_node("human_approval", human_approval_node)FastAPI endpoint for HITL resume:
class ResumeRequest(BaseModel):
thread_id: str
user_decision: str # "yes", "no", or custom value
@app.post("/agent/resume")
async def resume_agent(request: ResumeRequest):
config = {"configurable": {"thread_id": request.thread_id}}
# Resume execution with user input
result = await agent_graph.ainvoke(
Command(resume=request.user_decision),
config=config
)
return {"result": result}12. Real Project – Complete Research Assistant API
Ab sab kuch combine karte hain – complete production-ready multi-agent research assistant. (Full code examples in article already cover core concepts; here’s final API structure with integrated streaming and persistence.)
Project structure:
research_assistant/
├── app/
│ ├── __init__.py
│ ├── main.py
│ ├── graph.py # Agent graph definition
│ ├── agents.py # Worker agent implementations
│ ├── models.py # Pydantic models
│ ├── streaming.py # SSE event handling
│ └── checkpoints.py # Checkpointer setup
├── .env
└── requirements.txtFinal API endpoints:
POST /research/ask– Synchronous query processingPOST /research/stream– Streaming endpoint with real-time updatesGET /research/{thread_id}/status– Check query statusPOST /research/{thread_id}/resume– Resume after human approval
13. Common Mistakes (aur Unka Solution!)
| Mistake | Why? | Solution |
|---|---|---|
| State mutations bhoolna | Nodes should return updates, not mutate input | Always return Command(update={...}) |
| No checkpointing in production | Graph state lost on crash | Use SQLite/Postgres checkpointer |
| Blocking code inside async | Event loop blocked | Use await for all async operations |
| Missing error handling in nodes | Graph stops on error without fallback | Add try-except and return error state |
| Too many agents in one graph | Complexity and cost increase | Limit to 3-5 agents, use hierarchy |
| No timeout on agent execution | Agent can loop infinitely | Use asyncio timeout wrapper |
| Hardcoded agent decisions | Not adaptable to different queries | Use LLM-based supervisor routing |
| Not using streaming | Users don’t see progress | Always implement SSE for UX |
14. Best Practices – Production Ready Code
✅ Use checkpointer always – Enable persistence, memory, resume capability
✅ Implement streaming – Use SSE for real-time user feedback
✅ Add timeouts for agents:
async with asyncio.timeout(30):
result = await agent.ainvoke(state)✅ Log agent decisions – For debugging and monitoring
✅ Use environment-specific configs – Different models for dev vs production
✅ Set up observability – LangSmith for tracing and monitoring
✅ Design for modularity – Each agent should be independently testable
✅ Implement rate limiting per thread/user
15. Resources – Cheat Sheet + Practice Prompts
Cheat Sheet (Copy-Paste Ready)
# ---------- BASIC GRAPH ----------
from langgraph.graph import StateGraph, START, END
graph = StateGraph(MyState)
graph.add_node("node_a", func_a)
graph.add_edge(START, "node_a")
graph.add_edge("node_a", END)
app = graph.compile()
# ---------- CONDITIONAL EDGES ----------
def router(state):
if state["condition"]: return "node_b"
return "node_c"
graph.add_conditional_edges("node_a", router)
# ---------- COMMAND PATTERN ----------
from langgraph.types import Command
def my_node(state):
return Command(
update={"field": value},
goto="next_node"
)
# ---------- HUMAN-IN-THE-LOOP ----------
from langgraph.types import interrupt
def approval_node(state):
user_input = interrupt({"prompt": "Approve?"})
if user_input == "yes":
return Command(goto="next")
return Command(goto="__end__")
# ---------- FASTAPI ENDPOINT ----------
@app.post("/ask")
async def ask(request: Request):
result = await graph.ainvoke({"query": request.query})
return resultPractice Prompts
- Beginner: Do agents banayo – ek “capital finder” (given country, return capital) aur doosra “weather checker”. Supervisor agent decide karega kaun sa agent call karna hai.
- Intermediate: Streaming implement karo – agent activity show karo (e.g., “Research Agent working…”, “Math Agent calculating…”, “Finalizing answer…”). Frontend dummy banao HTML+JS se.
- Advanced: Human-in-the-loop implement karo – ek email writer agent banao jo draft generate kare, fir human approval node se pause ho, fir user approve kare toh email “send” (print to console) ho.
16. FAQ
Q1: LangGraph aur LangChain ka relation kya hai?
LangGraph LangChain ke upar bana hai. LangChain agents actually LangGraph use karte hain internally. Agar aap LangChain use karte ho, toh aap LangGraph ki power inherit karte ho.
Q2: Multi-agent system mein kitne agents use kar sakte hain?
Theory mein unlimited, par practice mein 3-5 agents recommended. Zyada agents se cost, latency, aur complexity badh jati hai.
Q3: Checkpointing kyun zaroori hai?
Checkpointing agent ko memory deta hai, human-in-the-loop enable karta hai, aur crash ke baad resume karne deta hai. Production mein must hai.
Q4: Supervisor pattern vs Swarm pattern – better kya hai?
Supervisor easier to debug aur control mein hai. Swarm more flexible but complex hai. Start with Supervisor pattern.
Q5: LangGraph 1.0 mein kya naya hai?
Functional API, Python/JS dual language support, improved streaming, aur better multi-agent tools – sab kuch naya hai.
Q6: Streaming kaise implement karein?
Server-Sent Events (SSE) use karo. LangGraph astream() ya astream_events() provides streaming events – tokens, node updates, tool calls, sab real-time mein.
Q7: Human-in-the-loop production mein kaam karega?
Haan! interrupt() mechanism production-ready hai. Agent pause ho jayega, state checkpoint ho jayegi, aur resume kar sakte ho hours/days baad bhi.
17. Conclusion – Ab Aapki Baari!
Bahut badhiya! Aapne aaj seekh liya:
✅ FastAPI multi-agent AI Hindi mein – complete LangGraph fundamentals
✅ Graph components – nodes, edges, state, StateGraph
✅ Multi-agent architectures – Supervisor pattern step by step
✅ FastAPI integration – async endpoints aur streaming
✅ Checkpointing – production mein persistence
✅ Human-in-the-loop – interrupt() and resume
Multi-agent systems AI agents ko 10x smarter banate hain. Ab aap complex workflows orchestrate kar sakte ho – research, analysis, content generation, sab kuch.
Aapki challenge: Upar diye practice prompts mein se koi ek implement karo. Apna code comment mein share karo – main review karunga.
Next topic kya chahiye?
- FastAPI + RAG (Retrieval-Augmented Generation)?
- FastAPI + Vector Database (Pinecone/Chroma)?
- FastAPI WebSockets + AI Agents (real-time)?
Comment mein batao!
The Easy Master ke saath multi-agent AI seekhte raho. Happy building! 🤖🚀
Resources
- LangGraph Official Documentation
- LangGraph 1.0 Alpha Announcement
- Multi-Agent Supervisor Pattern
- LangGraph Checkpointers
- LangGraph Human-in-the-Loop Guide
Additional Resources
- MongoDB Setup – CRUD Operations समझे (Beginner Guide) 2026
- MongoDB Compass से GUI Database Manage करने का आसान तरीका | Beginner Tutorial 2026
- Node.js MongoDB Connection – Mongoose Setup समझे 2026
- MongoDB Data Modeling – Embedded Documents vs References 2026
- MongoDB Indexing – Query Speed बढ़ने करने का आसान तरीका
- MongoDB Aggregation Pipeline – Stages समझे | Practical Examples
- Express MongoDB CRUD – Complete REST API Example
- Mongoose ODM – Schema, Model, and Validation समझे 2026
- MongoDB Atlas – Cloud Database Free में Deploy करें 2026
- JWT Authentication MongoDB – User Login System कैसे बनाएं 2026
- Next.js App Router – Pages Router से क्या बदला? Complete Guide 2026
- Next.js Server Components – ‘use client’ कब और कहां Use करें
- Next.js Routing – Layouts, Dynamic Routes and Nested Routes 2026
- Next.js 16 New Features – Turbopack, Cache Components and proxy.ts
- Next.js Partial Prerendering – Static and Dynamic Content साथ में
- Next.js Authentication – JWT Session Management (App Router) 2026
- Next.js SEO – Metadata API and Image Optimization समझे 2026
- Next.js TypeScript – Full-Stack Type-Safe App कैसे बनाएं
- FastAPI Kya Hai? FastAPI Python Setup Aur Pehla API Hindi 2026
- FastAPI Path Parameters Hindi – शून्य से हीरो तक गाइड 2026
- Pydantic v2 Tutorial Hindi – Data Validation Master 2026
- FastAPI dependency injection Hindi – Code Reuse Ka Magic
- FastAPI Async Await Hindi – Non-Blocking Code 2026
- FastAPI PostgreSQL SQLModel Hindi – Async Guide 2026
- FastAPI JWT Authentication Hindi – Secure API Login
- FastAPI OpenAI Integration Hindi – AI Chatbot API 2026
Views: 460