Files
spring-ai-examples/aggentic-patterns/orchestrator-workers-workflow/README.md

3.3 KiB

Orchestrator-Workers Workflow Pattern

This project demonstrates the Orchestrator-Workers workflow pattern for building effective LLM-based systems, as described in Anthropic's research on building effective agents.

Orchestration Workflow

Overview

The Orchestrator-Workers pattern is a flexible approach for handling complex tasks that require dynamic task decomposition and specialized processing. It consists of three main components:

  • Orchestrator: A central LLM that analyzes tasks and determines required subtasks
  • Workers: Specialized LLMs that execute specific subtasks
  • Synthesizer: Component that combines worker outputs into a final result

How It Works

  1. The orchestrator receives a task and analyzes it to determine necessary subtasks
  2. Each subtask is delegated to worker LLMs that specialize in specific types of processing
  3. The synthesizer combines the workers' outputs into a cohesive final result
graph LR
    In[Input] --> O[Orchestrator]
    O --> W1[Worker 1]
    O --> W2[Worker 2]
    O --> W3[Worker 3]
    W1 --> S[Synthesizer]
    W2 --> S
    W3 --> S
    S --> Out[Output]

When to Use

This pattern is particularly effective for:

  • Complex tasks where subtasks can't be predicted upfront
  • Tasks requiring different approaches or perspectives
  • Situations needing adaptive problem-solving
  • Tasks benefiting from specialized processing

Implementation

The implementation uses Spring AI's ChatClient for LLM interactions and consists of:

public class OrchestratorWorkersWorkflow {
    public WorkerResponse process(String taskDescription) {
        // 1. Orchestrator analyzes task and determines subtasks
        OrchestratorResponse orchestratorResponse = // ...

        // 2. Workers process subtasks in parallel
        List<String> workerResponses = // ...

        // 3. Results are combined into final response
        return new WorkerResponse(/*...*/);
    }
}

Usage Example

ChatClient chatClient = // ... initialize chat client
OrchestratorWorkersWorkflow workflow = new OrchestratorWorkersWorkflow(chatClient);

// Process a task
WorkerResponse response = workflow.process(
    "Generate both technical and user-friendly documentation for a REST API endpoint"
);

// Access results
System.out.println("Analysis: " + response.analysis());
System.out.println("Worker Outputs: " + response.workerResponses());

Customization

The workflow can be customized through:

  1. Custom Prompts: Provide specialized prompts for orchestrator and workers
workflow = new OrchestratorWorkersWorkflow(
    chatClient,
    customOrchestratorPrompt,
    customWorkerPrompt
);
  1. Default Templates: Modify the default prompts for common use cases
    • DEFAULT_ORCHESTRATOR_PROMPT: Template for task analysis
    • DEFAULT_WORKER_PROMPT: Template for worker processing

Dependencies

  • Spring AI
  • Spring Boot
  • Java 17 or later

References