Khi cần hơn hai agent: GroupChat
Một cặp assistant–proxy giải được nhiều việc, nhưng khi bài toán cần nhiều chuyên gia (lập kế hoạch, viết code, kiểm thử, phê duyệt), bạn cần GroupChat — nơi nhiều agent cùng tham gia một hội thoại và một GroupChatManager quyết định ai nói tiếp.
Kiến trúc
- Nhiều
AssistantAgentvới vai trò khác nhau. - Một
UserProxyAgent(chạy code / đại diện người dùng). - Một
GroupChatgom tất cả, cộng mộtGroupChatManagerđiều phối lượt nói.
from autogen import AssistantAgent, UserProxyAgent, GroupChat, GroupChatManager
planner = AssistantAgent("planner", llm_config=cfg,
system_message="Bạn chia bài toán thành các bước rõ ràng.")
coder = AssistantAgent("coder", llm_config=cfg,
system_message="Bạn viết Python theo kế hoạch của planner.")
tester = AssistantAgent("tester", llm_config=cfg,
system_message="Bạn viết test và chỉ ra lỗi. Khi mọi test đạt, nói APPROVED.")
user_proxy = UserProxyAgent("runner", human_input_mode="NEVER",
code_execution_config={"work_dir": "grp", "use_docker": False},
is_termination_msg=lambda m: "APPROVED" in (m.get("content") or ""))
groupchat = GroupChat(
agents=[user_proxy, planner, coder, tester],
messages=[],
max_round=15,
)
manager = GroupChatManager(groupchat=groupchat, llm_config=cfg)
user_proxy.initiate_chat(manager, message="Xây hàm kiểm tra số Fibonacci, có test.")
Cách manager chọn người nói
GroupChatManager mặc định dùng LLM để chọn agent phù hợp nói tiếp dựa trên nội dung hội thoại. Bạn có thể can thiệp bằng speaker_selection_method:
"auto"(mặc định): LLM tự chọn — linh hoạt nhưng đôi khi chọn nhầm."round_robin": lần lượt theo vòng — dễ đoán, tốt cho quy trình cố định."manual": người duyệt chọn.- Hàm tùy chỉnh: bạn tự viết logic chọn.
groupchat = GroupChat(
agents=[user_proxy, planner, coder, tester],
messages=[],
max_round=15,
speaker_selection_method="round_robin", # planner→coder→tester→...
)
Các bước dựng một GroupChat hiệu quả
- Liệt kê vai trò tối thiểu — đừng thêm agent nếu chưa cần.
- Viết
system_messagecho mỗi agent, nêu rõ khi nào agent đó nên phát biểu. - Chỉ định một agent duy nhất phát tín hiệu kết thúc (ví dụ tester nói "APPROVED").
- Đặt
max_roundhợp lý (10–20) để chặn vòng lặp. - Chọn
speaker_selection_method: quy trình cố định → round_robin; động → auto. - Chạy, đọc transcript, tinh chỉnh system_message cho agent hay lạc đề.
Khung tư duy: bao nhiêu agent là đủ?
Mỗi agent phải trả lời được: "Tôi thêm KỸ NĂNG gì mà agent khác không có?"
- Không trả lời được → GỘP hoặc BỎ agent đó.
- Trả lời được → GIỮ, và ghi rõ trong system_message khi nào phát biểu.
Quy tắc: bắt đầu 3 agent, chỉ thêm khi thấy KHOẢNG TRỐNG kỹ năng thật.
Viết system_message để agent biết KHI NÀO im lặng
Một lỗi tinh vi trong GroupChat: mọi agent đều muốn chen vào mọi lượt, khiến hội thoại nhiễu và tốn token. Cách chữa là viết system_message không chỉ nói agent làm gì mà cả khi nào nên phát biểu và khi nào nên im. Ví dụ tester nên ghi rõ: "Chỉ phát biểu khi đã có code để kiểm thử; nếu chưa có code, hãy im lặng chờ coder." Sự kỷ luật này giúp manager điều phối mượt và giảm số vòng lãng phí.
tester = AssistantAgent("tester", llm_config=cfg,
system_message=(
"Bạn viết test và chỉ ra lỗi. "
"CHỈ phát biểu khi đã có code từ coder để kiểm thử. "
"Khi mọi test đạt, nói APPROVED."))
Kiểm soát chi phí và độ ồn
GroupChat càng nhiều agent, mỗi vòng càng tốn token (manager phải đọc toàn bộ lịch sử để chọn người nói, và lịch sử ngày càng dài). Chiến lược:
- Giữ số agent nhỏ (3–4).
- Đặt
max_roundchặt (10–20). - Dùng model rẻ cho agent phụ, model mạnh cho manager và agent chủ chốt.
- Theo dõi số vòng thực tế mỗi lần chạy; nếu thường xuyên chạm trần
max_roundmà chưa đạt kết quả, đó là dấu hiệu điều kiện kết thúc hoặc phân vai chưa ổn.
So sánh nhanh với CrewAI hierarchical
GroupChat của AutoGen và process hierarchical của CrewAI cùng có ý tưởng "một điều phối viên". Khác biệt: hierarchical của CrewAI vẫn xoay quanh các task có expected_output rõ ràng — kiểm soát và định dạng chắc hơn. GroupChat của AutoGen thiên về hội thoại tự do — linh hoạt hơn cho các bài toán cần tranh luận, phản biện, hay thử–sai. Chọn theo bản chất bài toán, không theo thói quen.
Checklist GroupChat
- [ ] Mỗi agent có kỹ năng riêng, không trùng lặp.
- [ ] Chỉ MỘT nguồn phát tín hiệu kết thúc, khớp
is_termination_msg. - [ ]
max_roundđã đặt (không để vô hạn). - [ ]
speaker_selection_methodphù hợp loại quy trình. - [ ] Model mạnh cho manager; model rẻ cho agent phụ.
Sai lầm thường gặp
- Nhồi 6–7 agent khi 3 agent là đủ → hội thoại lan man, đắt, khó theo dõi.
- Nhiều agent cùng phát tín hiệu kết thúc hoặc không ai phát → dừng sai lúc hoặc không dừng.
- Để
speaker_selection_method="auto"cho quy trình vốn cố định → manager chọn nhầm người, lãng phí vòng. - Không đặt
max_round→ nếu điều kiện kết thúc không đạt, chạy tới kiệt quota. - System_message không nói khi nào agent nên im lặng → mọi agent chen ngang mọi lượt.