AutoGen 教學

微軟開源的多 Agent 協作框架,讓多個 AI 角色協同解決複雜問題。

AutoGen 核心概念

AutoGen 是微軟研究院開發的多 Agent 框架,核心思想是讓多個具有不同角色的 Agent 相互對話,共同完成複雜任務。主要角色:

AutoGen 的核心優勢:自動執行程式碼、多輪自我修正、多角色分工,特別適合需要程式碼生成與驗證的場景。

基本兩 Agent 對話

import autogen

# 設定 LLM
config_list = [{"model": "gpt-4o-mini", "api_key": "YOUR_API_KEY"}]
llm_config = {"config_list": config_list, "temperature": 0}

# 建立 AssistantAgent(AI 助手)
assistant = autogen.AssistantAgent(
    name="助手",
    llm_config=llm_config,
    system_message="你是一個 Python 程式設計專家,負責撰寫程式碼解決問題。"
)

# 建立 UserProxyAgent(執行者)
user_proxy = autogen.UserProxyAgent(
    name="執行者",
    human_input_mode="NEVER",   # 全自動,不需人工干預
    max_consecutive_auto_reply=10,
    code_execution_config={
        "work_dir": "coding",
        "use_docker": False  # 設為 True 可使用 Docker 沙箱
    }
)

# 啟動對話
user_proxy.initiate_chat(
    assistant,
    message="請撰寫一個 Python 程式,計算 1 到 100 的質數並輸出結果。"
)

多 Agent 群組對話

使用 GroupChat 讓多個專門角色的 Agent 協同工作:

import autogen

config_list = [{"model": "gpt-4o-mini", "api_key": "YOUR_API_KEY"}]
llm_config = {"config_list": config_list}

# 建立不同角色的 Agent
planner = autogen.AssistantAgent(
    name="規劃師",
    llm_config=llm_config,
    system_message="你負責分析需求,制定解決方案的整體架構。只負責規劃,不寫程式碼。"
)

coder = autogen.AssistantAgent(
    name="工程師",
    llm_config=llm_config,
    system_message="你是資深 Python 工程師,根據規劃師的設計實作程式碼。"
)

reviewer = autogen.AssistantAgent(
    name="審查員",
    llm_config=llm_config,
    system_message="你負責 Code Review,找出潛在問題和改進空間。"
)

executor = autogen.UserProxyAgent(
    name="執行者",
    human_input_mode="NEVER",
    code_execution_config={"work_dir": "coding", "use_docker": False}
)

# 建立群組對話
groupchat = autogen.GroupChat(
    agents=[planner, coder, reviewer, executor],
    messages=[],
    max_round=12
)

manager = autogen.GroupChatManager(
    groupchat=groupchat,
    llm_config=llm_config
)

# 啟動群組對話
executor.initiate_chat(
    manager,
    message="請設計並實作一個簡單的 RESTful API,提供待辦事項管理功能。"
)

自訂終止條件

# 當助手回覆包含 "TERMINATE" 時自動結束對話
user_proxy = autogen.UserProxyAgent(
    name="執行者",
    human_input_mode="NEVER",
    max_consecutive_auto_reply=10,
    is_termination_msg=lambda x: x.get("content", "").rstrip().endswith("TERMINATE"),
    code_execution_config={"work_dir": "coding", "use_docker": False}
)

assistant = autogen.AssistantAgent(
    name="助手",
    llm_config=llm_config,
    system_message="""你是 Python 專家。
    完成任務後,在最後回覆中加上 TERMINATE 表示任務完成。"""
)

人機協作模式

# 設定需要人工確認才能執行程式碼
user_proxy = autogen.UserProxyAgent(
    name="使用者",
    human_input_mode="ALWAYS",   # 每次都詢問人工
    # 或 "TERMINATE" 只在結束時詢問
    code_execution_config={"work_dir": "coding"}
)

# 也可以設定白名單,允許某些指令自動執行
user_proxy = autogen.UserProxyAgent(
    name="使用者",
    human_input_mode="NEVER",
    default_auto_reply="繼續",
    code_execution_config={
        "work_dir": "coding",
        "last_n_messages": 3  # 只參考最近 3 條訊息中的程式碼
    }
)
接下來學習 MCP Server 開發,了解如何建立標準化的 AI 工具介面。