
AutoGenAutoGen 是一个面向多智能体协作的开发框架。它的核心不是让一个大模型单独完成所有事情而是把任务拆给多个具有不同职责的智能体让它们通过对话协作完成任务。在软件开发场景中可以把不同智能体看作一个虚拟开发团队产品经理负责分析需求工程师负责写代码代码审查员负责检查质量用户代理负责反馈或验收。整个任务的推进过程本质上就是这些角色之间的一轮轮消息传递。6.2.1 AutoGen 的核心机制AutoGen 的核心思想可以概括为用对话组织协作用角色拆分任务。在新版本架构中AutoGen 更强调模块化和异步执行。底层能力主要由autogen-core提供上层对话式智能体开发主要由autogen-agentchat提供。这样设计的好处是职责更清晰底层负责模型交互、消息传递等基础能力上层负责更方便地搭建多智能体应用。AutoGen 中最常用的智能体是AssistantAgent。它由大语言模型驱动可以根据系统提示词自动生成回复。产品经理、工程师、代码审查员这类角色一般都适合用它来实现。AssistantAgent(nameEngineer,model_clientmodel_client,system_message你是一位资深 Python 工程师负责根据需求编写完整代码。)这里真正重要的是system_message。它决定了智能体的角色边界、任务目标和输出方式。多智能体系统能不能稳定协作很大程度上取决于这些角色提示词是否清楚。另一个重要组件是UserProxyAgent。它和AssistantAgent不同并不是普通的自动回复智能体而是用于引入真实用户反馈。流程走到它时通常会等待用户输入。因此如果程序运行到“请用户代理测试”后不继续输出往往不是卡死而是轮到UserProxyAgent等待人工输入。多个智能体需要通过团队机制组织起来。案例中使用的是RoundRobinGroupChat也就是轮询群聊。它会按照participants中的顺序让智能体依次发言。team_chatRoundRobinGroupChat(participants[product_manager,engineer,code_reviewer,user_proxy],termination_conditionTextMentionTermination(TERMINATE),max_turns20,)这个流程可以理解为产品经理 → 工程师 → 代码审查员 → 用户代理 → 再循环为了避免对话无限进行需要设置终止条件。TextMentionTermination(TERMINATE)表示只要某条消息中出现TERMINATE团队协作就结束。max_turns则是保险机制防止智能体忘记输出终止词。6.2.2 软件开发团队这一节用 AutoGen 构建了一个模拟软件开发团队任务是开发一个比特币价格显示应用。这个案例虽然不复杂但完整包含了需求分析、代码实现、代码审查和用户测试几个典型环节所以很适合用来展示 AutoGen 的多智能体协作流程。这个团队主要包含四个角色。ProductManager负责把用户需求转化成清晰的开发计划。它需要分析功能需求、划分模块、提出技术建议并给出验收标准。它的输出重点不是代码而是让后续工程师知道要做什么、怎么做、做到什么程度算完成。Engineer负责根据产品经理的分析编写具体代码。在案例中它需要使用 Streamlit 实现一个比特币价格显示应用包括当前价格、24 小时涨跌情况、刷新功能、错误处理和加载状态。CodeReviewer负责检查工程师提交的代码。它关注的是代码质量、可读性、安全性、异常处理和是否符合需求。这个角色相当于开发流程中的质量关卡。UserProxy代表用户参与最终反馈。它可以用于人工验收也可以在任务完成后输入TERMINATE结束流程。不过需要注意UserProxyAgent通常不会自动完成测试它更像是等待用户输入的接口。这个案例的重点不是“生成一个比特币应用”而是展示如何把一个开发任务拆成多个角色并让它们按照固定流程协作。6.2.3 核心代码实现代码实现可以分成四个关键部分模型客户端、智能体定义、团队编排、任务运行。首先是模型客户端配置。所有基于 LLM 的智能体都需要通过模型客户端调用大模型。AutoGen 使用OpenAIChatCompletionClient来连接 OpenAI 或兼容 OpenAI API 的模型服务。defcreate_openai_model_client():returnOpenAIChatCompletionClient(modelos.getenv(LLM_MODEL_ID),api_keyos.getenv(LLM_API_KEY),base_urlos.getenv(LLM_BASE_URL))实际开发中API Key 不应该写死在代码里而应该放到.env文件中。这样更安全也方便切换不同模型。如果使用 DeepSeek、通义千问等非 OpenAI 官方模型通常还需要补充model_info告诉 AutoGen 这个模型支持哪些能力例如函数调用、JSON 输出、上下文长度等。model_info{function_calling:True,max_tokens:4096,context_length:32768,vision:False,json_output:True,family:deepseek,structured_output:True,}第二步是定义不同智能体。以产品经理为例本质上就是用AssistantAgent加一段明确的系统提示词。product_managerAssistantAgent(nameProductManager,model_clientmodel_client,system_message你是产品经理负责需求分析和项目规划完成后请工程师开始实现。)工程师和代码审查员也是类似的方式只是system_message不同。工程师要被要求输出完整代码代码审查员要被要求检查质量并给出审查意见。第三步是定义团队协作流程。RoundRobinGroupChat的participants顺序决定了发言顺序。team_chatRoundRobinGroupChat(participants[product_manager,engineer,code_reviewer,user_proxy],termination_conditionTextMentionTermination(TERMINATE),max_turns20,)这里最容易出问题的是user_proxy。如果它是UserProxyAgent流程走到它时会等待用户输入。所以当输出停在代码审查完成请用户代理测试后面没有继续很可能是因为系统正在等待你手动输入而不是模型没有响应。如果想让流程自动结束可以不要使用UserProxyAgent而是改成一个普通的测试智能体testerAssistantAgent(nameTester,model_clientmodel_client,system_message你是测试工程师负责检查代码是否满足需求。如果可以接受最后输出 TERMINATE。)然后团队顺序改为participants[product_manager,engineer,code_reviewer,tester]这样流程就可以自动走完。最后是运行任务。由于 AutoGen 新版本大量使用异步接口所以运行时通常写成resultawaitConsole(team_chat.run_stream(tasktask))主程序中用asyncio.run(run_software_development_team())启动整个协作流程。运行结果删减后便于展示PS C:\Users\27807\Desktop\研究生\Agent\Framework\AutoGen D:\yyq\Anaconda\python.exe autogen_software_team.py 正在初始化模型客户端... 正在创建智能体团队... 启动 AutoGen 软件开发团队协作... ---------- TextMessage (user) ---------- 开发一个比特币价格显示应用 - 实时显示比特币当前价格USD - 显示 24 小时价格变化趋势 - 提供价格刷新功能 - 使用 Streamlit 创建 Web 应用 - 添加错误处理和加载状态 ---------- TextMessage (ProductManager) ---------- 需求分析完成 该应用属于典型的金融信息看板场景核心目标是让用户快速、直观地查看 BTC/USD 当前价格及 24 小时涨跌情况。 功能模块划分 1. 数据获取模块调用 CoinGecko API 获取 BTC 价格数据 2. 核心展示模块突出显示当前价格、涨跌额和涨跌幅 3. 交互控制模块提供手动刷新和自动刷新能力 技术建议 - 使用 Streamlit 快速构建数据应用 - 使用 CoinGecko 免费 API 作为数据源 - 使用 st.metric 展示价格和涨跌信息 - 使用 try...except 和 st.error 处理异常 请工程师开始实现。 ---------- TextMessage (Engineer) ---------- 代码实现完成 实现方案 - 使用 CoinGecko /coins/markets 接口获取当前价格、24h 涨跌额和涨跌幅 - 使用 Streamlit 构建页面 - 使用 st.spinner 提供加载状态 - 使用 st.session_state 保存上次更新时间和价格数据 - 使用 st.button 实现手动刷新 - 通过自定义 CSS 美化价格展示卡片 - 对网络超时、连接错误、HTTP 错误和数据解析异常进行处理 请代码审查员检查。 ---------- TextMessage (CodeReviewer) ---------- 代码审查结论 整体代码结构清晰功能完整基本满足产品需求。工程化思路较好包含模块划分、状态管理、错误处理和界面优化。 主要审查建议 1. 删除未完成且未使用的 get_bitcoin_price() 函数 2. 避免使用 while True time.sleep 实现自动刷新否则可能阻塞 Streamlit 应用 3. 建议使用 st.cache_data(ttl60) 管理 API 缓存和刷新周期 4. 清理与最终实现不一致的过时注释 5. 对 API 返回数据做更严格的字段校验 代码审查完成请用户代理测试。 TERMINATE ---------- TextMessage (UserProxy) ---------- TERMINATE ✅ 团队协作完成 协作结果摘要 - 参与智能体数量4 个 - 任务完成状态成功6.2.4 AutoGen 的优势与局限性分析AutoGen 的优势在于它把复杂任务变成了多个角色之间的协作。开发者不需要一开始就设计复杂的状态机只需要先想清楚有哪些角色、每个角色负责什么、它们按什么顺序交流、什么时候结束。这种方式特别适合流程比较明确的任务比如软件开发、代码审查、文档生成、方案讨论和多角色评审。RoundRobinGroupChat可以让流程变得清晰可控UserProxyAgent又可以在关键节点引入人工反馈避免系统完全无人监督。但 AutoGen 也有明显局限。首先LLM 输出本身有不确定性。即使写了系统提示词智能体也可能没有严格按照预期输出比如忘记说TERMINATE、重复讨论、偏离自己的角色或者把别人的任务也做了。其次多智能体系统的调试比普通程序更麻烦。普通代码出错会有异常栈而 AutoGen 出问题时往往要回看整段对话历史判断到底是哪个智能体的提示词不清楚、哪个环节的终止条件没设计好还是发言顺序不合理。最后UserProxyAgent很容易被初学者误用。它不是自动测试员而是用户代理。需要人工参与时用它是合适的如果想让流程自动执行就应该用AssistantAgent模拟测试员。总结来说AutoGen 的价值不在于“让一个模型自动完成所有任务”而在于提供了一套多智能体协作机制。它适合把复杂任务拆成多个角色通过对话一步步推进。使用时最关键的是三点角色定义要清楚协作顺序要合理终止条件要明确。