Agent-study项目教程(07):虚拟软件开发公司(AutoGen多智能体协作)

📅 2026/8/14 12:11:15
Agent-study项目教程(07):虚拟软件开发公司(AutoGen多智能体协作)
一、理论部分1. 为什么需要 Multi-Agent把复杂任务拆给“团队”当任务从“回答一个问题”升级为“完成一个可交付的软件产物”时单个 Agent 往往会遇到三个瓶颈角色冲突同一个模型同时扮演“产品经理、工程师、测试人员”容易目标不一致、关注点混乱。缺少验收闭环没有独立的验收者需求容易偏离代码质量不可控。无法自动执行与纠错只写代码不运行错误只能靠人类手动发现与反馈。Multi-Agent 的核心价值是“分工协作”让不同角色各司其职并形成自动化闭环写代码 → 执行 → 报错反馈 → 修复 → 验收通过。2. AutoGen 的基本抽象AssistantAgent 与 UserProxyAgent在 AutoGen 中两类角色最关键AssistantAgent负责思考、规划、编写内容例如 PM、Engineer。它不会直接执行代码。UserProxyAgent代表“人类用户”的代理关键能力是执行工程师生成的代码并把运行结果成功/报错日志反馈给其他 Agent从而形成自动化纠错闭环。在工程场景下UserProxyAgent 相当于“执行器 反馈器”使整个系统具备可自动迭代的能力。3. 群聊协作机制GroupChat 与 ManagerMulti-Agent 的通信需要一个“会议室”和“主持人”GroupChat包含多个 Agent 的对话空间并设置最大轮次避免无限讨论。GroupChatManager负责管理消息流转与对话推进。通过群聊模式系统可以自然表达“PM 提需求 → Engineer 实现 → UserProxy 执行 → PM 验收”的协作链路。4. 终止条件与安全边界TERMINATE 与执行隔离一个自动化系统必须明确“什么时候结束”。本项目使用以下机制PM 验收通过后回复TERMINATE。UserProxy 识别到终止信号后结束对话。同时代码执行存在安全风险。AutoGen 推荐使用 Docker 进行隔离执行本项目为了便于演示配置为本地执行use_dockerFalse因此必须注意不要在不可信环境中直接运行未知代码。建议在专用虚拟环境、受控目录下执行。代码执行目录固定为workspace减少误操作影响面。二、实战部分1. 项目目标组建一个“虚拟软件开发团队”自动完成从需求到交付的最小闭环产品经理PM将模糊需求转成清晰功能列表并验收结果工程师Engineer编写代码并修复 Bug用户代理UserProxy自动执行代码反馈运行结果与报错日志为了验证“自动执行 自动纠错”能力默认需求为生成一个 Pygame 贪吃蛇游戏并提供无头模式Headless自动化测试脚本使执行器在看不到窗口的情况下也能验证程序可运行。2. 运行准备请确保本地已安装依赖并配置环境变量不要把真实密钥写进代码或公开仓库依赖安装示例pipinstall-rrequirements.txt如果运行时提示缺少autogen或pyautogen可安装pipinstallpyautogen环境变量示例DEEPSEEK_API_KEYDEEPSEEK_BASE_URL说明本项目会在当前目录创建workspace/作为代码执行与产物输出目录。若需求涉及第三方库如 pygame工程师可能输出安装命令UserProxy 会尝试执行。3. 主要代码核心实现本项目核心在于三件事LLM 配置、角色定义、群聊启动。以下为完整主逻辑代码可直接运行importosfromdotenvimportload_dotenvfromautogenimportAssistantAgent,UserProxyAgent,GroupChat,GroupChatManager load_dotenv()# 1) 配置 LLMconfig_list[{model:deepseek-chat,api_key:os.getenv(DEEPSEEK_API_KEY),base_url:https://api.deepseek.com,}]llm_config{config_list:config_list,temperature:0.7,}# 2) 定义角色# 2.1 产品经理拆需求 验收通过则 TERMINATEpmAssistantAgent(nameProduct_Manager,description产品经理负责需求分析和验收。,system_message 你是一名专业的产品经理。 你的职责: 1. 接收用户的模糊需求将其转化为清晰的功能列表。 2. 根据工程师的代码结果验收是否符合需求。 3. 如果符合回复 TERMINATE如果不符合指出问题并要求修改。 .strip(),llm_configllm_config,)# 2.2 工程师写代码 修复 bug并提供 headless 自动化测试脚本engineerAssistantAgent(nameEngineer,descriptionPython 工程师负责编写代码和修复 Bug。能够安装依赖库。,system_message 你是一名资深的 Python 工程师。 你的职责: 1. 根据产品经理的需求编写高质量的 Python 代码。 2. 对于 GUI 或 游戏 等交互式程序必须提供一个无头模式(Headless)的自动化测试脚本 (例如 test_game.py)。 - 在 Pygame 中必须在 import pygame 之前设置 os.environ[SDL_VIDEODRIVER] dummy - 脚本必须自动退出并返回 exit code 0绝对不要依赖人工关闭窗口 3. 如果 UserProxy 报告了运行错误你需要根据错误信息修复代码。 4. 输出代码时使用 python或 sh代码块。 .strip(),llm_configllm_config,)# 2.3 用户代理执行代码报错反馈给工程师成功反馈给 PMuser_proxyUserProxyAgent(nameUser_Proxy,description用户代理负责执行代码并反馈结果。一旦看到代码块必须立即执行。,system_message 你是一名代码执行者。 你的职责: 1. 执行工程师提供的代码 (Python 或 Shell)。 2. 如果代码运行报错自动把错误信息反馈给工程师。 3. 如果代码运行成功把结果反馈给产品经理。 .strip(),human_input_modeNEVER,max_consecutive_auto_reply10,is_termination_msglambdax:TERMINATEinx.get(content,),code_execution_config{work_dir:workspace,use_docker:False,},)# 3) 创建群聊与管理器groupchatGroupChat(agents[user_proxy,pm,engineer],messages[],max_round12,)managerGroupChatManager(groupchatgroupchat,llm_configllm_config)# 4) 启动任务由 UserProxy 发起对话if__name____main__:ifnotos.path.exists(workspace):os.makedirs(workspace)task(写一个简单的贪吃蛇游戏使用 pygame 库。注意1. 必须提供一个无头模式(Headless)的自动化测试脚本(test_game.py)使用 SDL_VIDEODRIVERdummy。2. 必须处理中文显示问题确保 GUI 中不出现乱码。)user_proxy.initiate_chat(manager,messagetask,)4. 如何运行在项目根目录执行python stage_05_multi_agent/project_07_software_company/main.py也可以在命令行传入自定义需求示例python stage_05_multi_agent/project_07_software_company/main.py写一个命令行待办清单工具支持增删改查并带简单的单元测试5. 运行结果示例运行过程会输出多个角色的对话与执行日志。典型流程如下示例实际内容会随生成结果变化 虚拟软件开发团队 (基于 Microsoft AutoGen) 开始执行任务: 写一个简单的贪吃蛇游戏... Product_Manager: 输出功能列表、验收标准... Engineer: 输出 main_game.py 与 test_game.py 的代码块... User_Proxy: 在 workspace 中写入文件并执行 User_Proxy: 若报错则返回 Traceback若成功则返回“自动化测试通过”日志 Engineer: 根据报错修复代码并再次提交 Product_Manager: TERMINATE在成功情况下你通常会在workspace/中看到生成的项目文件例如游戏主程序如game.py无头自动化测试脚本如test_game.py可能还包含依赖安装命令或运行说明6. 项目总结Multi-Agent 的本质是“角色分工 消息协作 自动化闭环”比单 Agent 更适合交付型任务写代码、跑测试、迭代修复。AutoGen 的关键能力在于 UserProxyAgent它把“代码能否运行”的验证从人工转为自动从而让系统具备可迭代纠错能力。群聊结构能够自然表达“需求 → 实现 → 执行 → 验收”的协作链路并通过TERMINATE明确终止。安全边界必须重视生产环境建议使用 Docker 隔离执行本地执行务必限定工作目录并审查生成代码。