智能体大乱斗:CrewAI, LangGraph, AutoGen,哪个才是你的多智能体AI框架之王?

多智能体AI框架正成为构建复杂AI应用的新趋势。本文深度对比CrewAI、LangGraph和AutoGen这三大热门框架,从架构、易用性、记忆管理到人机协作等方面,为你揭示它们的独特之处与适用场景,助你找到最适合项目的“AI梦之队”。

阅读时长: 19 分钟
共 9486字
作者: eimoon.com

最近一年多,关于“多智能体系统(Multi-Agent Systems)”的讨论简直爆炸式增长,几乎成了 AI 领域最热的词儿之一。为什么呢?因为我们发现,光靠一个智能体(AI Agent)来搞定所有复杂的应用,往往力不从心。这就像你组建一支足球队,如果只有一个前锋,那进攻防守传球射门都他一个人干,效率能高吗?肯定不行!

所以,开发者们纷纷把目光投向了“组队协作”的模式:让多个智能体各司其职,像一个高效的团队一样协同工作,从而解决那些单一智能体难以应对的复杂问题。结果就是,我们能构建出更具适应性、更可靠的解决方案。

今天,咱们就来好好聊聊市面上最火的三个多智能体 AI 框架:CrewAILangGraphAutoGen。它们各自代表了一种独特的协调方式,有着各自的设计理念、优势和权衡。我的目标就是带你深入了解它们的异同,帮你明智地选择哪一个最适合你的项目。

准备好了吗?咱们开始这场“智能体框架大乱斗”!

什么是 AI Agent?

在深入框架之前,咱们先统一一下“智能体(AI Agent)”这个概念。

在我看来,在多智能体 AI 框架里,一个 Agent 不仅仅是一个简单的 LLM(大语言模型)的封装器,它更像是一个拥有灵魂的自主实体。它有:

  • 明确的角色(Role):就像公司里的“产品经理”、“研发工程师”。
  • 专属的工具(Tools):可以调用外部 API、搜索互联网、执行代码等。
  • 记忆能力(Memory):能记住过去的对话和经验。
  • 行为准则(Behaviors):遵循一套规则来做出决策和行动。

你可以把它想象成一个既能独立思考,又能协同合作的“迷你大脑”。它接收输入,进行推理,执行动作,并在必要时与其他 Agent 沟通。

比如,在一个内容创作团队中:

  • 一个 Agent 可能是“研究员”,负责收集数据和信息。
  • 另一个 Agent 可能是“分析师”,负责解读数据并提炼洞察。
  • 还有一个 Agent 可能是“编辑”,负责润色和整理最终报告。

它们共同组成了一个协作智能系统。

当然,Agent 并非万能药。如果你的工作流非常简单,比如只是从一个 API 获取数据并展示,那一个简单的脚本或单个 Agent 就能搞定,杀鸡焉用牛刀?多智能体系统真正的价值在于那些需要协调、专业分工或动态适应的复杂任务。

理解多智能体 AI 框架

多智能体框架将单个 Agent 的范式扩展到了支持协作、委托和自适应工作流的系统。它们真正实现了“协同智能”的理念,让不同的 Agent 专注于解决问题的一部分,并通过沟通协作来达成整体目标。这就像一个组织里的团队运作模式,每个专家各司其职,在某个协调层下共同努力。

这些框架的核心组成部分通常包括:

  • 状态管理(State Management):记录当前工作进度和环境。
  • 通信协议(Communication Protocols):Agent 之间如何“对话”。
  • 记忆系统(Memory Systems):这是重中之重!

聊到记忆,它允许 Agent 回顾过去的交互并做出明智的决策:

  • 短期记忆(Short-term Memory):让 Agent 在即时交互中保持上下文,记住“刚才”发生了什么。
  • 长期记忆(Long-term Memory):使 Agent 能够从过去的经验中学习,建立知识库,记住“以前”的教训。
  • 持久记忆(Persistent Memory):确保重要信息在系统重启后仍能保留,跨会话访问。

通过这些组件,多智能体框架支持灵活的架构,能够应对从工作流自动化到研究分析等一系列复杂问题。选择哪个框架,则取决于你的项目需要多少控制力、灵活性和可扩展性。

框架概览:CrewAI, LangGraph, AutoGen

对 Agent 和多智能体框架有了基本认识后,咱们来简要介绍一下今天的主角们:

CrewAI:这个框架的核心理念是“基于角色的协作”,它模拟真实组织结构。每个 Agent 都有明确的角色、职责,并能访问专属工具。这让它非常适合那种“团队协作式”的工作流。CrewAI 擅长任务导向型协作,尤其是在角色和职责清晰时能高效执行,内置支持常见的业务工作流模式。

LangGraph:它采用的是“基于图(Graph-based)的工作流设计”,将 Agent 交互视为有向图中的节点。这种架构为复杂的决策管道提供了卓越的灵活性,支持条件逻辑、分支工作流和动态适应。LangGraph 在需要复杂编排、多个决策点和并行处理能力的场景下表现出色。

AutoGen:则专注于“会话式 Agent 架构”,强调自然语言交互和动态角色扮演。它在创建灵活的、对话驱动的工作流方面表现突出,Agent 可以根据上下文动态调整角色。AutoGen 的强项在于快速原型开发和需要“人机协作(Human-in-the-Loop)”的场景,自然语言交互是核心。

Overview of CrewAI, LangGraph, and AutoGen

CrewAI、LangGraph 和 AutoGen 概览

深度对比:CrewAI vs LangGraph vs AutoGen

每个框架都以独特的角度处理多智能体编排。CrewAI 强调角色分配,LangGraph 强调工作流结构,而 AutoGen 强调对话。这些差异影响着开发者如何设计、管理和扩展他们的系统,因此在做选择前理解它们至关重要。

接下来,咱们从几个关键维度来深入剖析这些差异。

架构哲学

  • CrewAI:遵循“基于角色”的模型,智能体就像公司里的员工,有各自的职责。这让你能很直观地将工作流想象成一个团队协作的过程。
  • LangGraph:侧重于“基于图”的编排,工作流被表示为节点和边,实现了高度模块化和条件执行。你可以把它想象成一张精密的流程图。
  • AutoGen:走的路线截然不同,它将交互建模为 Agent 之间或 Agent 与人类之间的对话,创造了一种自然的对话驱动流程。

上手难度 (Ease of Use)

  • CrewAI:如果你习惯于思考“角色和任务”,那 CrewAI 会让你感觉非常直观。你只需要定义好 Agent 的目标和角色,然后让它们协作就行。
  • LangGraph:需要对图设计有更深入的理解,这可能会增加一些学习曲线,但一旦掌握,它能让你对工作流逻辑拥有极强的控制力。
  • AutoGen:其核心是对话,这使得它在启动小型项目时非常直接,并且对迭代开发保持了灵活性。

工具集成 (Supported Tools and Integrations)

  • CrewAI:提供与常见云服务和工具的内置集成,更偏向业务工作流。
  • LangGraph:作为 LangChain 生态系统的一部分,它拥有广泛的 API 和外部系统集成能力,几乎能与任何工具结合。
  • AutoGen:优先考虑在对话中使用工具,并且允许人类直接参与,这在迭代或需要大量审查的工作流中增强了灵活性。

记忆管理 (Memory Support and Types)

  • CrewAI:采用结构化的基于角色的记忆,并支持 RAG (检索增强生成),以提供上下文感知的 Agent 行为。它有短期、长期、实体和上下文记忆。
  • LangGraph:提供基于状态的记忆,并通过“检查点(Checkpointing)”机制保证工作流的连续性。
  • AutoGen:专注于基于对话的记忆,维护完整的对话历史,以支持多轮交互。每种方式都与其核心哲学保持一致。

结构化输出 (Structured Output)

  • CrewAI:通过其角色逻辑来强制结构化输出——Agent 产生与其定义职责相符的输出。
  • LangGraph:在这方面表现出色,其状态图可以强制执行严格的输出格式和状态转换。
  • AutoGen:由于更侧重对话,它产生的输出更为灵活,但一致性可能不如其他框架。

多智能体协作 (Multi-Agent Support)

这三个框架都支持多智能体能力,但协作模型有所不同:

  • CrewAI:侧重于角色分配,每个 Agent 都有明确定义的职责,让协作感觉像在一个结构化的团队环境中。
  • LangGraph:通过将每个 Agent 或函数视为图中的节点来启用工作流级别的协作,允许它们通过结构化状态转换和条件分支进行交互。
  • AutoGen:强调群聊模型,Agent 之间以及 Agent 与人类之间用自然语言对话,使协作更具动态性,但也更不可预测。

人机协作 (Human-in-the-Loop Features)

人类监督是这些框架的一个核心区别点:

  • CrewAI:将人工审查点直接集成到任务执行中,允许“主管”在任务继续之前审查或完善输出。
  • LangGraph:在其工作流图中提供了人机协作钩子,允许开发者暂停执行,收集用户输入,并从相同状态恢复。
  • AutoGen:使人类参与成为对话流程的一部分,用户代理(User Proxy Agent)可以在任何时候介入,引导或重定向对话。这种灵活性使得 AutoGen 在交互式或审查驱动型工作流中特别强大,而 CrewAI 和 LangGraph 则提供了更结构化的干预机制。

缓存与回溯 (Caching and Replay)

  • CrewAI:包含一个全面的工具缓存机制,内置错误处理以确保任务顺利运行。
  • LangGraph:支持节点级缓存,可以使用内存或 SQLite 等后端,并通过 LangGraph Studio 提供回放和调试功能。
  • AutoGen:专注于 LLM 缓存,可以使用磁盘或 Redis 等后端,实现 Agent 之间的共享缓存,从而节省成本并提高可复现性。

代码执行 (Code Execution)

  • CrewAI:通过分配给 Agent 的工具(如 CodeInterpreterTool)来实现代码执行,保持其基于角色的哲学。
  • LangGraph:允许在其图节点内执行原生和外部代码,为计算密集型工作流提供了更大的灵活性。
  • AutoGen:将执行直接集成到对话中,Agent(如 CodeExecutorAgent)可以作为对话的一部分运行和评估代码片段。

定制化能力 (Customizability)

  • CrewAI:在角色中心的范式内具有高度定制性。
  • LangGraph:提供最大的模块化,允许开发者设计具有条件逻辑的高度专业化工作流。
  • AutoGen:提供会话式灵活性,允许创造性的多智能体对话,尽管其结构不如其他两者正式。

可扩展性 (Scalability)

  • CrewAI:通过在定义角色内并行任务执行和 Agent 的水平复制来实现可扩展性。
  • LangGraph:从一开始就设计为可扩展的,因为基于图的工作流可以扩展到大型分布式系统。
  • AutoGen:通过会话分片和分布式聊天管理进行扩展,尽管这在维护会话上下文方面带来了独特的挑战,对超大规模应用的支持有限。

文档与社区 (Documentation and Community)

  • CrewAI:正在稳步建立开发者基础,涌现出更多角色驱动的项目,早期采用者也在分享实际用例。
  • LangGraph:受益于其所属的 LangChain 生态系统,拥有丰富的文档、教程和活跃的社区支持。
  • AutoGen:虽然不如其他两者成熟,但提供了清晰的文档、活跃的社区和大量的教程。

对比总结表格 (Comparison Table)

为了方便你做出选择,我将这些框架的关键差异总结成以下表格:

特性 CrewAI LangGraph AutoGen
架构 基于角色的组织结构 基于图的工作流(节点与边) 会话式多智能体交互
易用性 直观的角色分配 中等学习曲线(图设计) 简单的会话设置
记忆支持 基于角色的记忆(短/长/实体/上下文) 基于状态的记忆(短/长/检查点) 基于消息的记忆(短期/对话历史)
集成 云工具、业务工作流 LangChain 生态、平台/Studio 工具集成
多智能体支持
结构化输出 角色强制执行 强大的基于状态、严格格式 灵活
缓存与回放 工具缓存 节点级缓存 LLM 缓存
代码执行 基于工具 原生/外部 集成到对话中
人机协作
定制化 在角色范式内高度可定制 最大模块化、条件逻辑设计 会话式灵活性
可扩展性 任务并行化 分布式图执行 有限的大规模支持
文档与社区 开发者基础增长中 LangChain 生态系统成熟、活跃 清晰文档、稳步增长

如何选择?

  • 选择 CrewAI:如果你的项目天然地适合“角色和职责”模式(比如一个研究员把工作交给一个写作者)。它对团队协作式工作流非常直观,支持结构化记忆,并且很容易插入人工审查点。
  • 选择 LangGraph:如果你需要带有分支逻辑的复杂编排。其基于图的设计非常适合自适应工作流、条件执行,以及那些可能需要扩展到分布式系统的项目。
  • 选择 AutoGen:如果你想要对话驱动的协作,并且需要灵活的人机协作。它在迭代任务、头脑风暴或需要大量审查的工作流中表现出色,因为自然语言是其组织原则。

了解了高层级的对比后,咱们再来深入看看每个框架的具体细节和代码示例。

CrewAI 深度解析

CrewAI 的核心思想就是“组织”这个比喻。Agent 被视为员工,每个都有自己的角色和责任。例如,一个 Agent 可能是“研究员”,负责收集数据;另一个 Agent 可能是“写作者”,负责撰写报告。这种分工使得 CrewAI 在那些角色和职责自然存在的场景中非常直观。

CrewAI Architecture CrewAI 架构

CrewAI 的记忆系统也反映了这种组织结构。每个 Agent 都维护着特定角色的记忆,包括任务上下文、实体关系和累积的知识。它支持多层记忆:用于即时任务上下文的短期记忆、用于跨会话洞察的长期记忆、用于跟踪人物和概念的实体记忆,以及将所有内容联系在一起的上下文记忆。这种结构化方法意味着研究员 Agent 可以随着时间积累知识,而写作者 Agent 则可以保持自己的写作风格偏好和历史记录。

人机协作支持也是内置的,允许“主管”在任务进行之前批准或修改 Agent 的输出。

下面是一个简单的 CrewAI 代码片段,定义了一个研究 Agent 和一个写作者 Agent:

from crewai import Agent, Task, Crew
import os

# 环境配置(请替换为你的实际API Key和模型信息)
# os.environ["OPENAI_API_KEY"] = "your-openai-api-key"
# os.environ["OPENAI_API_BASE"] = "https://api.openai.com/v1" # 或者你的其他提供商API地址
# os.environ["OPENAI_MODEL_NAME"] = "gpt-4o-mini" # 或你选择的模型

# 假设我们使用自定义的配置,这里为了示例方便,直接设置API KEY
# 实际项目中建议使用环境变量或配置文件管理
# 请确保你的OpenAI API Key已配置在环境变量中,或者在这里直接设置
# os.environ["OPENAI_API_KEY"] = "sk-..." 

# 定义智能体
researcher = Agent(
    role="Researcher",
    goal="Gather comprehensive information on various AI frameworks",
    backstory="An expert in technical research and summarization, known for digging deep.",
    # verbose=True, # 开启详细日志,方便调试
    # allow_delegation=False, # 是否允许代理任务给其他Agent
)

writer = Agent(
    role="Writer",
    goal="Prepare clear, well-structured, and engaging technical reports",
    backstory="A skilled technical writer who can explain complex concepts clearly and concisely.",
    # verbose=True,
    # allow_delegation=False,
)

# 定义任务
research_task = Task(
    description="Find detailed information on CrewAI, LangGraph, and AutoGen. Focus on their core philosophies, architectural differences, and primary use cases.",
    expected_output="A structured summary of each framework, including their strengths, weaknesses, and a list of key features.",
    agent=researcher,
    # output_file="output/research_notes.md", # 可以将输出保存到文件
    human_input=True # 允许人工审查
)

writing_task = Task(
    description="Based on the research notes, write a comprehensive article section comparing the three frameworks. The tone should be informative yet engaging.",
    expected_output="A readable, clear, and well-structured article section (in Markdown format) comparing CrewAI, LangGraph, and AutoGen.",
    agent=writer,
    # output_file="output/final_article.md",
    human_input=True # 允许人工审查
)

# 创建一个智能体团队 (Crew)
crew = Crew(
    agents=[researcher, writer],
    tasks=[research_task, writing_task],
    # verbose=2, # 显示更详细的运行日志
)

# 运行团队
# result = crew.kickoff()
# print(result)

在这个工作流中,“研究员”Agent 负责收集信息并生成结构化的笔记,人类可以介入审查或完善这些笔记,然后再继续。接着,“写作者”Agent 将这些笔记转化为一篇精美的文章片段,同样允许可选的人工审查。CrewAI 协调整个过程,确保 Agent 遵循其角色,同时人类在关键检查点保持控制。这感觉就像一个小型编辑团队在协作——这正是 CrewAI 旨在建模的场景。

CrewAI 还引入了 Flows,它补充了 Crews,提供更细粒度的工作流控制。Crews 代表着自主协作的 Agent 团队,而 Flows 则是事件驱动的、生产就绪的管道,用于管理执行路径、状态和分支逻辑。这意味着你可以将 Crews 中自主决策的灵活性与 Flows 中结构化编排的精确性相结合。

与 CrewAI 强调角色和职责的协作方式不同,LangGraph 更侧重于结构和逻辑,将工作流视为图中相互连接的节点。

LangGraph 深度解析

LangGraph 采用了一种不同的方法,它将工作流表示为节点图。每个节点可以是一个 Agent、一个函数或一个决策点。该系统支持条件分支,能够根据结果进行动态适应。这使得 LangGraph 在编排复杂的决策管道方面非常强大,其中任务依赖于先前的结果。

LangGraph Branching Architecture

LangGraph 分支架构

LangGraph 还提供了强大的记忆功能,作为图状态的一部分运行。短期记忆在活动线程中持续存在,并可以在任何节点设置检查点,允许工作流暂停和恢复。长期记忆存储用户特定或应用程序级别的数据,可以在不同的工作流执行中持久存在。这种基于状态的方法使其在复杂工作流中特别强大,其中一个节点的决策会影响后续节点的行为,甚至跨越不同的会话。

LangGraph Memory System

LangGraph 记忆系统

LangGraph Studio,其可视化开发环境,进一步简化了这些工作流的构建和调试。

LangGraph Studio

LangGraph Studio

这是一个 LangGraph 代码片段,它设置了一个包含两个 Agent 的工作流:一个研究节点(负责收集信息)和一个分析节点(负责解释结果)。

from langchain_openai import ChatOpenAI
from typing import Annotated
from typing_extensions import TypedDict
import os
from langchain.schema import HumanMessage
from langgraph.graph import StateGraph, START, END
from langgraph.graph.message import add_messages

# 环境配置(请替换为你的实际API Key)
# os.environ["OPENAI_API_KEY"] = "your-api-key"
# 确保你的OpenAI API Key已配置在环境变量中,或者在这里直接设置
# os.environ["OPENAI_API_KEY"] = "sk-..." 


llm = ChatOpenAI(
    model="gpt-4o-mini",
    temperature=0.7 # 设置生成温度
)

# 定义图的状态
class State(TypedDict):
    messages: Annotated[list, add_messages] # 使用add_messages来管理对话历史

# 定义由LLM驱动的节点
def research_node(state: State):
    """研究代理:使用LLM收集信息。"""
    print("---进入研究节点---")
    prompt = "你是一个研究员。请收集详细信息。\n用户查询: "
    user_query = state["messages"][-1].content # 获取最新的用户消息
    response = llm.invoke(prompt + user_query)
    return {"messages": [response]} # 将LLM的响应添加到消息列表中

def analysis_node(state: State):
    """分析代理:使用LLM分析研究结果。"""
    print("---进入分析节点---")
    research_output = state["messages"][-1].content # 获取最新的研究输出
    prompt = "你是一个分析师。请根据这份研究提供洞察:\n"
    response = llm.invoke(prompt + research_output)
    return {"messages": [response]}

# 构建图
graph_builder = StateGraph(State)

# 添加节点
graph_builder.add_node("Research", research_node)
graph_builder.add_node("Analysis", analysis_node)

# 添加边(工作流顺序)
graph_builder.add_edge(START, "Research") # 从开始节点到研究节点
graph_builder.add_edge("Research", "Analysis") # 从研究节点到分析节点
graph_builder.add_edge("Analysis", END) # 从分析节点到结束节点

# 编译图
graph = graph_builder.compile()

# 运行工作流
if __name__ == "__main__":
    initial_messages = [HumanMessage(content="请起草一份关于CrewAI、LangGraph和AutoGen的对比分析。")]
    result = graph.invoke({"messages": initial_messages})
    
    print(f"\n研究和分析完成。结果: {result}")

    print("\n最终报告:")
    for msg in result["messages"]:
        print(f"{type(msg).__name__}: {msg.content}")

# 可视化图(需要安装graphviz)
# from IPython.display import Image, display
# display(Image(graph.get_graph().draw_png()))

Research-Analysis Workflow 研究-分析工作流

在这个工作流中,“研究”节点收集关于用户查询的原始信息,而“分析”节点则基于这些结果构建洞察。边定义了执行顺序,一旦研究完成,图会自动将输出路由到分析师。这展示了 LangGraph 如何将工作流形式化为模块化图,使得设计每个步骤都依赖于前一步结果的管道变得更容易。与 CrewAI 的角色比喻或 AutoGen 的自由对话不同,LangGraph 让你对 Agent 如何协作拥有细粒度的结构控制。

LangGraph 强调结构化工作流,而 AutoGen 则将对话作为组织原则。

AutoGen 深度解析

AutoGen 强调对话。它将工作流建模为 Agent 之间,有时甚至 Agent 与人类之间的对话。这种会话式方法对于需要迭代推理、协商或监督的任务特别有用。例如,一个 Agent 可能会提出一个解决方案,另一个可能会对其进行批评,而人类主管可能会介入指导讨论。

Autogen Architecture AutoGen 架构

AutoGen 的记忆是以对话为中心的,存储完整的对话历史以在多轮交互中保持上下文。这种基于消息的记忆允许 Agent 引用对话的早期部分并在此基础上进行构建。虽然比其他框架的结构化记忆更简单,但这种方法在自然对话流程驱动工作流的场景中表现出色,并且 Agent 需要保持对整个对话上下文的感知。

它的 RoundRobinGroupChat 功能特别强大,允许多个 Agent 轮流协作,每个响应都广播给所有参与者,从而使整个团队保持一致的上下文。这种设计使得实现反思模式变得容易,即一个 Agent 创建草稿,另一个进行评估或批判。

下面是一个 AutoGen 代码片段,它设置了一个包含写作者、审查员和用户代理的群聊:

import asyncio
from autogen.agentchat.conditions import TextMentionTermination
from autogen.agentchat.agents import UserProxyAgent, AssistantAgent
from autogen.agentchat.conditions import MaxMessageTermination
from autogen.agentchat.messages import TextMessage
from autogen.oai.client import OpenAIClient # 修改此处,OpenAIChatCompletionClient现在是OpenAIClient
from autogen.agentchat.groupchat import GroupChat, GroupChatManager # 修改此处,RoundRobinGroupChat现在是GroupChat和GroupChatManager
from autogen.agentchat.contrib.web_surfer import WebSurferAgent # 引入WebSurferAgent
# from autogen.agentchat.ui import Console # 如果需要控制台UI,可能需要单独安装autogen_ui

async def simple_multi_agent_chat():
    # Model client
    # OpenAIClient现在支持配置多个模型,这里简化为一个
    model_client = OpenAIClient(config_list=[{"model": "gpt-4o", "api_key": os.environ["OPENAI_API_KEY"]}])

    # Writer agent
    writer = AssistantAgent(
        "Writer",
        llm_config={"config_list": [{"model": "gpt-4o", "api_key": os.environ["OPENAI_API_KEY"]}]},
        system_message=(
            "You are a professional writer. "
            "Always respond with a detailed draft when asked. "
            "If you need to search for information, ask the WebSurferAgent to help."
        ),
    )

    # Reviewer agent
    reviewer = AssistantAgent(
        "Reviewer",
        llm_config={"config_list": [{"model": "gpt-4o", "api_key": os.environ["OPENAI_API_KEY"]}]},
        system_message=(
            "You are a reviewer who critiques drafts and suggests improvements. "
            "Your feedback should be constructive and detailed. "
            "If you need to verify facts, ask the WebSurferAgent to help."
        ),
    )

    # WebSurferAgent for browsing
    web_surfer = WebSurferAgent(
        "WebSurfer",
        llm_config={"config_list": [{"model": "gpt-4o", "api_key": os.environ["OPENAI_API_KEY"]}]},
        system_message="You are a web browsing expert. When asked to search, use your tools to find relevant information and summarize it concisely.",
        # browser_config={"browser_type": "chromium"}, # 默认使用playwright,需要安装
        # max_tasks=3, # 限制同时进行的任务数量
    )

    # User proxy agent
    user_proxy = UserProxyAgent(
        "User",
        code_execution_config={"work_dir": "coding"}, # 允许代码执行
        is_termination_msg=lambda x: x.get("content", "").rstrip().endswith("TERMINATE"),
        human_input_mode="ALWAYS", # 总是让人类参与
    )

    # Termination conditions
    # termination = MaxMessageTermination(max_messages=8) # 可以保留,或者依赖GroupChat的max_rounds
    text_termination = TextMentionTermination("TERMINATE") # 当消息包含"TERMINATE"时终止

    # Group chat with Writer, Reviewer, WebSurfer, and User
    groupchat = GroupChat(
        agents=[writer, reviewer, web_surfer, user_proxy],
        messages=[],
        max_rounds=10, # 限制最大轮次
        speaker_selection_method="auto", # 自动选择下一个说话的Agent
        # allow_repeat_speaker=False, # 是否允许重复发言
    )
    manager = GroupChatManager(groupchat=groupchat, llm_config={"config_list": [{"model": "gpt-4o", "api_key": os.environ["OPENAI_API_KEY"]}]})


    # Run the group chat
    print("---开始群聊---")
    chat_result = await user_proxy.a_initiate_chat(
        manager,
        message=TextMessage(
            content="请起草一份关于CrewAI、LangGraph和AutoGen的对比分析。在撰写前,请WebSurferAgent搜索最新的信息。",
            # source=user_proxy.name, # autogen新版本可能不需要这个
        ),
    )
    print("---群聊结束---")
    print(chat_result.summary)

if __name__ == "__main__":
    # 请确保你的OPENAI_API_KEY环境变量已设置
    if "OPENAI_API_KEY" not in os.environ:
        print("请设置环境变量 OPENAI_API_KEY")
    else:
        asyncio.run(simple_multi_agent_chat())

在这个工作流中,“写作者”Agent 负责生成草稿,“审查员”Agent 评估草稿并提供反馈,“用户代理”Agent 代表人类参与者。GroupChat 确保每个参与者轮流发言,保持讨论的结构化。终止条件,例如消息限制或特定关键词(TERMINATE),让你能够控制聊天的结束时机。这种设置展示了 AutoGen 的会话式优势:Agent 动态协作,而人类可以在任何阶段介入进行监督或指导。

实际应用场景 (Use Case Scenarios and Applications)

在考虑哪个框架最适合你的项目时,我通常会把它们与问题的性质联系起来。

  • 如果我需要简单的工作流自动化,并且角色明确,例如一个“数据抓取器”Agent 将结果交给一个“写作者”Agent,那么 CrewAI 是最自然的匹配。它的组织化比喻与此类场景完美契合。

  • 对于需要分支逻辑的复杂决策管道LangGraph 表现出色。想象一下编排一个多步骤的客户支持系统,其中路径取决于问题类型或升级级别等条件。LangGraph 基于图的设计非常适合这些自适应工作流。

  • 最后,对于人机协作系统AutoGen 闪耀光芒。如果我正在构建一个协作研究助手,Agent 们一起头脑风暴,而人类进行监督,那么 AutoGen 的会话式架构会让我觉得非常自然和有效。

技术实现考量 (Technical Implementation Considerations)

从实现角度来看,性能、可扩展性和集成是至关重要的。

  • CrewAI 通过水平 Agent 复制和角色层级内的任务并行化来扩展。
  • LangGraph 通过分布式图执行和并行节点处理来实现扩展。
  • AutoGen 通过会话分片和分布式聊天管理进行扩展,尽管这在维护会话上下文方面带来了独特的挑战。

集成是另一个因素。LangGraph 受益于更广泛的 LangChain 生态系统,而 AutoGen 专注于会话接口,可能需要额外的抽象层才能进行传统的 API 集成。CrewAI 通过其结构化的基于角色的工作流方法,可以很好地与现有业务系统集成。

企业级应用与生产就绪 (Enterprise and Production Readiness)

在企业环境中,许可和合规性不容忽视。

  • CrewAI 提供商业许可和企业支持选项。
  • LangGraph,由 LangChain 支持,提供企业级支持和咨询服务。
  • AutoGen 通过其与 Azure AI 服务的集成,提供 Microsoft 支持。

同样重要的是部署灵活性

  • CrewAI 可以部署在本地或云端,适用于对数据治理有严格要求的组织。
  • LangGraph 的架构与现有企业系统和 API 无缝集成,并提供两项互补服务:用于工作流设计和调试的 LangGraph Studio,以及用于大规模管理部署的 LangGraph Platform。
  • AutoGen 得益于与 Microsoft 的原生联系,使其成为已投入 Azure 生态系统的团队的自然选择。它还提供仍在开发中的 Autogen Studio,一个用于快速原型开发的低代码界面。

最终,每个框架都提供了不同的部署路径,正确的选择取决于组织是否优先考虑本地控制、模块化集成或无缝云采用。

总结 (Conclusion)

通过这篇指南,我们深入探讨了多智能体 AI 框架的基础,并探索了 CrewAI、LangGraph 和 AutoGen 这三种截然不同的方法。

  • CrewAI 以其基于角色的协作脱颖而出。
  • LangGraph图驱动的编排中大放异彩。
  • AutoGen 则在会话式、人机协作系统中蓬勃发展。

最重要的启示是:没有哪个框架是绝对优越的。选择取决于你的项目需求。如果你看重结构化的角色,CrewAI 可能是你的菜;如果你的工作流需要自适应的分支逻辑,LangGraph 会很好地为你服务;如果你希望 Agent 以对话方式协作,AutoGen 则提供了一个灵活的环境。

我强烈建议你亲自尝试每个框架。了解它们优缺点的最佳方式就是构建一些小原型,看看它们在你的特定任务中表现如何。通过实践,你会发现哪个框架最适合你的工作流,哪个又最符合你的长期目标。

祝你在 AI Agent 的世界里玩得开心,创造出令人惊叹的智能应用!

转载自:datacamp

关于

关注我获取更多资讯

公众号
📢 公众号
个人号
💬 个人号
使用 Hugo 构建
主题 StackJimmy 设计