AI Agent 框架对比:LangChain vs CrewAI vs AutoGen,我选了最冷门的那个
2026 年,AI Agent 框架百花齐放。我花了两个月时间测试了 5 个主流框架,最终选了一个很多人没听过的。
测试框架
| 框架 | Stars | 语言 | 特点 |
|------|-------|------|------|
| LangChain | 100K+ | Python/JS | 生态最全 |
| CrewAI | 25K+ | Python | 多 Agent 协作 |
| AutoGen | 35K+ | Python | 微软出品 |
| LlamaIndex | 40K+ | Python/JS | RAG 专精 |
| DSPy | 15K+ | Python | 编程式 Prompt |
测试项目
我用同一个项目测试所有框架:AI 客服系统
功能需求:
1. 理解用户问题
2. 查询知识库
3. 调用 API 获取订单信息
4. 生成回复
5. 处理投诉升级
LangChain
代码示例
from langchain.agents import create_react_agent, AgentExecutor
from langchain.tools import Tool
from langchain_openai import ChatOpenAI
# 定义工具
def search_knowledge_base(query: str) -> str:
"""搜索知识库"""
# 实现搜索逻辑
return results
def get_order_info(order_id: str) -> str:
"""获取订单信息"""
# 实现 API 调用
return order_data
tools = [
Tool(name="search_kb", func=search_knowledge_base, description="搜索知识库"),
Tool(name="get_order", func=get_order_info, description="获取订单信息"),
]
# 创建 Agent
llm = ChatOpenAI(model="gpt-4")
agent = create_react_agent(llm, tools, prompt)
executor = AgentExecutor(agent=agent, tools=tools)
# 运行
result = executor.invoke({"input": "我的订单 #12345 什么时候到?"})评价
优点:
- 生态最完善,工具最多
- 文档详细,社区活跃
- 支持多种 LLM
缺点:
- 抽象层太多,调试困难
- 版本更新频繁,API 不稳定
- 性能开销大
适合:快速原型,简单 Agent
CrewAI
代码示例
from crewai import Agent, Task, Crew
# 定义 Agent
researcher = Agent(
role="知识库研究员",
goal="准确回答用户的技术问题",
backstory="你是一个经验丰富的技术支持专家",
tools=[search_kb_tool],
llm="gpt-4"
)
order_specialist = Agent(
role="订单专员",
goal="查询和处理订单相关问题",
backstory="你是一个细心的订单处理专家",
tools=[get_order_tool],
llm="gpt-4"
)
manager = Agent(
role="客服经理",
goal="协调团队处理复杂投诉",
backstory="你是一个经验丰富的客服经理",
llm="gpt-4"
)
# 定义任务
research_task = Task(
description="搜索知识库回答:{question}",
agent=researcher,
expected_output="知识库中的相关信息"
)
order_task = Task(
description="查询订单 {order_id} 的状态",
agent=order_specialist,
expected_output="订单详细信息"
)
response_task = Task(
description="根据收集的信息生成回复",
agent=manager,
expected_output="给用户的回复"
)
# 创建团队
crew = Crew(
agents=[researcher, order_specialist, manager],
tasks=[research_task, order_task, response_task],
process="sequential"
)
# 运行
result = crew.kickoff(inputs={
"question": "我的订单什么时候到?",
"order_id": "12345"
})评价
优点:
- 多 Agent 协作设计优秀
- 角色定义直观
- 任务编排灵活
缺点:
- 只支持 Python
- 调试工具不完善
- 生产部署复杂
适合:多角色协作场景
AutoGen
代码示例
from autogen import AssistantAgent, UserProxyAgent
# 创建 Agent
assistant = AssistantAgent(
name="assistant",
llm_config={"model": "gpt-4"},
system_message="你是一个 AI 客服助手。"
)
order_agent = AssistantAgent(
name="order_agent",
llm_config={"model": "gpt-4"},
system_message="你是订单查询专家。",
code_execution_config=False
)
user_proxy = UserProxyAgent(
name="user_proxy",
human_input_mode="NEVER",
code_execution_config={"work_dir": "coding"},
is_termination_msg=lambda x: x.get("content", "").rstrip().endswith("TERMINATE")
)
# 注册函数
@user_proxy.register_for_execution()
@order_agent.register_for_llm(name="get_order", description="获取订单信息")
def get_order(order_id: str) -> dict:
# 实现 API 调用
return {"status": "shipped", "eta": "2026-07-15"}
# 创建群组
groupchat = autogen.GroupChat(
agents=[user_proxy, assistant, order_agent],
messages=[],
max_round=10
)
manager = autogen.GroupChatManager(groupchat=groupchat)
# 运行
user_proxy.initiate_chat(
manager,
message="我的订单 #12345 什么时候到?"
)评价
优点:
- 微软背书,质量有保障
- 多 Agent 对话设计好
- 代码执行能力强
缺点:
- 学习曲线陡
- 文档不够详细
- 只支持 Python
适合:研究项目,复杂对话
LlamaIndex
代码示例
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
from llama_index.core.agent import ReActAgent
from llama_index.core.tools import QueryEngineTool
# 加载知识库
documents = SimpleDirectoryReader("knowledge_base").load_data()
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine()
# 创建工具
kb_tool = QueryEngineTool(
query_engine=query_engine,
metadata=ToolMetadata(
name="knowledge_base",
description="搜索产品知识库"
)
)
# 创建 Agent
agent = ReActAgent.from_tools(
[kb_tool, order_tool],
llm=OpenAI(model="gpt-4"),
verbose=True
)
# 运行
response = agent.chat("我的订单 #12345 什么时候到?")评价
优点:
- RAG 能力最强
- 索引和检索优化好
- 支持多种数据源
缺点:
- Agent 能力相对弱
- 复杂场景需要额外开发
- 性能调优复杂
适合:知识库问答,RAG 场景
DSPy
代码示例
import dspy
# 配置
lm = dspy.OpenAI(model="gpt-4")
dspy.settings.configure(lm=lm)
# 定义签名
class CustomerService(dspy.Signature):
"""AI 客服助手"""
question = dspy.InputField(desc="用户问题")
context = dspy.InputField(desc="相关知识库内容")
order_info = dspy.InputField(desc="订单信息(如有)")
answer = dspy.OutputField(desc="给用户的回复")
# 定义模块
class CustomerServiceAgent(dspy.Module):
def __init__(self):
self.retrieve = dspy.Retrieve(k=3)
self.generate = dspy.ChainOfThought(CustomerService)
def forward(self, question, order_id=None):
# 检索知识库
context = self.retrieve(question).passages
# 获取订单信息
order_info = get_order_info(order_id) if order_id else "无"
# 生成回复
result = self.generate(
question=question,
context=context,
order_info=order_info
)
return result.answer
# 运行
agent = CustomerServiceAgent()
response = agent("我的订单什么时候到?", order_id="12345")评价
优点:
- 编程式 Prompt,可组合
- 自动优化 Prompt
- 可测试性强
缺点:
- 概念新颖,学习成本高
- 生态不如 LangChain
- 社区较小
适合:需要精确控制 Prompt 的场景
最终选择
经过两个月的测试,我最终选择了 DSPy。
为什么选 DSPy
1. 可测试性:每个模块都可以独立测试
2. 可组合性:像搭积木一样组合功能
3. 自动优化:可以自动优化 Prompt
4. 类型安全:输入输出都有明确定义
生产环境配置
import dspy
from dspy.teleprompt import BootstrapFewShot
# 配置生产 LLM
lm = dspy.OpenAI(
model="gpt-4",
max_tokens=2000,
temperature=0.1
)
dspy.settings.configure(lm=lm)
# 准备训练数据
trainset = [
dspy.Example(
question="退货政策是什么?",
answer="我们提供 30 天无理由退货..."
).with_inputs("question"),
# 更多样本...
]
# 优化 Agent
optimizer = BootstrapFewShot(metric=customer_service_metric)
optimized_agent = optimizer.compile(CustomerServiceAgent(), trainset=trainset)
# 保存优化后的 Agent
optimized_agent.save("production_agent.json")总结
| 框架 | 推荐场景 | 不推荐场景 |
|------|---------|-----------|
| LangChain | 快速原型 | 生产环境 |
| CrewAI | 多角色协作 | 简单任务 |
| AutoGen | 研究项目 | 时间紧迫 |
| LlamaIndex | RAG 应用 | 非知识库场景 |
| DSPy | 生产环境 | 快速原型 |
我的建议:
- 快速验证 → LangChain
- 知识库问答 → LlamaIndex
- 生产部署 → DSPy
测试时间:2026年5月-7月
测试项目:AI 客服系统
代码行数:约 15,000 行
#AIAgent #LangChain #CrewAI #DSPy #框架对比
读者评论 2