Product Management
Đăng nhập
ESC

Nhập từ khóa để tìm kiếm

↑↓ Di chuyển
Enter Mở
ESC Đóng

Bài 4 — Supervisor pattern: điều phối tập trung

Đã đọc 0/9 mục · còn khoảng 3 phút
Cách chúng tôi ghi nhận

Một mục được tính là đã đọc khi nó nằm giữa màn hình đủ lâu so với độ dài của nó (bảng và sơ đồ tính một nửa), bạn vẫn đang cuộn hoặc bấm phím, và bạn đã thấy tới cuối mục. Lướt nhanh hoặc để tab mở không được tính. Chúng tôi chỉ lưu thời gian đọc từng mục — không lưu gì khác.

Khi bạn có nhiều worker chuyên biệt, ai quyết định gọi worker nào, theo thứ tự gì, và khi nào dừng? Supervisor pattern trả lời câu hỏi đó: một agent trung tâm (supervisor / orchestrator) điều phối các worker, giống một trưởng nhóm phân việc.

Cấu trúc

            +------------------+
            |    Supervisor    |  <- giữ mục tiêu & trạng thái tổng
            +------------------+
              |     |      |
        +-----+     |      +------+
        v           v             v
   Researcher    Coder        Reviewer   <- worker chuyên biệt

Supervisor không tự làm việc chuyên môn. Nhiệm vụ của nó: đọc trạng thái hiện tại, chọn worker phù hợp cho bước tiếp theo, tổng hợp kết quả, và quyết định khi nào hoàn thành. Đây là một dạng router động: quyết định định tuyến ở mỗi bước thay vì cố định trước.

Supervisor khác gì Planner

Planner lập kế hoạch một lần rồi đưa. Supervisor quyết định lặp đi lặp lại dựa trên kết quả mới nhất — nó thích ứng. Trong thực tế bạn hay ghép cả hai: planner phác thảo, supervisor điều phối thực thi và thích ứng khi có bất ngờ.

Ví dụ cụ thể: agent sửa bug

Mục tiêu: "Sửa bug test order_total sai"

Supervisor -> gọi Researcher: "tìm hàm tính order_total"
Researcher -> trả: file billing.py dòng 42
Supervisor -> gọi Coder: "sửa làm tròn ở billing.py:42"
Coder      -> trả diff
Supervisor -> gọi Reviewer: "chạy test + review diff"
Reviewer   -> "test PASS, diff hợp lý"
Supervisor -> KẾT THÚC, trả diff cho người dùng

Supervisor không đọc code, không chạy test — nó điều phối ai làm việc đó và ghép mảnh lại.

Pseudocode

def supervisor_loop(goal, max_steps=10):
    state = {"goal": goal, "history": []}
    for _ in range(max_steps):
        decision = supervisor.decide(state)  # -> {worker, task} | {done, answer}
        if decision.get("done"):
            return decision["answer"]
        result = WORKERS[decision["worker"]].run(decision["task"])
        state["history"].append({"worker": decision["worker"], "result": result})
    return "Hết bước mà chưa xong"  # cần cơ chế thoát an toàn

Điểm chốt: supervisor xuất quyết định có cấu trúc — hoặc gọi worker nào với task gì, hoặc tuyên bố done. Ép cấu trúc này giúp vòng lặp không đi lạc.

Khung tư duy: supervisor như một máy trạng thái

Mỗi lượt supervisor nhìn state và trả về hành động tiếp theo. Hãy thiết kế state gọn gàng (mục tiêu + tóm tắt lịch sử, không phải toàn bộ transcript) và định nghĩa rõ điều kiện dừng. Nếu không có điều kiện dừng tường minh, supervisor sẽ gọi worker mãi.

Các bước xây dựng

  • Liệt kê các worker và mô tả năng lực từng cái (để supervisor biết chọn ai).
  • Thiết kế đối tượng state tối giản.
  • Viết prompt supervisor: buộc xuất {worker, task} hoặc {done, answer}.
  • Thêm max_steps và hành vi thoát an toàn khi chạm trần.
  • Log mỗi quyết định của supervisor để kiểm tra nó định tuyến hợp lý.
  • Thử ca có bất ngờ (worker trả lỗi) xem supervisor có xử lý được không.

Checklist

  • [ ] Supervisor có danh mục năng lực của từng worker.
  • [ ] State gọn, không nhồi transcript thô.
  • [ ] Có điều kiện dừng tường minh + trần số bước.
  • [ ] Quyết định của supervisor có cấu trúc, kiểm được.

Sai lầm thường gặp

  • Supervisor tự làm việc chuyên môn. Nó bắt đầu tự viết code thay vì gọi Coder — mất lợi ích cô lập, phình ngữ cảnh.
  • Không có mô tả năng lực worker. Supervisor đoán mò, gọi nhầm worker.
  • State phình to. Nhồi cả lịch sử vào mỗi lượt khiến chi phí và độ trễ leo thang.
  • Thiếu điều kiện dừng. Vòng lặp chạy tới khi hết max_steps mỗi lần, lãng phí.
Bài 5 ta xây dựng thực tế một hệ hierarchical (supervisor lồng nhau) cho tác vụ lớn hơn.

Học xong bài này rồi? Tạo tài khoản miễn phí để lưu lại — lần sau vào là biết ngay đang dở ở đâu, và học hết khóa thì có chứng chỉ. Lưu tiến độ của tôi