Product Management
Đăng nhập
ESC

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

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

Bài 5 — AutoGen: agent hội thoại & thực thi code

Đã đọc 0/9 mục · còn khoảng 4 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.

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òng lặp assistant viết code → proxy chạy → trả lỗi → assistant sửa là điểm mạnh đặc trưng của AutoGen.

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_msg kiểm tra "TERMINATE").
  • max_consecutive_auto_reply: giới hạn số vòng tự phản hồi.
  • max_turns khi 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_config với model + api_key.
  • Tạo AssistantAgent với system_message rõ vai trò và quy ước kết thúc.
  • Tạo UserProxyAgent với human_input_mode và 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_dir riê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_message nêu rõ vai trò và quy ước kết thúc ("TERMINATE").
  • [ ] Đã đặt max_consecutive_auto_reply hoặc max_turns.
  • [ ] is_termination_msg khớp đúng từ khóa trong system_message.
  • [ ] human_input_mode phù hợp (NEVER cho tự động, TERMINATE/ALWAYS khi cần người duyệt).
  • [ ] Code chạy trong work_dir cô 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_msg tì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=ALWAYS khi 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.
Bài 6: nhóm nhiều agent AutoGen thành GroupChat có điều phối viê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