The proof-of-concept phase where you made a single LLM API call and got an answer ended in 2023. By 2026, companies moving LLMs to production are dealing with what we call "agent orchestration": multiple models, each accessing different tools, working in parallel or sequence, observable and reproducible systems. In this article, you'll see what decisions you make when building multi-agent architecture, what SDKs promise versus deliver, and what tradeoffs orchestration topologies carry.

What Agent SDKs Promise and Deliver

Frameworks like LangChain, CrewAI, Semantic Kernel, and LlamaIndex are marketed as "agent SDKs." Their common promise: give the LLM permission to use tools, establish a decision hierarchy, manage chains. In practice, do these tools suffice?

The first problem: abstraction overhead. High-level libraries like LangChain simplify tool binding but complicate debugging. In production, when a tool call fails, parsing traces to determine whether LangChain's internal state or the API response triggered the error becomes tedious. If you have native tool support like Anthropic's Computer Use API, using the SDK directly typically provides cleaner visibility.

The second problem: versioning. Agent SDKs iterate quickly, breaking changes appear frequently. For example, LangChain's 0.1 → 0.2 transition deprecated certain chain structures. Rather than waiting for patches while keeping a pinned version in production, writing tool use logic yourself is sometimes more maintainable. Especially if your orchestration layer has custom business logic, you won't be constrained by the SDK's opinionated structure.

The third benefit: built-in observability. Add-ons like LangSmith or LlamaIndex's eval suite visualize call chains. This is critical for production debugging — which agent called which tool, where did latency spike, which prompt consumed which tokens. If you've written your own orchestration, you'll implement this telemetry yourself. SDKs save time here but carry lock-in risk.

Tool Use: Beyond Function Calling

Tool use is when an LLM generates structured output to make requests to external APIs. OpenAI function calling, Anthropic tool use, Google function calling — all implement the same principle with different schema formats. The interesting part is when tools depend on each other.

Simple example: an email campaign automation agent. First tool: list_segments (fetches segment list from CRM). Second tool: get_segment_stats (returns metrics for a segment). Third tool: create_campaign (creates a campaign object). You must run these three tools sequentially because each one's output becomes the next's input.

Complex example: a data analysis agent. You can run query_bigquery, fetch_gsc_data, fetch_ga4_events tools in parallel because they're independent. Parallel execution reduces production latency but the orchestrator must manage concurrency limits and rate limits. Anthropic's SDK can make parallel tool calls, but OpenAI function calling is sequential (as of Q2 2026). In that case, you write the orchestrator.

A critical tradeoff in tool use: determinism vs. flexibility. If you tell the LLM "pick one of these three tools," it might choose differently each run. If you hard-code the tool sequence, you lose flexibility but gain reproducibility. In production, you typically use hybrid: hard-code the critical path, let the LLM handle optional decisions.

Tool Call Chain Example

# Serial tool chain (each step provides input to the next)
def orchestrate_campaign(prompt: str, client: AnthropicClient):
    # 1. List segments
    segments = client.tool_use("list_segments", {})
    
    # 2. Get stats for each segment (parallel batch)
    stats_calls = [
        client.tool_use("get_segment_stats", {"segment_id": s})
        for s in segments["ids"]
    ]
    stats = asyncio.gather(*stats_calls)
    
    # 3. Create campaign for highest engagement segment
    best_segment = max(stats, key=lambda x: x["engagement"])
    campaign = client.tool_use("create_campaign", {
        "segment_id": best_segment["id"],
        "message": prompt
    })
    return campaign

In this example, the structure is list_segmentsget_segment_stats (parallel) → create_campaign (serial). The LLM only enters at final message generation — a semi-autonomous architecture. The orchestrator manages tool call logic.

Parallel vs. Serial Agent Topology

Multi-agent systems have two fundamental topologies: parallel (multiple agents run simultaneously, outputs merge) and serial (each agent produces input for the next).

Parallel topology is typically used for specialization. Example: a content production pipeline. Agent A writes headlines, Agent B generates body paragraphs, Agent C optimizes SEO meta descriptions. All three take the same brief as input, outputs merge. The advantage: each agent specializes in its domain, prompts are shorter, token cost drops (context window isn't shared). The disadvantage: coordination overhead. Merge logic is your responsibility — if outputs conflict, manual reconciliation is needed.

Serial topology is used for refinement or validation. Agent A produces a draft, Agent B fact-checks, Agent C polishes tone. Each agent receives the previous one's output. The advantage: each stage improves the previous, linear reasoning is easy to debug. The disadvantage: latency — each agent must wait in sequence. Total time is N × average agent latency.

At Roibase, we use a hybrid model in marketing operations: in Generative Engine Optimization processes, parallel agents scrape citations from different search engines (ChatGPT, Perplexity, Gemini), and a serial agent chain matches these citations to brand mention patterns. The parallel part speeds up data collection, the serial part provides analysis depth.

Topology Comparison

ArchitectureLatencySpecializationDebuggingUse Case
ParallelLow (max agent time)HighMerge logic complexData collection, multi-source analysis
SerialHigh (sum of agent times)LowLinear traceRefinement, validation, multi-step reasoning
HybridMediumHighComplexProduction pipelines

Orchestration State and Reproducibility

When building a multi-agent system, the critical decision: where do you keep state? Three options exist.

Stateless orchestration: Each agent is independent, orchestrator holds intermediate outputs in memory. Advantage: easy to replay, horizontal scaling possible. Disadvantage: memory pressure — in long chains you hold GB of conversation history.

Stateful orchestration: Store intermediate state in external storage (Redis, PostgreSQL). Advantage: low memory, crash recovery possible. Disadvantage: I/O overhead, consistency guarantees required.

Hybrid (checkpointing): Persist state at certain milestones. For example, checkpoint every 5 agent calls. If it crashes, resume from the last checkpoint. Advantage: balance between performance and reliability. Disadvantage: complex implementation.

In production, a common pattern within First-Party Data & Measurement Architecture is writing orchestration state to a log stream. Every agent call becomes a structured log entry in BigQuery, event sourcing enables replay. This way you can retrospectively analyze the attribution chain — which agent output affected which downstream metric?

Eval and Observability: Orchestration Debugging

Debugging multi-agent systems is hard because failure points are many. Did Agent A pick the wrong tool, did Agent B misparsed its input, is the orchestrator's merge logic flawed? An observability stack is mandatory.

Metrics you need:

  • Agent-level latency (p50, p95, p99) — which agent is the bottleneck?
  • Tool success rate — which API call fails frequently?
  • Token usage per agent — cost attribution
  • Eval score — use LLM-as-judge to score each agent output from 0-1

For eval, we use a pattern called reference-free scoring. A "supervisor" LLM (e.g., GPT-4) evaluates each agent output with "task completion" and "hallucination" scores. These scores are stored as time-series, regressions are detected. For instance, if Agent A's hallucination score jumps from 0.1 to 0.3, you'd rollback the prompt version.

Another technique Anthropic recommends: Claude as evaluator. With its long context window, feed the entire agent chain to Claude in a single prompt and ask "are there logical errors in this chain?" This meta-evaluation is used in pre-production QA.

Orchestration Tradeoffs and Decision Matrix

When choosing multi-agent architecture, you weigh these tradeoffs:

1. Complexity vs. control: Using an SDK speeds up implementation but obscures debugging. Writing a custom orchestrator gives control but increases maintenance burden.

2. Latency vs. specialization: Parallel agents are faster but introduce coordination overhead. Serial agents reason deeper but are slower.

3. Cost vs. quality: Each agent call consumes tokens. Adding agents can improve quality but cost grows linearly. In production you must find the "minimum viable agent count."

4. Determinism vs. adaptability: Hard-coded tool sequences are reproducible but can't handle edge cases. Letting the LLM choose tools is adaptive but non-deterministic.

The decision matrix we use at Roibase:

Use CaseTopologySDKState Management
Data collectionParallelLlamaIndexStateless
Content refinementSerialCustomCheckpointing
Real-time inferenceHybridAnthropic SDKRedis cache
Batch processingParallelLangChainPostgreSQL

Moving Orchestration to Production

When moving a multi-agent system to production, pay attention to three things.

Rate limiting: Parallel agents can exceed API rate limits. Use token bucket or semaphore patterns in the orchestrator. If Anthropic API has a 50 req/min limit, throttle parallel agent count accordingly.

Fallback strategy: What happens if an agent fails? Basic retry logic is simple, but add exponential backoff plus jitter. If an agent is non-critical (e.g., optional SEO meta tag generator), use a circuit breaker and switch to fail-safe mode.

Cost monitoring: Log the token cost of each agent call. In production, track $/request per agent. If an agent creates a cost spike, optimize its prompt or disable the agent.

The power of multi-agent orchestration isn't "do more than a single LLM," it's making business processes modular, observable, and scalable. To maintain orchestration architecture in production, think about tool topology, state management, and eval pipeline together. When building these systems, Data Analysis & Insights Engineering capacity is critical — tying orchestration metrics to business metrics, measuring retroactively which agent configuration boosted which downstream KPI.