Series 4 - Bài 2: Orchestrator Pattern

Orchestrator Pattern là nnền tảng của multi-agent system. Orchestrator không làm việc — nó plan, delegate, monitor và synthesize. Bài này phân tích ranh giới và communication protocol.

Nghe bài viết này dưới dạng podcast

Orchestrator Pattern là pattern phổ biến nhất trong multi-agent system — và cũng là pattern dễ implement sai nhất.

Sai lầm phổ biến nhất: để orchestrator làm cả orchestration lẫn execution. Một orchestrator tốt không làm gì ngoài plan và coordinate.

Pattern overview

         User
          │
          ▼
 ┌───────────────────┐
 │   ORCHESTRATOR   │
 │                  │
 │  Nhận task       │
 │  Tạo plan        │
 │  Delegate tasks  │
 │  Monitor results │
 │  Aggregate và    │
 │  synthesize      │
 └─────┬─────┬─────┘
        │         │
  delegate    delegate
        │         │
        ▼         ▼
 ┌──────────┐ ┌──────────┐
 │  WORKER A │ │  WORKER B │
 │           │ │           │
 │  Executes │ │  Executes │
 │  specific │ │  specific │
 │  subtask  │ │  subtask  │
 └──────────┘ └──────────┘

Orchestrator: Vai trò và giới hạn

Orchestrator làm chỉ những việc này:

1. Task Analysis:
   Nhận user request
   Understand độ phức tạp và scope
   Quyết định có cần phân tận không

2. Planning:
   Break task thành subtasks
   Xác định dependencies giữa subtasks
   Quyết định order và parallelism

3. Delegation:
   Chọn worker đúng cho từng subtask
   Format task description rõ ràng
   Set expectations và output format

4. Monitoring:
   Track progress của từng worker
   Phát hiện khi worker stuck hoặc fail
   Quyết định retry hay escalate

5. Synthesis:
   Tổng hợp kết quả từ nhiều workers
   Resolve conflicts giữa outputs
   Generate final response cho user

Orchestrator không làm:

  • Thực thi bất kỳ task cụ thể nào
  • Đọc files, chạy commands
  • Làm domain work

Worker Agents: Specialized execution

Worker Design:

  Mỗi worker có:
  • Specialized system prompt (domain expert)
  • Specific tool set (chỉ có tools cần cho domain)
  • Clear input format (từ orchestrator)
  • Clear output format (trả về orchestrator)

Ví dụ:

  Backend Worker:
    Tools: read_file, write_file, run_command, search_files
    System: "Expert NestJS engineer. Focus on correctness."
    Input: { task, files_to_modify, constraints }
    Output: { files_changed, summary, tests_passed }

  Security Worker:
    Tools: read_file, search_files, grep_content
    System: "Security auditor. Focus on vulnerabilities."
    Input: { files_to_audit, risk_areas }
    Output: { issues, severity, recommendations }

Orchestrator System Prompt: Khác với worker

Orchestrator system prompt tập trung vào:

  Role:
  "You are a technical project manager for code tasks.
   You do NOT write code or modify files directly.
   Your job: analyze, plan, delegate, synthesize."

  Planning guidance:
  "Break tasks into independent subtasks when possible.
   Identify dependencies — what must complete before what.
   Choose the right specialist for each subtask."

  Delegation format:
  "When delegating, always specify:
   - Clear task description
   - Files relevant to the subtask
   - Expected output format
   - Constraints from user"

  Synthesis guidance:
  "When aggregating results:
   - Verify consistency between worker outputs
   - Highlight conflicts for user attention
   - Summarize what was done and what wasn't"

Communication Protocol: Format hóa handoff

Việc orchestrator-worker communicate phải có format rõ ràng:

Orchestrator → Worker (Task Assignment):
{
  task_id: "task_001",
  type: "code_refactor",
  description: "Refactor processLoan() in loan.service.ts
                to handle edge case when amount = 0.",
  relevant_files: ["src/loan/loan.service.ts",
                   "src/loan/loan.service.spec.ts"],
  constraints: [
    "Do not add new dependencies",
    "Run tests after changes",
    "Keep function signature unchanged"
  ],
  expected_output_format: {
    files_modified: ["list of files"],
    summary: "what was done",
    tests_result: "pass/fail with details",
    issues_found: ["anything unexpected"]
  }
}

Worker → Orchestrator (Task Result):
{
  task_id: "task_001",
  status: "success",
  files_modified: ["src/loan/loan.service.ts",
                   "src/loan/loan.service.spec.ts"],
  summary: "Added guard clause for amount <= 0.
            Returns InvalidAmountError.",
  tests_result: "pass: 52/52 tests",
  issues_found: ["Found unrelated TODO comment
                  at line 89, left as-is"]
}

Format hóa handoff giảm ambiguity và giúp orchestrator synthesize chính xác hơn.

Orchestrator Tools

Orchestrator có tool set khác worker:

Orchestrator tools:

  delegate_task(worker_type, task_spec) → task_id
    Gửi task cho một worker loại cụ thể

  get_task_status(task_id) → status | result
    Check task đã xong chưa

  list_available_workers() → worker types
    Biết được specializations có sẵn

  request_clarification(question) → user answer
    Hỏi user khi task ambiguous

  report_progress(summary) → void
    Update user về tiến độ

Không có read_file, write_file trong orchestrator. Nếu orchestrator có các tools này, nó sẽ bị tempted để làm execution work — phá vỡ separation.

Trade-off: Centralized Orchestrator vs Decentralized

Centralized Orchestrator (một orchestrator, nhiều workers):
  + Clear authority
  + Dễ debug (một điểm quyết định)
  + Consistent planning
  - Single point of failure
  - Orchestrator có thể trở thành bottleneck
  - Khó scale khi nhiều tasks concurrent

Decentralized (workers tự coordinate):
  + Không có central bottleneck
  + Scale tốt hơn
  - Khó debug (không có single execution path)
  - Conflict resolution phức tạp
  - Nhất quán khó đảm bảo

Với một số lượng workers nhỏ (≤8), centralized orchestrator là đơn giản hơn và reliable hơn. Chỉ cân nhắc decentralized khi scale thực sự đòi hỏi.

Kết luận

  • Orchestrator chỉ làm: plan, delegate, monitor, synthesize. Không làm execution.
  • Workers chuyên biệt: system prompt, tools, input/output format rõ ràng.
  • Format hóa handoff (task assignment và result) giảm ambiguity và tăng orchestration quality.
  • Orchestrator tools khác worker tools — không có execution tools trong orchestrator.
  • Centralized orchestrator đơn giản hơn cho small systems — decentralized chỉ khi có real scale need.

Chưa có bình luận

Để lại bình luận

Bình luận sẽ được phê duyệt trước khi hiển thị.

Nhận bài viết mới

Mình sẽ gửi email khi có bài mới. Không spam.