Chenyj Space
返回博客
·34 分钟

AI Agent 框架对比:LangChain vs AutoGen vs CrewAI

AI Agent框架对比LangChainAutoGenCrewAIAI

框架概览

当前主流的 AI Agent 框架各有特色:

  • LangChain:最成熟的 LLM 应用开发框架
  • AutoGen:微软出品的多智能体框架
  • CrewAI:专注于角色扮演的 Agent 框架
  • LlamaIndex:数据框架,擅长 RAG
  • Semantic Kernel:微软的企业级 AI 编排框架

LangChain

核心特点

python
from langchain.agents import AgentExecutor, create_openai_functions_agent
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI

# LangChain 的核心抽象
class LangChainFeatures:
    """LangChain 核心特性"""
    
    def __init__(self):
        # 1. 模型抽象
        self.llm = ChatOpenAI(model="gpt-4o")
        
        # 2. 提示模板
        self.prompt = ChatPromptTemplate.from_messages([
            ("system", "你是一个有用的助手"),
            ("human", "{input}")
        ])
        
        # 3. 输出解析
        self.chain = self.prompt | self.llm | StrOutputParser()
        
        # 4. 工具集成
        self.tools = self.load_tools()
        
        # 5. 记忆系统
        self.memory = ConversationBufferMemory()

优势

  • 生态系统成熟,社区活跃
  • 文档完善,学习资源丰富
  • 支持多种 LLM 提供商
  • 丰富的组件和集成
  • LCEL 表达式语言强大

劣势

  • 抽象层次多,学习曲线陡
  • 多智能体支持相对弱
  • 配置复杂

适用场景

python
# 适合场景
scenarios = {
    "RAG 应用": "检索增强生成",
    "对话系统": "聊天机器人、客服",
    "文档处理": "PDF、网页解析",
    "工具调用": "API 集成、代码执行",
    "单 Agent 应用": "个人助手、问答系统"
}

代码示例

python
from langchain.agents import AgentExecutor, create_openai_functions_agent
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder

# 创建 Agent
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个有用的助手,可以使用工具来完成任务。"),
    MessagesPlaceholder(variable_name="chat_history", optional=True),
    ("human", "{input}"),
    MessagesPlaceholder(variable_name="agent_scratchpad")
])

agent = create_openai_functions_agent(
    llm=ChatOpenAI(model="gpt-4o"),
    tools=tools,
    prompt=prompt
)

executor = AgentExecutor(
    agent=agent,
    tools=tools,
    verbose=True,
    handle_parsing_errors=True
)

# 使用
result = executor.invoke({"input": "帮我搜索最新的 AI 新闻"})

AutoGen

核心特点

python
from autogen import AssistantAgent, UserProxyAgent, GroupChat, GroupChatManager

# AutoGen 的核心抽象
class AutoGenFeatures:
    """AutoGen 核心特性"""
    
    def __init__(self):
        # 1. Agent 类型
        self.assistant = AssistantAgent(
            name="assistant",
            llm_config={"model": "gpt-4o"}
        )
        
        self.user_proxy = UserProxyAgent(
            name="user",
            human_input_mode="ALWAYS"
        )
        
        # 2. 群聊系统
        self.group_chat = GroupChat(
            agents=[self.assistant, self.user_proxy],
            messages=[],
            max_round=20
        )
        
        # 3. 代码执行
        self.code_executor = UserProxyAgent(
            name="executor",
            code_execution_config={"work_dir": "workspace"}
        )

优势

  • 原生多智能体支持
  • 灵活的对话模式
  • 内置代码执行
  • 人类参与无缝集成
  • 企业级可靠性

劣势

  • 相对较新,生态较小
  • 学习资源较少
  • 配置相对复杂

适用场景

python
# 适合场景
scenarios = {
    "软件开发团队": "多角色协作开发",
    "研究助手": "多专家协作研究",
    "内容创作": "策划-写作-审核流程",
    "复杂任务": "需要多步骤、多角色协作的任务",
    "人机协作": "需要人类监督和反馈的场景"
}

代码示例

python
from autogen import AssistantAgent, UserProxyAgent, GroupChat, GroupChatManager

# 创建团队
coder = AssistantAgent(
    name="coder",
    llm_config={"model": "gpt-4o"},
    system_message="你是 Python 专家,负责编写代码。"
)

reviewer = AssistantAgent(
    name="reviewer",
    llm_config={"model": "gpt-4o"},
    system_message="你是代码审查专家,负责审查代码质量。"
)

user = UserProxyAgent(
    name="user",
    human_input_mode="ALWAYS"
)

# 创建群聊
group_chat = GroupChat(
    agents=[coder, reviewer, user],
    messages=[],
    max_round=15,
    speaker_selection_method="auto"
)

manager = GroupChatManager(
    groupchat=group_chat,
    llm_config={"model": "gpt-4o"}
)

# 启动协作
user.initiate_chat(
    manager,
    message="请写一个 Python 函数实现快速排序,并让 reviewer 审查"
)

CrewAI

核心特点

python
from crewai import Agent, Task, Crew, Process

# CrewAI 的核心抽象
class CrewAIFeatures:
    """CrewAI 核心特性"""
    
    def __init__(self):
        # 1. 角色定义
        self.researcher = Agent(
            role="研究员",
            goal="搜索和分析最新信息",
            backstory="你是一个经验丰富的研究员",
            verbose=True,
            llm="gpt-4o"
        )
        
        # 2. 任务定义
        self.research_task = Task(
            description="研究 AI Agent 的最新发展",
            expected_output="详细的研究报告",
            agent=self.researcher
        )
        
        # 3. 团队协作
        self.crew = Crew(
            agents=[self.researcher],
            tasks=[self.research_task],
            process=Process.sequential
        )

优势

  • 角色扮演直观
  • 任务编排灵活
  • 人类反馈支持
  • 学习曲线平缓
  • 代码简洁

劣势

  • 相对较新
  • 功能相对简单
  • 社区较小

适用场景

python
# 适合场景
scenarios = {
    "内容创作": "博客、文章、报告",
    "市场研究": "竞品分析、趋势研究",
    "产品规划": "需求分析、功能设计",
    "教育培训": "课程设计、学习计划",
    "简单协作": "2-5 个角色的协作任务"
}

代码示例

python
from crewai import Agent, Task, Crew, Process

# 定义角色
researcher = Agent(
    role="高级研究员",
    goal="发现和分析最新的 AI 技术趋势",
    backstory="""你是一位在 AI 领域工作了 10 年的资深研究员。
    你擅长从大量信息中提取关键洞察。""",
    verbose=True,
    allow_delegation=False,
    llm="gpt-4o"
)

writer = Agent(
    role="技术作家",
    goal="将复杂的技术概念转化为易懂的文章",
    backstory="""你是一位经验丰富的技术作家。
    你的文章以清晰、准确著称。""",
    verbose=True,
    llm="gpt-4o"
)

# 定义任务
research_task = Task(
    description="研究 2024 年 AI Agent 领域的最新进展",
    expected_output="一份包含 5-10 个关键发现的研究报告",
    agent=researcher
)

writing_task = Task(
    description="根据研究报告撰写一篇技术博客文章",
    expected_output="一篇 1000-2000 字的技术博客",
    agent=writer,
    context=[research_task]  # 依赖研究任务的结果
)

# 创建团队
crew = Crew(
    agents=[researcher, writer],
    tasks=[research_task, writing_task],
    process=Process.sequential,  # 顺序执行
    verbose=True
)

# 执行
result = crew.kickoff()
print(result)

框架对比

功能对比

python
comparison = {
    "LangChain": {
        "多Agent支持": "★★★☆☆",
        "RAG支持": "★★★★★",
        "工具集成": "★★★★★",
        "学习曲线": "★★★★☆ (陡)",
        "社区生态": "★★★★★",
        "代码执行": "★★★☆☆",
        "人类参与": "★★★☆☆",
        "企业就绪": "★★★★☆"
    },
    "AutoGen": {
        "多Agent支持": "★★★★★",
        "RAG支持": "★★★☆☆",
        "工具集成": "★★★★☆",
        "学习曲线": "★★★★☆ (陡)",
        "社区生态": "★★★☆☆",
        "代码执行": "★★★★★",
        "人类参与": "★★★★★",
        "企业就绪": "★★★★★"
    },
    "CrewAI": {
        "多Agent支持": "★★★★☆",
        "RAG支持": "★★★☆☆",
        "工具集成": "★★★★☆",
        "学习曲线": "★★☆☆☆ (平)",
        "社区生态": "★★☆☆☆",
        "代码执行": "★★☆☆☆",
        "人类参与": "★★★★☆",
        "企业就绪": "★★★☆☆"
    }
}

性能对比

python
performance = {
    "响应速度": {
        "LangChain": "快(单 Agent)",
        "AutoGen": "中等(多 Agent 通信开销)",
        "CrewAI": "快(简单任务)"
    },
    "扩展性": {
        "LangChain": "好(模块化设计)",
        "AutoGen": "优秀(分布式支持)",
        "CrewAI": "一般(轻量级)"
    },
    "可靠性": {
        "LangChain": "高(成熟稳定)",
        "AutoGen": "高(微软支持)",
        "CrewAI": "中等(发展中)"
    }
}

代码复杂度对比

python
# LangChain:单 Agent 任务
from langchain.agents import create_openai_functions_agent, AgentExecutor

langchain_code = """
prompt = ChatPromptTemplate.from_messages([...])
agent = create_openai_functions_agent(llm, tools, prompt)
executor = AgentExecutor(agent=agent, tools=tools)
result = executor.invoke({"input": "task"})
"""
# 复杂度:中等

# AutoGen:多 Agent 协作
autogen_code = """
agent1 = AssistantAgent(name="a1", ...)
agent2 = AssistantAgent(name="a2", ...)
user = UserProxyAgent(...)
group_chat = GroupChat(agents=[agent1, agent2, user], ...)
manager = GroupChatManager(groupchat=group_chat, ...)
user.initiate_chat(manager, message="task")
"""
# 复杂度:中等

# CrewAI:角色扮演
crewai_code = """
agent = Agent(role="...", goal="...", backstory="...")
task = Task(description="...", agent=agent)
crew = Crew(agents=[agent], tasks=[task])
result = crew.kickoff()
"""
# 复杂度:低

选型指南

选择 LangChain 如果:

python
reasons_to_choose_langchain = [
    "需要强大的 RAG 功能",
    "需要集成多种外部工具和 API",
    "需要成熟的生态系统和社区支持",
    "团队有 LLM 应用开发经验",
    "项目需要长期维护和迭代"
]

# 典型应用场景
langchain_use_cases = [
    "智能客服系统",
    "知识库问答",
    "文档分析工具",
    "API 聚合服务",
    "个人 AI 助手"
]

选择 AutoGen 如果:

python
reasons_to_choose_autogen = [
    "需要多个 AI Agent 协作",
    "需要人类参与决策过程",
    "需要执行生成的代码",
    "需要复杂的工作流编排",
    "需要企业级可靠性"
]

# 典型应用场景
autogen_use_cases = [
    "软件开发团队模拟",
    "多专家协作系统",
    "自动化代码审查",
    "研究助手系统",
    "复杂决策支持系统"
]

选择 CrewAI 如果:

python
reasons_to_choose_crewai = [
    "需要直观的角色扮演",
    "团队是 LLM 应用新手",
    "需要快速原型开发",
    "任务相对简单(2-5 个角色)",
    "需要简洁的 API"
]

# 典型应用场景
crewai_use_cases = [
    "内容创作团队",
    "市场研究助手",
    "产品规划助手",
    "教育培训系统",
    "简单的工作流自动化"
]

混合使用

LangChain + AutoGen

python
from langchain.tools import Tool
from autogen import AssistantAgent, register_function

# 将 LangChain 工具用于 AutoGen
langchain_search_tool = Tool(
    name="search",
    func=search_function,
    description="搜索工具"
)

# 在 AutoGen 中使用
assistant = AssistantAgent(
    name="assistant",
    llm_config={"model": "gpt-4o"}
)

register_function(
    langchain_search_tool.func,
    caller=assistant,
    executor=executor,
    name=langchain_search_tool.name,
    description=langchain_search_tool.description
)

LangChain + CrewAI

python
from langchain_openai import ChatOpenAI
from crewai import Agent

# 使用 LangChain 的 LLM 配置
llm = ChatOpenAI(model="gpt-4o", temperature=0.7)

# 在 CrewAI 中使用
researcher = Agent(
    role="研究员",
    goal="研究 AI 趋势",
    backstory="你是 AI 研究专家",
    llm=llm  # 传入 LangChain LLM 实例
)

最佳实践

1. 明确需求

python
def choose_framework(requirements):
    """根据需求选择框架"""
    if requirements.get("multi_agent"):
        if requirements.get("code_execution"):
            return "AutoGen"
        elif requirements.get("role_playing"):
            return "CrewAI"
    
    if requirements.get("rag_focus"):
        return "LangChain"
    
    if requirements.get("simple_tasks"):
        return "CrewAI"
    
    return "LangChain"  # 默认选择

2. 渐进式采用

python
# 阶段 1:从简单开始
from langchain.chains import LLMChain
chain = LLMChain(llm=llm, prompt=prompt)

# 阶段 2:添加工具
from langchain.agents import AgentExecutor
agent = create_openai_functions_agent(llm, tools, prompt)

# 阶段 3:添加记忆
from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory()

# 阶段 4:多 Agent(如需要)
from autogen import GroupChat
group_chat = GroupChat(agents=[...])

3. 模块化设计

python
class ModularAgentSystem:
    """模块化 Agent 系统"""
    
    def __init__(self):
        # 核心组件
        self.llm = self.create_llm()
        self.tools = self.create_tools()
        self.memory = self.create_memory()
        
        # Agent 层
        self.agents = self.create_agents()
        
        # 编排层
        self.orchestrator = self.create_orchestrator()
    
    def create_llm(self):
        """创建 LLM"""
        return ChatOpenAI(model="gpt-4o")
    
    def create_tools(self):
        """创建工具"""
        return [search_tool, calculator_tool, ...]
    
    def create_memory(self):
        """创建记忆"""
        return ConversationBufferMemory()
    
    def create_agents(self):
        """创建 Agent"""
        return {
            "researcher": ResearchAgent(),
            "writer": WriterAgent(),
            "reviewer": ReviewerAgent()
        }
    
    def create_orchestrator(self):
        """创建编排器"""
        return GroupChatManager(...)

总结

框架最佳场景学习曲线社区推荐度
LangChainRAG、工具集成、单Agent中等★★★★★
AutoGen多Agent协作、代码执行★★★★☆
CrewAI角色扮演、简单任务平缓★★★☆☆

选择建议:

  • 新手入门:从 CrewAI 开始
  • RAG 应用:选择 LangChain
  • 多 Agent 协作:选择 AutoGen
  • 企业级应用:LangChain + AutoGen 组合

延伸阅读