Zenaique

Pick one of AutoGen, CrewAI, a LangGraph supervisor graph, and the OpenAI Agents SDK for a deep research multi-agent product and defend the choice.

Short answer·Hard·4.0 · 0·~3 min·Asked atArize AiGnaniLambda Labs
Attempt it

You are building a deep research multi-agent product where a planner agent decomposes a query, several worker agents fan out to retrieve and analyse, and a synthesizer composes the final report. Pick one of an AutoGen group chat team, CrewAI, a LangGraph supervisor graph, or the OpenAI Agents SDK as the orchestration layer, and defend the choice against the other three.

Free · 2 AI evals / day
TL;DR

LangGraph supervisor. The deep-research shape is a supervisor with conditional routing graph, and among the four only LangGraph offers explicit routing, durable state via the checkpointer, and inspectability together.

Memory aid
Sign in to see the mnemonic that makes this stick.
Easy to grasp

Picture coordinating a small research team. AutoGen is a free-form brainstorm in a chat room. Anyone can speak. CrewAI is a relay race where each runner hands the baton to the next in order. The OpenAI Agents SDK is two friends passing a question back and forth via short notes. LangGraph is a project manager with a wall-sized chart, a planner that saves after every step, and an interruptible workflow. For a planner, workers and synthesizer product where you need to know who is running, save partial progress, and let a human approve the next step, the project manager wins. The other three are good at different shapes.

Concept explanation~2 min read

Everything you need to truly understand this topic: intuition, mechanics, step by step explanation, code, formulas, and worked example. Click to expand.

Multi-agent orchestration choice is one of the few framework decisions where the workload shape narrows the field. A deep-research product (planner decomposes, workers fan out and analyse, synthesizer composes) has three structural requirements that select one framework family over the others.

'Depends on your team' skips the analysis. Mapping the shape to the requirements shows which framework satisfies them. The four candidates (AutoGen, CrewAI, LangGraph supervisor and the OpenAI Agents SDK) each fit a typical shape, and only one of those shapes matches this product.

The shape and its requirements

The planner, fan-out, synthesizer shape is the textbook supervisor pattern. The supervisor dispatches one of several workers. Workers operate in parallel and report back. The supervisor decides whether to dispatch more workers or hand off to the synthesizer. The synthesizer composes the final report.

This shape has three structural requirements.

  • Explicit routing. The supervisor must pick the next worker (or fan out to many) based on the planner's decomposition. The routing must be inspectable, deterministic, and replay-safe.
  • Durable state. Research runs are long. Partial worker outputs must survive a crash, and a human must be able to inspect a run mid-flow without aborting it.
  • Inspectability and human gates. Research products benefit from approving the plan before workers execute, and from time-travel debugging when a synthesized answer is wrong.

Each requirement maps to a framework primitive. Frameworks that lack the primitive force you to build it yourself. That build cost is what selects the right framework.

Why LangGraph supervisor satisfies all three
Why AutoGen loses for this workload
Why CrewAI and the Agents SDK lose for this workload
Production posture
Sign in to unlock the full deep dive.

Situations where this technique stops working.

Sign in to see when this approach fails.

2–4 min · Everything important, quickly.

Sign in to see the quick scan of the deep dive.
python
import operator
from typing import Annotated, TypedDict

from langgraph.graph import StateGraph, END
from langgraph.types import Send
from langgraph.checkpoint.postgres import PostgresSaver

class State(TypedDict, total=False):
    query: str
    subqueries: list[str]
    subquery: str
    findings: Annotated[list, operator.add]  # reducer merges parallel worker writes
    report: str

def plan(state):
    return {"subqueries": planner_llm(state["query"])}

def dispatch(state):
    # Parallel fan-out: one Send per subquery, each runs the worker node
    return [Send("worker", {"subquery": sq}) for sq in state["subqueries"]]

def worker(state):
    return {"findings": [analyse(retrieve(state["subquery"]))]}

def synthesise(state):
    return {"report": synth_llm(state["findings"])}

g = StateGraph(State)
g.add_node("plan", plan)
g.add_node("worker", worker)
g.add_node("synth", synthesise)
g.set_entry_point("plan")
g.add_conditional_edges("plan", dispatch, ["worker"])
g.add_edge("worker", "synth")
g.add_edge("synth", END)

with PostgresSaver.from_conn_string(POSTGRES_URL) as checkpointer:
    checkpointer.setup()  # create checkpoint tables once
    app = g.compile(checkpointer=checkpointer)
FrameworkRouting shapePersistenceBest fit
LangGraph supervisorConditional edges + SendPostgres checkpointer, time-travelPlanner, fan-out, synthesizer
AutoGen group chat teamSpeaker selection (chat-shaped)Team save_state / load_state; repo archivedFree-form analyst chat
CrewAIRole/goal text, Hierarchical ProcessTask-level checkpointing (checkpoint=)Sequential or hierarchical role pipelines
OpenAI Agents SDKHandoff via tool call; agents as toolsSessions for conversation memory; no graph checkpointerTwo-agent triage and handoff

Real products, models, and research that use this idea.

  • Anthropic's multi-agent research system (June 2025) uses a lead agent that plans, spawns parallel subagents, and compiles their findings: the planner, workers and synthesizer shape
  • LangChain's open_deep_research project builds a supervisor that delegates to parallel researcher subgraphs on LangGraph, then writes a final report
Sign in to see more production examples.

What an interviewer would ask next. Try answering before peeking at the approach.

QHow does LangGraph's Send primitive interact with the checkpointer for parallel fan-out?
A

Walk through how Send dispatches parallel node invocations with their own input state, how the super-step checkpoint keeps pending writes from finished branches so they are not re-run on resume, and how a reducer joins their results back into the parent state.

2 more follow-ups an interviewer would ask next. Sign in to reveal them.

Red flags & common mistakes

The phrases that signal junior thinking. Click to expand.

Most common mistake

Defaulting to the 'depends on your team' non-answer. The deep-research shape has structural requirements (routing, persistence, inspectability) that select for LangGraph regardless of team taste.

Sign in to see all red flags and common mistakes.

60 second bullets to scan on the way to the call.

  • Why the planner, fan-out, synthesizer shape maps to supervisor with conditional routing

  • Three structural requirements: routing, durability, inspectability

Sign in to unlock the revision sheet.

Primary sources. Browse if you want the original framing.

Similar questions

Same topic, related formats. Practice these next.

4 curated
Next question
Identify the concrete lock in costs a framework imposes on a production codebase (select all that apply)
Multi-select·Medium