为了帮助大家快速上手智能体,我整理了200多套扣子智能体工作流成品(传送门),可一键复制源代码+搭建工作流基础到高级教程,工作流源码和教程都已打包。包含效率与数据处理、内容创作与视频生成、数字人与形象生成、学习与知识管理、实用工具集,一定会大幅提升你的学习工作效率(PS:记得转存到自己的空间)。工作流中的部分功能调用了外部插件,可能需要获取授权(api_token),可以登录速推AIGC平台,到个人中心查看插件的API密钥。

框架一:AutoGen 核心机制与实战

正如前文所述,AutoGen 的设计哲学根植于"以对话驱动协作"。它巧妙地将复杂的任务解决流程,映射为不同角色的智能体之间的一系列自动化对话。基于这一核心理念,AutoGen 框架持续演进。我们将以 0.7.4 版本为例,因为它是截止目前为止最新版本,代表了一次重要的架构重构,从类继承设计转向了更灵活的组合式架构。为了深入理解并应用这一框架,我们首先需要讲解其最核心的构成要素与底层的对话交互机制。

AutoGen 的核心机制

0.7.4 版本的发布是 AutoGen 发展的一个重要节点,它标志着框架在底层设计上的一次根本性革新。这次更新并非简单的功能叠加,而是对整体架构的重新思考,旨在提升框架的模块化、并发性能和开发者体验。

AutoGen架构图

图 6.1 AutoGen架构图

(1)框架结构的演进

如图6.1所示,新架构最显著的变化是引入了清晰的分层和异步优先的设计理念。

  • 分层设计: 框架被拆分为两个核心模块:
    • autogen-core:作为框架的底层基础,封装了与语言模型交互、消息传递等核心功能。它的存在保证了框架的稳定性和未来扩展性。
    • autogen-agentchat:构建于 core 之上,提供了用于开发对话式智能体应用的高级接口,简化了多智能体应用的开发流程。 这种分层策略使得各组件职责明确,降低了系统的耦合度。
  • 异步优先: 新架构全面转向异步编程 (async/await)。在多智能体协作场景中,网络请求(如调用 LLM API)是主要耗时操作。异步模式允许系统在等待一个智能体响应时处理其他任务,从而避免了线程阻塞,显著提升了并发处理能力和系统资源的利用效率。

(2)核心智能体组件

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

  • AssistantAgent (助理智能体): 这是任务的主要解决者,其核心是封装了一个大型语言模型(LLM)。它的职责是根据对话历史生成富有逻辑和知识的回复,例如提出计划、撰写文章或编写代码。通过不同的系统消息(System Message),我们可以为其赋予不同的“专家”角色。
  • UserProxyAgent (用户代理智能体): 这是 AutoGen 中功能独特的组件。它扮演着双重角色:既是人类用户的“代言人”,负责发起任务和传达意图;又是一个可靠的“执行器”,可以配置为执行代码或调用工具,并将结果反馈给其他智能体。这种设计清晰地区分了“思考”(由 AssistantAgent 完成)与“行动”。

(3)从 GroupChatManager 到 Team

当任务需要多个智能体协作时,就需要一个机制来协调对话流程。在早期版本中,GroupChatManager 承担了这一职责。而在新架构中,引入了更灵活的 Team 或群聊概念,例如 RoundRobinGroupChat

  • 轮询群聊 (RoundRobinGroupChat): 这是一种明确的、顺序化的对话协调机制。它会让参与的智能体按照预定义的顺序依次发言。这种模式非常适用于流程固定的任务,例如一个典型的软件开发流程:产品经理先提出需求,然后工程师编写代码,最后由代码审查员进行检查。
  • 工作流:
    1. 首先,创建一个 RoundRobinGroupChat 实例,并将所有参与协作的智能体(如产品经理、工程师等)加入其中。
    2. 当一个任务开始时,群聊会按照预设的顺序,依次激活相应的智能体。
    3. 被选中的智能体根据当前的对话上下文进行响应。
    4. 群聊将新的回复加入对话历史,并激活下一个智能体。
    5. 这个过程会持续进行,直到达到最大对话轮次或满足预设的终止条件。

通过这种方式,AutoGen 将复杂的协作关系,简化为一个流程清晰、易于管理的自动化“圆桌会议”。开发者只需定义好每个团队成员的角色和发言顺序,剩下的协作流程便可由群聊机制自主驱动。

软件开发团队实战

在理解了 AutoGen 的核心组件与对话机制后,本节将通过一个完整的实战案例来具体展示如何应用这些新特性。我们将构建一个模拟的软件开发团队,该团队由多个具有不同专业技能的智能体组成,它们将协作完成一个真实的软件开发任务。

(1)业务目标

我们的目标是开发一个功能明确的 Web 应用:实时显示比特币当前价格。这个任务虽小,却完整地覆盖了软件开发的典型环节:从需求分析、技术选型、编码实现到代码审查和最终测试。这使其成为检验 AutoGen 自动化协作流程的理想场景。

(2)智能体团队角色

为了模拟真实的软件开发流程,我们设计了四个职责分明的智能体角色:

  • ProductManager (产品经理): 负责将用户的模糊需求转化为清晰、可执行的开发计划。
  • Engineer (工程师): 依据开发计划,负责编写具体的应用程序代码。
  • CodeReviewer (代码审查员): 负责审查工程师提交的代码,确保其质量、可读性和健壮性。
  • UserProxy (用户代理): 代表最终用户,发起初始任务,并负责执行和验证最终交付的代码。

这种角色划分是多智能体系统设计中的关键一步,它将一个复杂任务分解为多个由领域“专家”处理的子任务。

(3)核心代码实现

下面,我们将分步解析这个自动化团队的核心代码。

模型客户端配置
所有基于 LLM 的智能体都需要一个模型客户端来与语言模型进行交互。AutoGen 0.7.4 提供了标准化的 OpenAIChatCompletionClient,它可以方便地与任何兼容 OpenAI API 规范的模型服务(包括 OpenAI 官方服务、Azure OpenAI 以及本地模型服务如 Ollama等)进行对接。

我们通过一个独立的函数来创建和配置模型客户端,并通过环境变量管理 API Key 和服务地址,这是一种良好的工程实践,增强了代码的灵活性和安全性。

from autogen_ext.models.openai import OpenAIChatCompletionClient
import os

def create_openai_model_client():
    """创建并配置 OpenAI 模型客户端"""
    return OpenAIChatCompletionClient(
        model=os.getenv("LLM_MODEL_ID", "gpt-4o"),
        api_key=os.getenv("LLM_API_KEY"),
        base_url=os.getenv("LLM_BASE_URL", "https://api.openai.com/v1")
    )
       

智能体角色的定义
定义智能体的核心在于编写高质量的系统消息 (System Message)。系统消息就像是给智能体设定的“行为准则”和“专业知识库”,它精确地规定了智能体的角色、职责、工作流程,甚至是与其他智能体交互的方式。一个精心设计的系统消息是确保多智能体系统能够高效、准确协作的关键。在我们的软件开发团队中,我们为每一个角色都创建了一个独立的函数来封装其定义。

产品经理 (ProductManager)
产品经理负责启动整个流程。它的系统消息不仅定义了其职责,还规范了其输出的结构,并包含了引导对话转向下一环节(工程师)的明确指令。

from autogen_agentchat.agents import AssistantAgent

def create_product_manager(model_client):
    """创建产品经理智能体"""
    system_message = """你是一位经验丰富的产品经理,专门负责软件产品的需求分析和项目规划。

你的核心职责包括:
1. **需求分析**:深入理解用户需求,识别核心功能和边界条件
2. **技术规划**:基于需求制定清晰的技术实现路径
3. **风险评估**:识别潜在的技术风险和用户体验问题
4. **协调沟通**:与工程师和其他团队成员进行有效沟通

当接到开发任务时,请按以下结构进行分析:
1. 需求理解与分析
2. 功能模块划分
3. 技术选型建议
4. 实现优先级排序
5. 验收标准定义

请简洁明了地回应,并在分析完成后说"请工程师开始实现"。"""

    return AssistantAgent(
        name="ProductManager",
        model_client=model_client,
        system_message=system_message,
    )

工程师 (Engineer)
工程师的系统消息聚焦于技术实现。它列举了工程师的技术专长,并规定了其在接收到任务后的具体行动步骤,同样也包含了引导流程转向代码审查员的指令。

def create_engineer(model_client):
    """创建软件工程师智能体"""
    system_message = """你是一位资深的软件工程师,擅长 Python 开发和 Web 应用构建。

你的技术专长包括:
1. **Python 编程**:熟练掌握 Python 语法和最佳实践
2. **Web 开发**:精通 Streamlit、Flask、Django 等框架
3. **API 集成**:有丰富的第三方 API 集成经验
4. **错误处理**:注重代码的健壮性和异常处理

当收到开发任务时,请:
1. 仔细分析技术需求
2. 选择合适的技术方案
3. 编写完整的代码实现
4. 添加必要的注释和说明
5. 考虑边界情况和异常处理

请提供完整的可运行代码,并在完成后说"请代码审查员检查"。"""

    return AssistantAgent(
        name="Engineer",
        model_client=model_client,
        system_message=system_message,
    )

代码审查员 (CodeReviewer)
代码审查员的定义则侧重于代码的质量、安全性和规范性。它的系统消息详细列出了审查的重点和流程,确保了代码交付前的质量关卡。

def create_code_reviewer(model_client):
    """创建代码审查员智能体"""
    system_message = """你是一位经验丰富的代码审查专家,专注于代码质量和最佳实践。

你的审查重点包括:
1. **代码质量**:检查代码的可读性、可维护性和性能
2. **安全性**:识别潜在的安全漏洞和风险点
3. **最佳实践**:确保代码遵循行业标准和最佳实践
4. **错误处理**:验证异常处理的完整性和合理性

审查流程:
1. 仔细阅读和理解代码逻辑
2. 检查代码规范和最佳实践
3. 识别潜在问题和改进点
4. 提供具体的修改建议
5. 评估代码的整体质量

请提供具体的审查意见,完成后说"代码审查完成,请用户代理测试"。"""

    return AssistantAgent(
        name="CodeReviewer",
        model_client=model_client,
        system_message=system_message,
    )

用户代理 (UserProxy)
UserProxyAgent 是一个特殊的智能体,它不依赖 LLM 进行回复,而是作为用户在系统中的代理。它的 description 字段清晰地描述了其职责,尤其重要的是,它负责在任务最终完成后发出 TERMINATE 指令,以正常结束整个协作流程。

from autogen_agentchat.agents import UserProxyAgent

def create_user_proxy():
    """创建用户代理智能体"""
    return UserProxyAgent(
        name="UserProxy",
        description="""用户代理,负责以下职责:
1. 代表用户提出开发需求
2. 执行最终的代码实现
3. 验证功能是否符合预期
4. 提供用户反馈和建议

完成测试后请回复 TERMINATE。""",
    )

通过这四个独立的定义函数,我们不仅构建了一支功能完备的“虚拟团队”,也展示了通过系统消息进行“提示工程” ,是设计高效多智能体应用的核心环节。

定义团队协作流程
在本案例中,软件开发的流程是相对固定的(需求->编码->审查->测试),因此 RoundRobinGroupChat (轮询群聊) 是理想的选择。我们按照业务逻辑顺序,将四个智能体加入到参与者列表中。

from autogen_agentchat.teams import RoundRobinGroupChat
from autogen_agentchat.conditions import TextMentionTermination

# 定义团队聊天和协作规则
team_chat = RoundRobinGroupChat(
    participants=[
        product_manager,
        engineer,
        code_reviewer,
        user_proxy
    ],
    termination_condition=TextMentionTermination("TERMINATE"),
    max_turns=20,
)
  • 参与者顺序: participants 列表的顺序决定了智能体发言的先后次序。

  • 终止条件: termination_condition 是控制协作流程何时结束的关键。这里我们设定,当任何消息中包含关键词 “TERMINATE” 时,对话便结束。在我们的设计中,这个指令由 UserProxy 在完成最终测试后发出。

  • 最大轮次: max_turns 是一个安全阀,用于防止对话陷入无限循环,避免不必要的资源消耗。

启动与运行
由于 AutoGen 0.7.4 采用异步架构,整个协作流程的启动和运行都在一个异步函数中完成,并最终通过 asyncio.run() 来执行。

import asyncio
from autogen_agentchat.ui import Console

async def run_software_development_team():
    # ... 初始化客户端和智能体 ...
    
    # 定义任务描述
    task = """我们需要开发一个比特币价格显示应用,具体要求如下:
            核心功能:
            - 实时显示比特币当前价格(USD)
            - 显示24小时价格变化趋势(涨跌幅和涨跌额)
            - 提供价格刷新功能

            技术要求:
            - 使用 Streamlit 框架创建 Web 应用
            - 界面简洁美观,用户友好
            - 添加适当的错误处理和加载状态

            请团队协作完成这个任务,从需求分析到最终实现。"""
    
    # 异步执行团队协作,并流式输出对话过程
    result = await Console(team_chat.run_stream(task=task))
    return result

# 主程序入口
if __name__ == "__main__":
    result = asyncio.run(run_software_development_team())

当程序运行时,task 作为初始消息被传入 team_chat,产品经理作为第一个参与者接收到该消息,随后整个自动化协作流程便开始了。
(4)预期协作效果

当我们运行这个软件开发团队时,可以观察到一个完整的协作流程:

🔧 正在初始化模型客户端...
👥 正在创建智能体团队...
🚀 启动 AutoGen 软件开发团队协作...
============================================================
---------- TextMessage (user) ----------
我们需要开发一个比特币价格显示应用,具体要求如下:
...
请团队协作完成这个任务,从需求分析到最终实现。
---------- TextMessage (ProductManager) ----------
### 1. 需求理解与分析
...
请工程师开始实现。
---------- TextMessage (Engineer) ----------
### 技术方案实施
...
请代码审查员检查。
---------- TextMessage (CodeReviewer) ----------
### 代码审查
...
代码审查完成,请用户代理测试。    
---------- TextMessage (UserProxy) ----------
已经完成需求
---------- TextMessage (ProductManager) ----------
太好了,感谢您的反馈!如果在使用过程中有任何问题,或者有其他功能需求和改进建议,请随时告知我们。我们会持续提供支持和改进。期待您对我们的应用
有愉快的使用体验!
---------- TextMessage (Engineer) ----------
很高兴听到项目顺利完成。如果您或用户有任何问题或者需要帮助,请随时联系我们。感谢您对我们工作的支持,让我们一起确保应用稳定运行并不断优化用户
体验!
---------- TextMessage (CodeReviewer) ----------
非常感谢大家的努力与协作,使得项目能够顺利完成。未来若有更多技术支持的需求或者需要改进的地方,我们愿意为项目的持续优化贡
献力量。期待用户能够享受到流畅的体验,同时也欢迎提出更多的反馈与建议。再次感谢团队的合作!
---------- TextMessage (UserProxy) ----------
Enter your response: TERMINATE
============================================================
✅ 团队协作完成!

📋 协作结果摘要:
- 参与智能体数量:4- 任务完成状态:成功

整个协作过程展现了 AutoGen 框架的优势:自然的对话驱动协作、角色专业化分工、流程自动化管理和完整的开发闭环。
AutoGen 的优势与局限性分析

任何技术框架都有其特定的适用场景和设计权衡。在本节中,我们将客观地分析 AutoGen 的核心优势及其在实际应用中可能面临的局限性与挑战。
(1)优势

  • 如案例所示,我们无需为智能体团队设计复杂的状态机或控制流逻辑,而是将一个完整的软件开发流程,自然地映射为产品经理、工程师和审查员之间的对话。这种方式更贴近人类团队的协作模式,显著降低了为复杂任务建模的门槛。开发者可以将更多精力聚焦于定义“谁(角色)”以及“做什么(职责)”,而非“如何做(流程控制)”。

  • 框架允许通过系统消息(System Message)为每个智能体赋予高度专业化的角色。在案例中,ProductManager 专注于需求,而 CodeReviewer 则专注于质量。一个精心设计的智能体可以在不同项目中被复用,易于维护和扩展。

  • 对于流程化任务,RoundRobinGroupChat 这样机制提供了清晰、可预测的协作流程。同时,UserProxyAgent 的设计为“人类在环”(Human-in-the-loop)提供了天然的接口。它既可以作为任务的发起者,也可以是流程的监督者和最终的验收者。这种设计确保了自动化系统始终处于人类的监督之下。

(2)局限性

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

  • 当智能体团队的工作结果未达预期时,调试过程可能非常棘手。与传统程序不同,我们得到的不是清晰的错误堆栈,而是一长串的对话历史。这被称为“对话式调试”的难题。

(3)非 OpenAI 模型的配置补充

如果你想使用非 OpenAI 系列的模型(如 DeepSeek、通义千问等),在 0.7.4 版本中需要在 OpenAIChatCompletionClient 的参数中传入模型信息字典。以 DeepSeek 为例:

from autogen_ext.models.openai import OpenAIChatCompletionClient

model_client = OpenAIChatCompletionClient(
    model="deepseek-chat",
    api_key=os.getenv("DEEPSEEK_API_KEY"),
    base_url="https://api.deepseek.com/v1",
    model_info={
        "function_calling": True,
        "max_tokens": 4096,
        "context_length": 32768,
        "vision": False,
        "json_output": True,
        "family": "deepseek",
        "structured_output": True,
    }
)

这个 model_info 字典帮助 AutoGen 了解模型的能力边界,从而更好地适配不同的模型服务。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐