·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(...)
总结
| 框架 | 最佳场景 | 学习曲线 | 社区 | 推荐度 |
|---|---|---|---|---|
| LangChain | RAG、工具集成、单Agent | 中等 | 大 | ★★★★★ |
| AutoGen | 多Agent协作、代码执行 | 陡 | 中 | ★★★★☆ |
| CrewAI | 角色扮演、简单任务 | 平缓 | 小 | ★★★☆☆ |
选择建议:
- 新手入门:从 CrewAI 开始
- RAG 应用:选择 LangChain
- 多 Agent 协作:选择 AutoGen
- 企业级应用:LangChain + AutoGen 组合
延伸阅读: