0Pricing
AI Engineering Academy · Lektion

Das Orchestrator-Subagent-Muster

Implementieren Sie das Orchestrator-Subagent-Muster: Ein Planungs-Agent zerlegt Aufgaben in Teilaufgaben, delegiert sie an spezialisierte Agents und führt deren Ergebnisse zu einer finalen Ausgabe zusammen.

Das Orchestrator-Subagent-Muster ist eine kostenlose AI Engineering Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des AI Engineering Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der AI Engineering Academy-Kurs umfasst insgesamt 4 Lektionen.

Teile dieser Lektion wurden noch nicht übersetzt und werden auf Englisch angezeigt.

The Orchestrator-Subagent Mental Model

The orchestrator-subagent pattern is the most widely used multi-agent architecture. An orchestrator agent receives a high-level goal, decomposes it into subtasks, delegates each subtask to a specialized subagent, collects the results, and synthesizes a final output. Think of the orchestrator as a project manager and the subagents as domain experts on the team.

Responsibilities of the Orchestrator

The orchestrator has three core responsibilities: decomposition (breaking the goal into concrete, actionable subtasks), delegation (assigning each subtask to the right specialist), and synthesis (combining the subagent outputs into a coherent result). The orchestrator itself does minimal domain-specific work — its value is in coordination.

from openai import OpenAI

client = OpenAI()

def orchestrator(goal: str) -> dict:
    # Step 1: Decompose
    plan = client.chat.completions.create(
        model='gpt-4o',
        messages=[
            {'role': 'system', 'content': 'You are a task planner. Decompose the goal into subtasks. Return JSON with keys: researcher_task, writer_task, coder_task.'},
            {'role': 'user', 'content': goal}
        ],
        response_format={'type': 'json_object'}
    )
    return plan.choices[0].message.content

Designing Specialized Subagents

Each subagent is optimized for a single responsibility. Specialization means: a focused system prompt that defines the role, a small set of tools (3-5) that are relevant only to that role, and a context window that only contains information needed for that subtask. Focused agents make better decisions and are easier to evaluate and debug.

def create_researcher_agent():
    return {
        'model': 'gpt-4o',
        'system': '''You are a research specialist. Your only job is to find accurate,
            cited information. Return structured findings with sources.
            Do NOT write prose or code - only research findings.''',
        'tools': ['search_web', 'fetch_url', 'query_arxiv'],  # 3 tools only
        'max_iterations': 10
    }

def create_writer_agent():
    return {
        'model': 'gpt-4o',
        'system': '''You are a technical writer. Transform research findings into clear,
            engaging prose. You receive structured data and return polished text.''',
        'tools': ['format_markdown', 'check_readability'],  # 2 tools only
        'max_iterations': 5
    }

The Delegation Protocol

For delegation to work, the orchestrator must pass well-formed task packets to each subagent. A task packet includes: the specific goal for this subagent, the relevant context it needs (not the full conversation history), the expected output format, and any constraints. Poorly formed task packets are the most common source of orchestrator-subagent failures.

from dataclasses import dataclass
from typing import Optional

@dataclass
class TaskPacket:
    task_id: str
    assignee: str          # which subagent receives this
    goal: str              # specific, actionable goal
    context: str           # only relevant background
    output_format: str     # JSON schema or description
    constraints: list[str] # e.g. ['max 500 words', 'cite sources']
    deadline_steps: int    # max iterations allowed

def delegate(packet: TaskPacket, subagent_fn) -> str:
    prompt = f'Goal: {packet.goal}\nContext: {packet.context}\nOutput format: {packet.output_format}\nConstraints: {packet.constraints}'
    return subagent_fn(prompt)

Collecting and Synthesizing Results

Once subagents complete their work, the orchestrator must synthesize the results. This is not just concatenation. The orchestrator must resolve conflicts between subagent outputs, fill gaps, maintain a consistent voice or format, and produce a final result that is coherent as a whole. The synthesis step is where the orchestrator's reasoning power is most needed.

def synthesize_results(research: str, draft: str, code: str, goal: str) -> str:
    synthesis_prompt = f'''You are given outputs from three specialist agents.
    Your job is to synthesize them into one coherent final answer for this goal: {goal}

    RESEARCH FINDINGS:
    {research}

    WRITTEN DRAFT:
    {draft}

    CODE EXAMPLES:
    {code}

    Resolve any conflicts, fill gaps, and produce a unified final response.
    '''
    response = client.chat.completions.create(
        model='gpt-4o',
        messages=[{'role': 'user', 'content': synthesis_prompt}]
    )
    return response.choices[0].message.content

Sequential vs Parallel Delegation

Orchestrators can delegate tasks sequentially (one subagent's output feeds the next) or in parallel (multiple subagents work simultaneously). Sequential delegation is simpler and works when later steps depend on earlier results. Parallel delegation is faster when subtasks are independent and can run concurrently, often reducing wall-clock time by 3-5x.

import asyncio

# Sequential: writer needs research first
async def sequential_pipeline(goal):
    research = await researcher_agent(goal)
    draft = await writer_agent(research)  # depends on research
    return draft

# Parallel: all three tasks are independent
async def parallel_pipeline(topics):
    tasks = [
        researcher_agent(topics[0]),
        researcher_agent(topics[1]),
        researcher_agent(topics[2])
    ]
    results = await asyncio.gather(*tasks)  # runs simultaneously
    return orchestrator_synthesize(results)

Handling Subagent Failures

Subagents will occasionally fail — they may return malformed output, exceed their iteration limit, or encounter an error. The orchestrator must handle these failures gracefully. Common strategies include: retry with a clarified task packet, fallback to a simpler approach, skip the failed subtask and note it in the final output, or escalate to human review.

def delegate_with_retry(packet: TaskPacket, subagent_fn, max_retries=2):
    for attempt in range(max_retries + 1):
        try:
            result = subagent_fn(packet)
            validate_output(result, packet.output_format)
            return result
        except ValidationError as e:
            if attempt < max_retries:
                # Clarify the task for retry
                packet.goal += f'\n\nPrevious attempt failed: {str(e)}. Please fix.'
                print(f'Retry {attempt + 1} for task {packet.task_id}')
            else:
                return {'error': str(e), 'task_id': packet.task_id, 'status': 'failed'}

Prompting the Orchestrator Well

The orchestrator's system prompt is critical to the quality of the whole pipeline. It should clearly define: what subagents are available and what each specializes in, how to format task packets, when to run subtasks in parallel vs. sequentially, how to handle incomplete or conflicting results, and what constitutes a successful final output.

ORCHESTRATOR_SYSTEM_PROMPT = '''
You coordinate a team of specialist agents to complete complex tasks.

Available agents:
- researcher: Finds and cites factual information. Input: question string. Output: JSON with findings and sources.
- writer: Writes polished prose from structured data. Input: JSON findings. Output: markdown text.
- coder: Writes Python code. Input: natural language spec. Output: Python code string.

Workflow:
1. Analyze the goal and decide which agents are needed.
2. Identify dependencies: can any tasks run in parallel?
3. Delegate tasks with clear, specific goals.
4. Validate each result before proceeding.
5. Synthesize all results into a unified final answer.
'''

Context Isolation Is a Feature

One major advantage of the orchestrator-subagent pattern is context isolation. Each subagent sees only the information relevant to its subtask, not the full history of the entire project. This keeps each subagent's context window small, preventing the context exhaustion that plagues single agents. The orchestrator maintains the global view while subagents maintain focused local views.

Tracing and Observability

Multi-agent systems are harder to debug than single agents because failures can occur at any delegation step. Always add structured logging to track: which tasks were delegated, to which subagent, what the input and output were, how long each took, and whether retries were needed. Tools like LangSmith and Langfuse support multi-agent trace visualization.

import time

def logged_delegate(packet: TaskPacket, subagent_fn):
    start = time.time()
    print(f'[DELEGATE] task_id={packet.task_id} assignee={packet.assignee}')
    print(f'[INPUT] {packet.goal[:100]}...')
    
    result = subagent_fn(packet)
    elapsed = time.time() - start
    
    print(f'[RESULT] task_id={packet.task_id} elapsed={elapsed:.2f}s')
    print(f'[OUTPUT] {str(result)[:100]}...')
    return result

Real-World Pattern: Report Generator

A concrete example of the orchestrator-subagent pattern is a competitive analysis report generator. The orchestrator receives 'Write a competitor analysis for Company X'. It delegates: research subtask to a researcher agent (finds pricing, features, reviews), analysis subtask to an analyst agent (identifies strengths/weaknesses), and formatting subtask to a writer agent (produces the final report). Each specialist does what it does best.

Quick Check

Test your understanding of the orchestrator-subagent pattern from this lesson.

Lesson Recap

In this lesson you learned: the orchestrator-subagent pattern uses a coordinator agent to decompose and delegate work to specialists, task packets must clearly define goal, context, and expected output format for delegation to work, and context isolation keeps each subagent's window small while the orchestrator maintains the global view. Next up we build multi-agent pipelines with LangGraph.

Häufig gestellte Fragen

Ist die Lektion „Das Orchestrator-Subagent-Muster“ kostenlos?

Ja — der vollständige Text von „Das Orchestrator-Subagent-Muster“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des AI Engineering Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der AI Engineering Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Das Orchestrator-Subagent-Muster“?

Implementieren Sie das Orchestrator-Subagent-Muster: Ein Planungs-Agent zerlegt Aufgaben in Teilaufgaben, delegiert sie an spezialisierte Agents und führt deren Ergebnisse zu einer finalen Ausgabe zu… Du übst AI Engineering Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um AI Engineering Academy zu starten?

Keine Vorkenntnisse erforderlich. AI Engineering Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Das Orchestrator-Subagent-Muster“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser AI Engineering Academy-Lektion Code schreiben und ausführen?

Ja. Jede AI Engineering Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Warum einzelne Agents an ihre Grenzen stoßen
  2. Das Orchestrator-Subagent-Muster
  3. Multi-Agent-Pipelines mit LangGraph entwickeln
  4. Gemeinsamer Speicher und Kommunikation zwischen Agents
← Zurück zu AI Engineering Academy