6个主流Python智能体框架对比
我空出一个周末,安装了所有六个主流框架,在每个框架中构建了相同的Agent。相同的任务。相同的模型。相同的工具。相同的评估标准。
微信 ezpoda免费咨询:AI编程 | AI模型微调| AI私有化部署
AI模型价格对比 | AI工具导航 | ONNX模型库 | Tripo 3D | Meshy AI | ElevenLabs | KlingAI | ArtSpace | Phot.AI | InVideo
上个月,我的团队需要为一个客户项目选择一个Agent框架。一个文档分析管道——从PDF中提取数据,与数据库交叉引用,生成摘要,通过邮件发送结果。在2026年,这是相当标准的东西。
我在Twitter上问了该用哪个框架,这是一个错误。
一小时内我收到了47条回复,每条都自信地推荐不同的工具。其中一半互相矛盾。有人说LangGraph是"过度设计的垃圾",有人说它是"唯一严肃的选择"。第三个人说两者都错了,我应该直接使用原始API调用。
于是我做了任何理智的人都会做的事。我空出一个周末,安装了所有六个主流框架,在每个框架中构建了相同的Agent。相同的任务。相同的模型。相同的工具。相同的评估标准。
以下是我发现的——这不是任何一方的狂热粉丝想听到的。
0、实验设置:我实际构建了什么
任务: 一个研究Agent,接收公司名称,搜索网络获取近期新闻,提取关键财务数据点,与本地SQLite数据库交叉引用,生成结构化的JSON摘要。三个工具,一个Agent,一个输出模式。
模型: 在所有六个框架中使用GPT-4o(尽可能使用——稍后详述)。
测量指标: 实现所需的代码行数、每次运行的token使用量(10次运行平均)、平均延迟、从零到工作原型所需时间,以及我称之为"凌晨2点调试分数"的东西——当出现问题时,弄清楚出了什么问题的容易程度。因为问题总会发生。
1、LangGraph:控制狂的天堂
代码行数: ~210
首次工作Agent所需时间: 3小时
每次运行平均token数: 2,847
LangGraph是一群分布式系统工程师构建Agent框架的产物。你定义状态。你定义节点。你在它们之间绘制边。你编译它。这感觉不像是在构建AI Agent,而更像是在设计数据管道。
我这样说是在夸奖。
学习曲线在第一小时就狠狠地打击了我。我盯着StateGraph、add_node、add_conditional_edges,心想:*对于一个三工具的Agent来说,这仪式太多了。*我几乎放弃并转向下一个框架。
但后来有什么东西点击了。当我的Agent失败时——它确实失败了,在第三个测试查询时惨败——我打开LangSmith,一步步观察整个执行跟踪。我能准确看到哪个节点做出了错误决策,它持有什么状态,以及为什么它选择在搜索工具之前调用数据库工具。
没人谈论的杀手级特性: 持久化执行。如果你的Agent在运行中崩溃,它会从上一个检查点恢复。对于一个周末实验,这很好。对于一个通宵处理10,000份文档的生产管道?这是睡觉和凌晨3点被叫醒的区别。
LangGraph在我的测试中token消耗最低。图形结构迫使你明确控制流程,这意味着LLM浪费更少的token来决定下一步做什么——你已经告诉它了。
缺点: 你需要预先真正思考你的工作流程。没有"只是抛出指令然后希望"。如果你的问题定义明确,LangGraph会奖励你。如果你还在原型设计阶段,不知道工作流程长什么样,你会花更多时间画图而不是构建功能。
凌晨2点调试分数:9/10。 LangSmith是真家伙。我在这里诊断问题的速度比任何其他框架都快。
2、CrewAI:快速原型机器
代码行数: ~340
首次工作Agent所需时间: 45分钟
每次运行平均token数: 4,216
CrewAI是当你告诉AI"嘿,你能不能让这个看起来简单点"时会发生什么的框架。我在45分钟内就有了一个工作Agent。不是勉强能用——是真正工作。带错误处理、工具调用、结构化输出。
语法很简洁。你将Agent定义为带有角色的类,将任务链接在一起,然后调用kickoff()。它读起来几乎像自然语言:
researcher = Agent(
role='Research Analyst',
goal='Extract financial data from web sources',
tools=[search_tool, db_tool]
)
task = Task(
description='Analyze {company} and produce JSON',
agent=researcher,
expected_output='Structured financial summary'
)
crew = Crew(agents=[researcher], tasks=[task])
result = crew.kickoff()
CrewAI在更高的抽象层次上运行。你没有定义控制流程;框架为你处理。Agent根据提供的上下文决定工具调用顺序。
这既是祝福也是诅咒。当我构建标准"搜索→数据库→总结"管道时,它运行良好。但当我尝试更复杂的决策逻辑——"如果搜索返回少于3个结果,跳过数据库交叉引用"——我卡住了。CrewAI想要我描述要做什么,而不是如何决定做什么。
深夜调试现实检查: 当事情出错时,CrewAI的日志是六个框架中最不透明的。我得到了"Agent无法完成任务"但没有状态跟踪、没有中间输出、没有检查点可见性。我最终添加了verbose=True和print语句来重建执行路径。
凌晨2点调试分数:4/10。 快速构建,难以调试。
3、PydanticAI:结构化输出的王者
代码行数: ~165
首次工作Agent所需时间: 2小时
每次运行平均token数: 2,943
PydanticAI感觉像有人拿着OpenAI SDK说"这很好,但如果输出实际上有效呢?"然后围绕它构建了一个框架。
每个工具、每个Agent响应、每个中间结果——都有类型。真正的Python类型,运行时会验证。
class FinancialSummary(BaseModel):
company: str
revenue: Optional[float]
growth_rate: Optional[float]
confidence_score: float
@agent.tool
async def search_financials(ctx: RunContext[None], company: str) -> FinancialSummary:
# Tool implementation with typed returns
Pydantic验证发生在我甚至看到输出之前。如果LLM返回"N/A"作为收入字段(标记为Optional[float]),PydanticAI优雅地处理它。如果它返回"N/A"作为必需字段,我立即得到一个错误,包含确切的验证失败信息。
实际生产中重要的特性: PydanticAI与FastAPI和Pydantic生态系统原生集成。如果你已经在使用Pydantic进行数据验证(坦率地说,2026年的Python项目谁不是呢?),这感觉无缝。
权衡是灵活性。PydanticAI对有明确模式的工作流程非常固执。当我尝试动态工具发现(Agent根据输入决定使用哪些工具)时,我遇到了Pydantic模型的墙。可以绕过,但感觉像是在框架的设计意图之外工作。
凌晨2点调试分数:7/10。 验证错误消息清晰有用。状态可见性中等。
4、OpenAI SDK:原始力量
代码行数: ~380
首次工作Agent所需时间: 5小时(首个工作版本)
每次运行平均token数: 3,891
OpenAI SDK不是Agent框架。它是其他Agent框架构建的基础。
我选择了这个,因为有人说"所有Agent框架都是不必要的抽象",我想知道直接针对API构建是否更干净。
它不是。
我花了五小时才得到第一个可靠工作的版本。不是因为我慢——是因为我在重新发明每个框架都提供的轮子。工具调用解析?我得自己写。重试逻辑?自己写。状态管理?自己写。结构化输出?手动JSON解析带错误处理。
# What every framework hides from you
response = client.chat.completions.create(
model="gpt-4o",
messages=messages,
tools=tools
)
# Manual tool call extraction and execution
if response.choices[0].message.tool_calls:
tool_call = response.choices[0].message.tool_calls[0]
# Parse arguments, call function, handle errors, build next message
# Repeat until completion
到第三小时,我在写自己的Agent循环包装器。到第四小时,我意识到我是在构建一个糟糕的PydanticAI版本。
唯一的优势: 零依赖性。没有抽象泄漏,没有框架错误,没有版本冲突。如果你的团队有严格的依赖性要求,这可能是值得的。但对于大多数项目,你以500行样板代码为代价换取的"控制"是一种错误的节约。
凌晨2点调试分数:6/10。 没有魔法意味着没有魔法问题。但也没有魔法帮助。
5、Smolagents:极简主义者的梦想
代码行数: ~95
首次工作Agent所需时间: 25分钟
每次运行平均token数: 5,124
Smolagents是Hugging Face构建的,感觉像是用200行代码构建Agent的最小可行方法。
它奏效了。它以95行代码奏效了。
from smolagents import CodeAgent, DuckDuckGoSearchTool
agent = CodeAgent(
tools=[DuckDuckGoSearchTool()],
model=model
)
result = agent.run("Research {company} and return financial summary")
这个Agent可以编写代码、执行代码、调用工具,并根据需要循环。类型提示和文档都很扎实。
但那种极简主义是有代价的。Smolagents对复杂工作流程的信念是"Agent会弄清楚"——在某些情况下这是真的,但当它失败时,调试是一场噩梦。
关键发现: Smolagents的token使用量比我测试的任何其他框架都高。其代码生成和执行方法意味着单个Agent运行可能触发5-10个LLM调用,而LangGraph中的结构化方法可能只需要2-3个。
对于低容量原型设计,谁在乎呢?对于生产吞吐量,这加起来很快。
凌晨2点调试分数:5/10。 非常紧凑的代码库意味着当出现问题时,你可以阅读整个框架源代码。但当它失败时,通常是因为Agent生成的代码错了,你在调试生成的代码。
6、Google ADK:新入局者
代码行数: ~290
首次工作Agent所需时间: 4小时
每次运行平均token数: 3,456
Google的Agent Development Kit作为"原生多模态Agent框架"推出。我尝试了。它是……还行。
ADK感觉像是Google在追赶LangGraph和CrewAI。它有状态、有工具、有会话记忆。一切都有效。
但我找不到任何它做得比其他框架更好的地方。持久化执行?LangGraph更好。快速原型设计?CrewAI更好。类型安全?PydanticAI更好。
ADK确实与Google的生态系统(Vertex AI、BigQuery)集成得更好。如果你已经在Google Cloud中,这可能很重要。对于供应商无关的部署,这只是另一个学习曲线。
凌晨2点调试分数:6/10。 工作正常,但文档 sparse,社区支持仍在增长。
7、最终排名
| 框架 | 代码行数 | 首次工作时间 | 平均Token数 | 调试分数 | 适用场景 |
|---|---|---|---|---|---|
| LangGraph | ~210 | 3小时 | 2,847 | 9/10 | 生产管道、持久化执行 |
| CrewAI | ~340 | 45分钟 | 4,216 | 4/10 | 快速原型、标准工作流程 |
| PydanticAI | ~165 | 2小时 | 2,943 | 7/10 | 类型安全关键、FastAPI项目 |
| OpenAI SDK | ~380 | 5小时 | 3,891 | 6/10 | 严格依赖要求 |
| Smolagents | ~95 | 25分钟 | 5,124 | 5/10 | 极简主义原型 |
| Google ADK | ~290 | 4小时 | 3,456 | 6/10 | Google Cloud环境 |
8、我的选择
我为客户项目选择了LangGraph。不是因为它是最快的,而是因为它在事情出错时给我最多的可见性。当那个管道在凌晨2点失败时,我想知道为什么。
但如果你今天就开始一个周末原型,想要最快的胜利?CrewAI 的45分钟到工作Agent很难被击败——只要你的用例保持简单。
原文链接: I Compared 6 Python AI Agent Frameworks So You Don't Have To
汇智网翻译整理,转载请标明出处