Tư duy khác của AutoGen: hội thoại
Nếu CrewAI nghĩ theo "pipeline có task", thì AutoGen (Microsoft) nghĩ theo cuộc hội thoại giữa các agent. Các agent gửi tin nhắn cho nhau, phản hồi qua lại nhiều vòng cho tới khi đạt điều kiện dừng. Điều này cực mạnh cho các bài toán cần thử–sai lặp lại, đặc biệt là viết và chạy code.
Hai loại agent cốt lõi trong AutoGen:
- AssistantAgent: một LLM đóng vai chuyên gia (viết code, phân tích...).
- UserProxyAgent: đại diện cho "người dùng/hệ thống", có thể tự động chạy code mà assistant sinh ra và gửi kết quả (kể cả lỗi) trở lại.
Ví dụ: cặp agent giải bài toán bằng code
from autogen import AssistantAgent, UserProxyAgent
llm_config = {"model": "gpt-4o-mini", "api_key": "..."}
assistant = AssistantAgent(
name="coder",
llm_config=llm_config,
system_message="Bạn viết Python để giải bài toán. "
"Khi xong hãy trả lời TERMINATE.",
)
user_proxy = UserProxyAgent(
name="runner",
human_input_mode="NEVER", # không hỏi người, chạy tự động
code_execution_config={"work_dir": "coding", "use_docker": False},
is_termination_msg=lambda m: "TERMINATE" in (m.get("content") or ""),
)
user_proxy.initiate_chat(
assistant,
message="Tính 100 số nguyên tố đầu tiên và lưu ra primes.txt.",
)
Luồng: proxy gửi yêu cầu → coder viết code → proxy chạy → nếu lỗi, gửi traceback lại → coder sửa → lặp tới khi coder nói TERMINATE.
Điều kiện dừng — cực kỳ quan trọng
Hội thoại tự động có thể chạy vô tận nếu không có điều kiện dừng. Ba cơ chế thường dùng:
- Từ khóa kết thúc (
is_termination_msgkiểm tra "TERMINATE"). max_consecutive_auto_reply: giới hạn số vòng tự phản hồi.max_turnskhi khởi tạo chat.
user_proxy = UserProxyAgent(
name="runner",
human_input_mode="NEVER",
max_consecutive_auto_reply=8, # chặn vòng lặp vô tận
is_termination_msg=lambda m: "TERMINATE" in (m.get("content") or ""),
)
Các bước dựng một cặp AutoGen
- Cài đặt:
pip install pyautogen. - Chuẩn bị
llm_configvới model + api_key. - Tạo
AssistantAgentvớisystem_messagerõ vai trò và quy ước kết thúc. - Tạo
UserProxyAgentvớihuman_input_modevà giới hạn vòng lặp. - Cấu hình
code_execution_config(work_dir, có dùng Docker không). - Gọi
initiate_chat(...)với thông điệp yêu cầu ban đầu. - Đọc transcript để hiểu các agent đã thương lượng thế nào.
Hiểu vòng lặp phản hồi qua transcript
Sức mạnh lớn nhất của AutoGen là vòng lặp phản hồi tự động. Khi coder viết một đoạn Python có lỗi, proxy chạy và bắt được traceback thật, rồi gửi nguyên văn lỗi đó trở lại. Coder đọc lỗi, hiểu nguyên nhân và sửa — y hệt một lập trình viên ngồi trước terminal. Bạn nên đọc kỹ transcript (lịch sử hội thoại) để thấy các agent đã "suy nghĩ" và thương lượng ra sao; đây là công cụ debug quý giá và cũng là cách bạn học được framework đang làm gì bên dưới.
Một điểm khác biệt then chốt so với CrewAI: ở CrewAI bạn thiết kế trước thứ tự các task; ở AutoGen, thứ tự trao đổi nổi lên trong lúc chạy tùy theo nội dung. Điều này cho phép xử lý các tình huống không đoán trước được (lỗi lạ, dữ liệu bất thường), nhưng đổi lại khó dự đoán và cần giới hạn chặt chẽ hơn.
An toàn khi chạy code
AutoGen có thể thực thi code thật trên máy bạn. Đây là con dao hai lưỡi:
- Dùng
work_dirriêng biệt để cô lập file sinh ra. - Cân nhắc
use_docker=Trueđể sandbox, tránh code lạ đụng vào hệ thống. - Không bao giờ chạy AutoGen thực thi code trên server production với quyền cao.
- Rà soát cẩn thận trước khi cho phép agent thao tác file hệ thống, gọi mạng, hay cài đặt gói — một prompt xấu có thể sinh code phá hoại.
Khung tư duy: AutoGen hợp với bài toán nào
Bài toán có cần THỬ–SAI LẶP LẠI (chạy → thấy lỗi → sửa) không?
→ CÓ : AutoGen tỏa sáng (đặc biệt là code, data analysis)
→ KHÔNG, chỉ là pipeline biên tập tuyến tính
: CrewAI thường gọn và dễ kiểm soát hơn
Checklist AutoGen
- [ ]
system_messagenêu rõ vai trò và quy ước kết thúc ("TERMINATE"). - [ ] Đã đặt
max_consecutive_auto_replyhoặcmax_turns. - [ ]
is_termination_msgkhớp đúng từ khóa trong system_message. - [ ]
human_input_modephù hợp (NEVER cho tự động, TERMINATE/ALWAYS khi cần người duyệt). - [ ] Code chạy trong
work_dircô lập, cân nhắc Docker.
Sai lầm thường gặp
- Quên điều kiện dừng → hai agent nói chuyện vô tận, đốt token.
- Từ khóa kết thúc không khớp: system_message dạy nói "DONE" nhưng
is_termination_msgtìm "TERMINATE" → không bao giờ dừng. - Chạy code không sandbox trên máy quan trọng → rủi ro bảo mật.
- Để
human_input_mode=ALWAYSkhi muốn tự động → treo chờ nhập tay. - Dùng AutoGen cho task tuyến tính đơn giản → phức tạp hóa thứ đáng lẽ CrewAI làm gọn hơn.