AutoGen多Agent框架实战:从零构建智能对话系统

一、AutoGen简介

AutoGen是微软开源的多Agent对话框架,旨在简化多Agent系统的构建。与CrewAI相比,AutoGen提供更底层的抽象和更灵活的Agent定义,最突出的特点是支持Human-in-the-Loop模式,可在Agent执行过程中接收人类反馈。

二、核心概念

AssistantAgent:AI助手,执行任务
UserProxyAgent:用户代理,支持人类输入或代码执行
GroupChat:群聊,多个Agent互相对话
ConversableAgent:基类,所有Agent都继承自它

三、环境搭建

pip install pyautogen

import os
os.environ["OPENAI_API_KEY"] = "your-api-key"

四、最简单的例子:两Agent对话

import autogen

config_list = [{
    "model": "gpt-4o",
    "api_key": os.environ["OPENAI_API_KEY"]
}]

assistant = autogen.AssistantAgent(
    name="Assistant",
    llm_config={
        "config_list": config_list,
        "temperature": 0.7
    }
)

user_proxy = autogen.UserProxyAgent(
    name="User",
    human_input_mode="NEVER",
    max_consecutive_auto_reply=10,
    code_execution_config={
        "work_dir": "coding",
        "use_docker": False
    }
)

user_proxy.initiate_chat(assistant, message="用Python写一个快速排序算法")

五、群聊模式:多Agent协作

import autogen
from autogen import GroupChat, GroupChatManager

config_list = [{"model": "gpt-4o", "api_key": os.environ["OPENAI_API_KEY"]}]

coder = autogen.AssistantAgent(
    name="Coder",
    llm_config={"config_list": config_list},
    system_message="你是一名Python开发工程师,负责编写代码实现功能。"
)

reviewer = autogen.AssistantAgent(
    name="Reviewer",
    llm_config={"config_list": config_list},
    system_message="你是一名代码审查专家,负责审查代码质量。"
)

tester = autogen.AssistantAgent(
    name="Tester",
    llm_config={"config_list": config_list},
    system_message="你是一名测试工程师,负责为代码编写单元测试。"
)

user_proxy = autogen.UserProxyAgent(name="User", human_input_mode="NEVER", max_consecutive_auto_reply=15)

groupchat = GroupChat(agents=[user_proxy, coder, reviewer, tester], messages=[], max_round=10)
manager = GroupChatManager(groupchat=groupchat, llm_config={"config_list": config_list})

user_proxy.initiate_chat(manager, message="实现一个LRU缓存类,包含get和put方法,要求O(1)复杂度")

六、工具调用:让Agent使用外部工具

def search_documentation(query):
    return "关于" + query + "的文档结果:https://docs.example.com/" + query

assistant = autogen.AssistantAgent(
    name="Assistant",
    llm_config={"config_list": config_list},
    function_map={"search_doc": search_documentation}
)

user_proxy.initiate_chat(assistant, message="搜索AutoGen文档")

七、Human-in-the-Loop:人类介入模式

user_proxy = autogen.UserProxyAgent(
    name="User",
    human_input_mode="TERMINATE",  # ALWAYS / TERMINATE / NEVER
    max_consecutive_auto_reply=5
)

# TERMINATE:Agent请求终止时询问人类
# ALWAYS:每个回复都询问人类
# NEVER:完全自动,不询问

八、代码执行与沙箱隔离

user_proxy = autogen.UserProxyAgent(
    name="CodeExecutor",
    human_input_mode="NEVER",
    code_execution_config={
        "work_dir": "output",
        "use_docker": True,     # 生产环境建议使用Docker隔离
        "timeout": 30,
        "last_n_messages": 3
    }
)

九、与Spring Boot集成

@Service
public class AutoGenService {
    @Value("${openai.api.key}")
    private String apiKey;

    public String runTask(String task) {
        ProcessBuilder pb = new ProcessBuilder("python", "-c",
            "import autogen, os; " +
            "os.environ[OPENAI_API_KEY] = " + apiKey + "; " +
            "assistant = autogen.AssistantAgent(name=Asst, " +
            "    llm_config={config_list: [{model: gpt-4o}]}); " +
            "user_proxy = autogen.UserProxyAgent(name=User, human_input_mode=NEVER); " +
            "user_proxy.initiate_chat(assistant, message=" + task + ")"
        );
        try {
            Process p = pb.start();
            return new String(p.getInputStream().readAllBytes());
        } catch (Exception e) {
            return "Error: " + e.getMessage();
        }
    }
}

十、最佳实践

  1. 清晰的Agent角色定义:每个Agent的system_message要明确其职责范围
  2. 合理的对话轮次限制:设置max_consecutive_auto_reply防止无限循环
  3. 代码执行安全:生产环境务必使用Docker隔离
  4. Human-in-the-Loop慎用:在关键决策点介入,不要每步都问
  5. 超时设置:为代码执行设置合理的超时时间

十一、总结

AutoGen是构建复杂多Agent系统的利器,支持双Agent对话、群聊、工具调用、人类介入等多种模式。相比CrewAI,AutoGen提供更底层的控制和更丰富的功能,可以满足从简单自动化到复杂工作流的各类需求。

文章摘自:https://www.cnblogs.com/czlws/p/19859350/autogen-multi-agent-dialogue-tutorial