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

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

一、理论部分

1. 为什么需要 Multi-Agent:把复杂任务拆给“团队”

当任务从“回答一个问题”升级为“完成一个可交付的软件产物”时,单个 Agent 往往会遇到三个瓶颈:

  • 角色冲突:同一个模型同时扮演“产品经理、工程师、测试人员”,容易目标不一致、关注点混乱。
  • 缺少验收闭环:没有独立的验收者,需求容易偏离,代码质量不可控。
  • 无法自动执行与纠错:只写代码不运行,错误只能靠人类手动发现与反馈。

Multi-Agent 的核心价值是“分工协作”:让不同角色各司其职,并形成自动化闭环(写代码 → 执行 → 报错反馈 → 修复 → 验收通过)。

2. AutoGen 的基本抽象:AssistantAgent 与 UserProxyAgent

在 AutoGen 中,两类角色最关键:

  • AssistantAgent:负责思考、规划、编写内容(例如 PM、Engineer)。它不会直接执行代码。
  • UserProxyAgent:代表“人类用户”的代理,关键能力是执行工程师生成的代码,并把运行结果(成功/报错日志)反馈给其他 Agent,从而形成自动化纠错闭环。

在工程场景下,UserProxyAgent 相当于“执行器 + 反馈器”,使整个系统具备可自动迭代的能力。

3. 群聊协作机制:GroupChat 与 Manager

Multi-Agent 的通信需要一个“会议室”和“主持人”:

  • GroupChat:包含多个 Agent 的对话空间,并设置最大轮次(避免无限讨论)。
  • GroupChatManager:负责管理消息流转与对话推进。

通过群聊模式,系统可以自然表达“PM 提需求 → Engineer 实现 → UserProxy 执行 → PM 验收”的协作链路。

4. 终止条件与安全边界:TERMINATE 与执行隔离

一个自动化系统必须明确“什么时候结束”。本项目使用以下机制:

  • PM 验收通过后回复TERMINATE
  • UserProxy 识别到终止信号后结束对话。

同时,代码执行存在安全风险。AutoGen 推荐使用 Docker 进行隔离执行;本项目为了便于演示,配置为本地执行(use_docker=False),因此必须注意:

  • 不要在不可信环境中直接运行未知代码。
  • 建议在专用虚拟环境、受控目录下执行。
  • 代码执行目录固定为workspace,减少误操作影响面。

二、实战部分

1. 项目目标

组建一个“虚拟软件开发团队”,自动完成从需求到交付的最小闭环:

  • 产品经理(PM):将模糊需求转成清晰功能列表,并验收结果
  • 工程师(Engineer):编写代码并修复 Bug
  • 用户代理(UserProxy):自动执行代码,反馈运行结果与报错日志

为了验证“自动执行 + 自动纠错”能力,默认需求为:生成一个 Pygame 贪吃蛇游戏,并提供无头模式(Headless)自动化测试脚本,使执行器在看不到窗口的情况下也能验证程序可运行。

2. 运行准备

请确保本地已安装依赖并配置环境变量(不要把真实密钥写进代码或公开仓库):

依赖安装(示例):

pipinstall-rrequirements.txt

如果运行时提示缺少autogen(或pyautogen),可安装:

pipinstallpyautogen

环境变量(示例):

  • DEEPSEEK_API_KEY
  • DEEPSEEK_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 产品经理:拆需求 + 验收,通过则 TERMINATEpm=AssistantAgent(name="Product_Manager",description="产品经理,负责需求分析和验收。",system_message=""" 你是一名专业的产品经理。 你的职责: 1. 接收用户的模糊需求,将其转化为清晰的功能列表。 2. 根据工程师的代码结果,验收是否符合需求。 3. 如果符合,回复 "TERMINATE";如果不符合,指出问题并要求修改。 """.strip(),llm_config=llm_config,)# 2.2 工程师:写代码 + 修复 bug,并提供 headless 自动化测试脚本engineer=AssistantAgent(name="Engineer",description="Python 工程师,负责编写代码和修复 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_config=llm_config,)# 2.3 用户代理:执行代码,报错反馈给工程师,成功反馈给 PMuser_proxy=UserProxyAgent(name="User_Proxy",description="用户代理,负责执行代码并反馈结果。一旦看到代码块,必须立即执行。",system_message=""" 你是一名代码执行者。 你的职责: 1. 执行工程师提供的代码 (Python 或 Shell)。 2. 如果代码运行报错,自动把错误信息反馈给工程师。 3. 如果代码运行成功,把结果反馈给产品经理。 """.strip(),human_input_mode="NEVER",max_consecutive_auto_reply=10,is_termination_msg=lambdax:"TERMINATE"inx.get("content",""),code_execution_config={"work_dir":"workspace","use_docker":False,},)# 3) 创建群聊与管理器groupchat=GroupChat(agents=[user_proxy,pm,engineer],messages=[],max_round=12,)manager=GroupChatManager(groupchat=groupchat,llm_config=llm_config)# 4) 启动任务:由 UserProxy 发起对话if__name__=="__main__":ifnotos.path.exists("workspace"):os.makedirs("workspace")task=("写一个简单的贪吃蛇游戏,使用 pygame 库。注意:""1. 必须提供一个无头模式(Headless)的自动化测试脚本(test_game.py),使用 SDL_VIDEODRIVER='dummy'。""2. 必须处理中文显示问题,确保 GUI 中不出现乱码。")user_proxy.initiate_chat(manager,message=task,)

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 隔离执行;本地执行务必限定工作目录并审查生成代码。