公主病患者 發表於 2026-4-13 14:04:00

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

<h2>一、AutoGen简介</h2>
<p>AutoGen是微软开源的多Agent对话框架,旨在简化多Agent系统的构建。与CrewAI相比,AutoGen提供更底层的抽象和更灵活的Agent定义,最突出的特点是支持Human-in-the-Loop模式,可在Agent执行过程中接收人类反馈。</p>
<h2>二、核心概念</h2>
<pre><code>AssistantAgent:AI助手,执行任务
UserProxyAgent:用户代理,支持人类输入或代码执行
GroupChat:群聊,多个Agent互相对话
ConversableAgent:基类,所有Agent都继承自它</code></pre>
<h2>三、环境搭建</h2>
<pre><code>pip install pyautogen

import os
os.environ["OPENAI_API_KEY"] = "your-api-key"</code></pre>
<h2>四、最简单的例子:两Agent对话</h2>
<pre><code>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写一个快速排序算法")</code></pre>
<h2>五、群聊模式:多Agent协作</h2>
<pre><code>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=, 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)复杂度")</code></pre>
<h2>六、工具调用:让Agent使用外部工具</h2>
<pre><code>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文档")</code></pre>
<h2>七、Human-in-the-Loop:人类介入模式</h2>
<pre><code>user_proxy = autogen.UserProxyAgent(
    name="User",
    human_input_mode="TERMINATE",# ALWAYS / TERMINATE / NEVER
    max_consecutive_auto_reply=5
)

# TERMINATE:Agent请求终止时询问人类
# ALWAYS:每个回复都询问人类
# NEVER:完全自动,不询问</code></pre>
<h2>八、代码执行与沙箱隔离</h2>
<pre><code>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
    }
)</code></pre>
<h2>九、与Spring Boot集成</h2>
<pre><code>@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 = " + 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();
      }
    }
}</code></pre>
<h2>十、最佳实践</h2>
<ol>
<li><strong>清晰的Agent角色定义</strong>:每个Agent的system_message要明确其职责范围</li>
<li><strong>合理的对话轮次限制</strong>:设置max_consecutive_auto_reply防止无限循环</li>
<li><strong>代码执行安全</strong>:生产环境务必使用Docker隔离</li>
<li><strong>Human-in-the-Loop慎用</strong>:在关键决策点介入,不要每步都问</li>
<li><strong>超时设置</strong>:为代码执行设置合理的超时时间</li>
</ol>
<h2>十一、总结</h2>
<p>AutoGen是构建复杂多Agent系统的利器,支持双Agent对话、群聊、工具调用、人类介入等多种模式。相比CrewAI,AutoGen提供更底层的控制和更丰富的功能,可以满足从简单自动化到复杂工作流的各类需求。</p>

</div>
<div id="MySignature" role="contentinfo">
   

---

📌 **如果觉得文章对你有帮助,欢迎点赞👍收藏⭐!**

💬 有问题或建议?欢迎在评论区留言讨论~

🔗 更多技术干货请关注作者:弥烟袅绕

📚 本文地址:https://www.cnblogs.com/czlws/p/19859350/autogen-multi-agent-dialogue-tutorial<br><br>
来源:https://www.cnblogs.com/czlws/p/19859350/autogen-multi-agent-dialogue-tutorial
頁: [1]
查看完整版本: AutoGen多Agent框架实战:从零构建智能对话系统