Skip to content
PythonFastAPI

9. FastAPI Multi-Agent AI Hindi – LangGraph Zero to Hero

May 23, 2026 17 min read

नमस्ते दोस्तों!

स्वागत है 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! 🤖🚀

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?

FeatureLangChainLangGraph
Flow ControlLinear (chain)Graph-based (nodes + edges)
Loops & Cycles❌ Difficult✅ Native support
State ManagementBasicAdvanced with checkpointing
Multi-AgentLimitedFull support (Supervisor, Swarm)
Human-in-the-Loop❌ No✅ Yes (interrupt())
PersistenceManualBuilt-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.

Code
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: str

3.2 Nodes – Execution Units

Node ek function hai jo state leta hai, kuch kaam karta hai, aur updated state return karta hai.

Code
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
Code
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

Code
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.

Code
from langgraph.func import entrypoint, task

@entrypoint()
def my_workflow(state):
    result = my_task(state)
    return result

4.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

Code
# 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-starlette

Har package kya karta hai:

PackageRole
fastapi + uvicornWeb framework
langgraphMulti-agent orchestration
langchainLLM abstractions
langchain-openaiOpenAI integration
sse-starletteServer-Sent Events streaming

.env file banao:

Code
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

Code
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: str

Step 2: Create Worker Agents

Code
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.

Code
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

Code
# 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

Code
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…”.

Code
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

Code
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

Code
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:

Code
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:

Code
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.txt

Final API endpoints:

  • POST /research/ask – Synchronous query processing
  • POST /research/stream – Streaming endpoint with real-time updates
  • GET /research/{thread_id}/status – Check query status
  • POST /research/{thread_id}/resume – Resume after human approval

13. Common Mistakes (aur Unka Solution!)

MistakeWhy?Solution
State mutations bhoolnaNodes should return updates, not mutate inputAlways return Command(update={...})
No checkpointing in productionGraph state lost on crashUse SQLite/Postgres checkpointer
Blocking code inside asyncEvent loop blockedUse await for all async operations
Missing error handling in nodesGraph stops on error without fallbackAdd try-except and return error state
Too many agents in one graphComplexity and cost increaseLimit to 3-5 agents, use hierarchy
No timeout on agent executionAgent can loop infinitelyUse asyncio timeout wrapper
Hardcoded agent decisionsNot adaptable to different queriesUse LLM-based supervisor routing
Not using streamingUsers don’t see progressAlways 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:

Code
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)

Code
# ---------- 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 result

Practice Prompts

  1. 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.
  2. Intermediate: Streaming implement karo – agent activity show karo (e.g., “Research Agent working…”, “Math Agent calculating…”, “Finalizing answer…”). Frontend dummy banao HTML+JS se.
  3. 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

Additional Resources

Views: 460

TheEasyMaster

Author at The Easy Master.

Related posts

Leave a Reply

Your email address will not be published. Required fields are marked *