AI Agent 开发学习 --- 构建软件团队智能体(二)

软件开发团队 Agent:架构设计

1. AutoGen 简介

AutoGen (全称 AutoGen - Multi-Agent Conversation Framework)是微软开源的多智能体对话框架 ,用于构建基于大语言模型(LLM)的协作式应用。支持多个智能体通过对话协作,可配置人机参与方式与发言顺序,与 OpenAI 及兼容 API 集成良好。本案例基于 AutoGen GroupChat 的「群聊 + 管理器」模式,实现需求分析 → 编码 → 代码审查 → 用户测试的固定顺序轮询协作。

1.1 框架结构的演进

新架构最显著的变化是清晰的分层异步优先的设计理念。

  • 分层设计:框架拆分为两个核心模块:

    • autogen-core:底层基础,封装与语言模型交互、消息传递等核心功能,保证框架稳定性与扩展性。
    • autogen-agentchat :构建于 core 之上,提供开发对话式智能体应用的高级接口,简化多智能体应用开发。
      上述分层使各组件职责明确,降低系统耦合度。
  • 异步优先:新架构全面采用异步编程(async/await)。多智能体协作中,网络请求(如调用 LLM API)是主要耗时操作;异步模式在等待某一智能体响应时可处理其他任务,避免线程阻塞,提升并发能力与资源利用效率。

1.2 核心智能体组件

智能体是执行任务的基本单元,在 0.7.4 及新版本中设计更加专注和模块化。

组件 说明
AssistantAgent(助理智能体) 任务的主要解决者,封装 LLM,根据对话历史生成回复(如提出计划、撰写文章或编写代码)。通过不同的**系统提示词(System Message)**可赋予不同「专家」角色。
UserProxyAgent(用户代理智能体) 兼具双重角色:作为人类用户的「代言人」发起任务、传达意图;作为「执行器」可配置为执行代码或调用工具,并将结果反馈给其他智能体。清晰区分「思考」(由 AssistantAgent 完成)与「行动」。

1.3 从 GroupChatManager 到 Team(轮询群聊)

多智能体协作需要协调对话流程。早期版本由 GroupChatManager 承担;新架构引入更灵活的 Team / 群聊 概念,例如 RoundRobinGroupChat

  • RoundRobinGroupChat(轮询群聊):按预定义顺序依次让智能体发言,适用于流程固定的任务(如:产品经理提需求 → 工程师写代码 → 审查员检查)。
  • 工作流
    1. 创建 RoundRobinGroupChat 实例,将所有参与智能体加入。
    2. 任务开始时,群聊按预设顺序依次激活对应智能体。
    3. 被选中的智能体根据当前对话上下文生成回复。
    4. 群聊将新回复加入对话历史,并激活下一名智能体。
    5. 重复直至达到最大轮次或满足终止条件。

2. 案例目标

本案例演示如何用 AutoGenautogen.agentchat)构建一个轮询协作的软件开发流水线:

  • 需求分析 → 编码 → 代码审查 → 用户测试,四角色按固定顺序轮流发言,直至用户确认完成或达到最大轮数。
  • 每个智能体有明确的系统提示词与职责边界,通过群聊消息传递需求、代码与反馈。
  • 终止条件:用户代理在回复中输入 TERMINATE ,或达到 max_round(默认 20 轮)。

默认任务为「比特币价格显示应用」(Streamlit + 实时价格与涨跌),可替换为任意开发需求描述。


3. 本案例架构:组件与职责

本案例采用 AutoGen GroupChat 的「群聊 + 管理器」模式(与 1.3 节 RoundRobinGroupChat 的轮询理念一致),按组件职责划分如下,不单独抽象框架分层:

组件 职责 实现
编排层 创建智能体、配置群聊与终止逻辑、启动对话 software_team_agent.pyrun_software_development_team()
智能体层 四类角色:产品经理、工程师、代码审查员、用户代理 agents.pyAssistantAgent × 3 + UserProxyAgent × 1
模型配置层 从环境变量生成 LLM 配置,供 AutoGen 使用 model_client.pyget_llm_config()

3.1 编排层 (Orchestration)

  • 入口run_software_development_team(task=DEFAULT_TASK) 或对外暴露的 run(task=...)
  • 流程
    1. 调用 get_llm_config() 得到 llm_config(API Key、Base URL、模型 ID、temperature)。
    2. 使用 agents.py 中的工厂函数创建四名智能体:ProductManager、Engineer、CodeReviewer、UserProxy。
    3. 构建 GroupChat(agents, messages=[], max_round=20, speaker_selection_method="round_robin")
    4. 使用 GroupChatManager(groupchat, llm_config, is_termination_msg=_is_terminate) 作为「下一个发言人」的决策者(本案例中轮询由 round_robin 固定顺序体现)。
    5. 通过 user_proxy.initiate_chat(manager, message=task) 以用户代理发起对话,将 task 作为首条消息传入群聊。
  • 终止判断_is_terminate(msg) 检查消息内容中是否包含字符串 TERMINATE(大小写不敏感),用于用户代理在测试通过后结束协作。

3.2 智能体层 (Agents)

四名智能体均来自 autogen.agentchat

角色 类型 职责与系统提示词要点
ProductManager AssistantAgent 需求分析、功能模块划分、技术选型、优先级与验收标准;完成后说「请工程师开始实现」。
Engineer AssistantAgent 根据需求编写完整可运行代码(Python/Streamlit 等),带注释与错误处理;完成后说「请代码审查员检查」。
CodeReviewer AssistantAgent 代码质量、安全性、最佳实践、错误处理审查;提供修改建议;完成后说「代码审查完成,请用户代理测试」。
UserProxy UserProxyAgent 代表用户提出需求、验证结果、给出反馈;human_input_mode="ALWAYS" 表示每轮需用户输入;code_execution_config=False 不执行代码;在确认通过后输入 TERMINATE。

所有 AssistantAgent 共用同一套 llm_config;UserProxy 不调用 LLM,仅转发用户输入并参与轮询。

3.3 模型配置层 (Model Client)

  • 文件model_client.py
  • 函数get_llm_config() 从环境变量读取 LLM_API_KEY(或 OPENAI_API_KEY)、LLM_BASE_URL(或 OPENAI_API_BASE)、LLM_MODEL_ID(默认 gpt-4o),通过 autogen.oai.openai_utils.get_config_list 生成 config_list,并返回包含 config_listmodeltemperature 的字典,供 AssistantAgentGroupChatManager 使用。

4. 协作流程示意

复制代码
用户 / UserProxy 发起任务 (task)
        ↓
GroupChatManager 按 round_robin 选择下一个发言人
        ↓
ProductManager → 需求分析,输出「请工程师开始实现」
        ↓
Engineer → 输出代码与说明,输出「请代码审查员检查」
        ↓
CodeReviewer → 输出审查意见,输出「请用户代理测试」
        ↓
UserProxy → 等待用户输入(确认或反馈)
        ↓
若用户输入包含 TERMINATE → 结束;否则继续轮询,直至 max_round 或再次 TERMINATE

发言顺序由 speaker_selection_method="round_robin" 与智能体在 GroupChat.agents 中的顺序共同决定,因此会按 ProductManager → Engineer → CodeReviewer → UserProxy 循环。


5. 与三国狼人杀架构的对比(可选参考)

维度 软件开发团队 Agent 三国狼人杀 Agent
框架 AutoGen GroupChat + GroupChatManager 自研 MsgHub + fanout_pipeline(仅参考 AgentScope 架构思想,未直接依赖 AgentScope 框架)
流程驱动 轮询 + 终止词(TERMINATE) 消息驱动的阶段编排(夜晚/白天)
角色 4 个固定角色,顺序轮询 N 个玩家 + 主持人,按阶段选择参与方
输出约束 无结构化输出,依赖提示词中的自然语言约定 Pydantic 结构化输出约束各阶段行为
用户参与 UserProxy 每轮需人工输入 可无人参与,纯多智能体推演

6. 如何运行

项目地址:https://github.com/winchesHe/AI-Agent

bash 复制代码
# 在项目根目录
python -m src.scripts.run_software_team
# 或
python src/scripts/run_software_team.py

运行后会提示输入开发任务(直接回车则使用默认「比特币价格显示应用」);每轮 UserProxy 发言时会等待用户在控制台输入,确认通过时输入 TERMINATE 结束。

需在 .env 中配置 LLM_API_KEY(或 OPENAI_API_KEY)、LLM_BASE_URL(或 OPENAI_API_BASE)、LLM_MODEL_ID


7. 代码结构速览

复制代码
src/core/agent/software_team_agent/
├── __init__.py           # 包导出(通常暴露 run)
├── software_team_agent.py # 编排:GroupChat、GroupChatManager、run、_is_terminate、DEFAULT_TASK
├── agents.py              # 四角色:create_product_manager / create_engineer / create_code_reviewer / create_user_proxy
└── model_client.py        # get_llm_config(),依赖 autogen.oai.openai_utils

src/scripts/
└── run_software_team.py   # 独立运行脚本,调用 core.agent.software_team_agent.run

8. 依赖说明

  • autogen-agentchat (旧版 autogen.agentchat API):GroupChat、GroupChatManager、AssistantAgent、UserProxyAgent。
  • autogen-ext[openai]:与 OpenAI 兼容 API 的集成。
  • 模型配置通过 autogen.oai.openai_utils.get_config_list 生成,与项目内其他使用 OpenAI 兼容接口的模块共用同一套环境变量。

9. 框架优劣势分析

任何技术框架都有其适用场景与设计权衡。以下从本案例出发,客观分析 AutoGen 的核心优势及在实际应用中可能面临的局限与挑战。

9.1 优势

  • 对话式建模,降低任务建模门槛

    无需为智能体团队设计复杂的状态机或控制流,而是将完整软件开发流程自然映射为产品经理、工程师、审查员之间的对话,更贴近人类团队协作。开发者可聚焦于定义「谁(角色)」与「做什么(职责)」,而非「如何做(流程控制)」。

  • 角色专业化与可复用

    通过系统提示词(System Message)为每个智能体赋予高度专业化角色(如 ProductManager 专注需求,CodeReviewer 专注质量)。精心设计的智能体可在不同项目中复用,易于维护与扩展。

  • 流程可预测与人类在环

    对流程化任务,RoundRobinGroupChat 等机制提供清晰、可预测的协作顺序。UserProxyAgent 为「人类在环」(Human-in-the-loop)提供天然接口:既可发起任务,也可作为监督者与最终验收者,确保自动化系统处于人类监督之下。

  • 与 OpenAI 生态一致

    使用 get_config_list、环境变量等与项目内其他 LLM 调用方式统一,便于维护与接入。

9.2 局限性

  • LLM 不确定性与流程偏离

    RoundRobinGroupChat 虽提供顺序化流程,但基于 LLM 的对话具有不确定性。智能体可能产生偏离预期的回复,导致对话走向意外分支,甚至陷入循环。

  • 对话式调试困难

    当智能体团队输出未达预期时,调试往往棘手。与传统程序不同,难以获得清晰错误堆栈,而是长串对话历史,形成「对话式调试」难题。

  • 流程与终止的刚性

    本案例采用固定轮询顺序,难以按阶段或条件动态选人;终止依赖用户在 UserProxy 轮次输入 TERMINATE,无法仅靠逻辑条件自动结束。若需严格解析输出,需额外结合 Pydantic 等结构化手段。

  • API 与版本

    基于旧版 autogen.agentchat 时,框架升级需关注 API 迁移与兼容性。

相关推荐
程序员佳佳2 小时前
2025 AI 架构演进:从 Open Claw 到 GPT-5.3,如何用“向量引擎”解决大模型调用的“最后一公里”?
人工智能·gpt·架构·数据分析·aigc·api
Mr.Cheng.2 小时前
【InternVL2-2B】MLLM内部架构学习笔记
笔记·学习·自然语言处理
测试_AI_一辰2 小时前
AI系统测试实践:Tool执行与状态管理(Agent系统最容易出Bug的地方)
人工智能·ai·自动化·bug·ai编程
智慧地球(AI·Earth)2 小时前
OpenClaw设置教程之安全篇
人工智能·安全·openclaw
悠哉悠哉愿意2 小时前
【物联网学习笔记】串口接收
笔记·单片机·嵌入式硬件·物联网·学习
studyForMokey2 小时前
【跨端技术ReactNative】JavaScript学习
android·javascript·学习·react native·react.js
Be for thing2 小时前
Android 充电 & BMS 电池管理系统原理与测试实战(手机 / 手表通用)
android·学习·智能手机
JXSJHF2 小时前
告别云端依赖:2026年AI PC如何实现离线运行百亿参数模型
人工智能
财迅通Ai2 小时前
海立股份子公司参展AWE2026 以创新科技赋能行业转型升级
大数据·人工智能·物联网