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
statetối giản. - Viết prompt supervisor: buộc xuất
{worker, task}hoặc{done, answer}. - Thêm
max_stepsvà 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_stepsmỗi lần, lãng phí.