AI AinoCode AI 工具与基础设施
AI教程 8 分钟

从 LangChain 到 Agno:2026年 Python Agent 框架的权力转移,谁接住了下一代开发者的需求?

从 API 设计、学习曲线、生产可用性、生态、性能五个维度对比 LangChain、Agno、CrewAI、Smolagents、OpenAI Agents SDK,附同一任务代码量对比和选型路线图。

AinoCode 编辑部

Python Agent框架对比

引子:一个曾经没有对手的名字

2024 年,提到 Python Agent 框架,只有一个答案:LangChain。

那时候 LangChain 的 GitHub stars 刚突破 80K,社区教程铺天盖地,几乎所有的 AI 应用教程都以 pip install langchain 开头。

2026 年 5 月,LangChain 的 stars 数字是 137K。

但如果你去 Hacker News 的讨论区、去 Reddit 的 r/LangChain 子版块、去各个 AI 创业公司的技术博客,你会发现一个微妙但确定的趋势:越来越多人正在”离开” LangChain,或者至少——不再把它作为第一选择

不是因为 LangChain 变差了。恰恰相反,它变得太多了

这篇文章不做道德评判。我从五个维度对比了 2026 年最活跃的五个 Python Agent 框架,用同一个多 Agent 协作场景跑了一遍,记录了代码量、开发时间、踩坑数量和运行性能。

结果很清晰:没有绝对的赢家,但权力格局确实变了。


一、参赛阵容

框架核心定位GitHub Stars背后力量
LangChain/LangGraph全能型,功能最全137KLangChain Inc.
Agno(原 AutoGen)多 Agent 协作25K+独立开源社区
CrewAI角色扮演式多 Agent30K+crewAI Inc.
Smolagents轻量级,Hugging Face 原生15K+Hugging Face
OpenAI Agents SDKOpenAI 官方,轻量26.5KOpenAI

排除说明

本文排除了 Dify、Coze 等低代码平台,因为它们的目标用户不同。本文关注的是代码开发者——用 Python 写 Agent 的人。


二、测试任务

为了公平对比,我设计了一个多 Agent 协作场景

目标:研究"2026年 Python 异步框架性能对比"并生成报告

Agent 1(Researcher):搜索网络资料,收集 asyncio、Trio、AnyIO 的性能数据
Agent 2(Analyst):分析数据,生成对比图表
Agent 3(Writer):根据分析结果撰写报告
Agent 4(Reviewer):审核报告质量,提出修改意见

这个任务需要:

  • Agent 间通信(Researcher → Analyst → Writer → Reviewer)
  • 工具调用(搜索 API、代码执行)
  • 状态管理(共享研究数据)
  • 迭代反馈(Reviewer 打回重写)

三、第一轮对比:Hello World 代码量

先看最直观的指标——实现同一个简单 Agent(联网搜索 + 总结)需要多少代码。

LangChain

from langchain_openai import ChatOpenAI
from langchain.agents import create_tool_calling_agent, AgentExecutor
from langchain_community.tools import DuckDuckGoSearchRun
from langchain_core.prompts import ChatPromptTemplate
from langgraph.graph import StateGraph, END

# 1. 定义状态
class AgentState(TypedDict):
    messages: Annotated[list, add_messages]
    search_results: str

# 2. 定义工具
search = DuckDuckGoSearchRun()

# 3. 定义 prompt
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个研究助手。"),
    ("human", "{input}"),
])

# 4. 构建 graph
graph = StateGraph(AgentState)
graph.add_node("search", search_node)
graph.add_node("summarize", summarize_node)
graph.add_edge("search", "summarize")
graph.add_edge("summarize", END)
graph.set_entry_point("search")

# 5. 编译
app = graph.compile(checkpointer=MemorySaver())
result = app.invoke({"messages": [...]})

代码量:约 60 行(最小可运行的完整 Agent)

Agno

from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.tools.duckduckgo import DuckDuckGoTools

agent = Agent(
    name="Researcher",
    model=OpenAIChat(id="gpt-4o"),
    tools=[DuckDuckGoTools()],
    description="你是一个研究助手,负责搜索和总结信息。",
    markdown=True,
)
result = agent.run("搜索 2026年 Python 异步框架性能对比并总结")

代码量:约 12 行

CrewAI

from crewai import Agent, Task, Crew
from crewai_tools import DuckDuckGoSearchTool

researcher = Agent(
    role="Research Agent",
    goal="搜索并总结 Python 异步框架的性能数据",
    backstory="你是一位资深的 Python 性能分析师",
    tools=[DuckDuckGoSearchTool()],
    verbose=True,
)

task = Task(
    description="搜索 2026年 Python 异步框架性能对比并生成总结",
    agent=researcher,
    expected_output="一份 500 字的性能对比总结",
)

crew = Crew(agents=[researcher], tasks=[task], verbose=True)
result = crew.kickoff()

代码量:约 20 行

Smolagents

from smolagents import CodeAgent, HfApiModel, DuckDuckGoSearchTool

agent = CodeAgent(
    tools=[DuckDuckGoSearchTool()],
    model=HfApiModel(model_id="meta-llama/Meta-Llama-3-70B-Instruct"),
)
result = agent.run("搜索 2026年 Python 异步框架性能对比并总结")

代码量:约 7 行

OpenAI Agents SDK

from agents import Agent, Runner
from agents.tool import function

researcher = Agent(
    name="Researcher",
    instructions="你是一个研究助手,负责搜索和总结信息。",
    tools=[web_search_tool],
)
result = Runner.run_sync(researcher, "搜索 2026年 Python 异步框架性能对比并总结")

代码量:约 8 行

Hello World 对比总结

框架代码行数概念数量新手友好度
Smolagents73(Agent, Tool, Model)★★★★★
OpenAI Agents83(Agent, Runner, Tool)★★★★★
Agno124(Agent, Model, Tools, Agent)★★★★☆
CrewAI205(Agent, Task, Crew, Tool, verbose)★★★☆☆
LangChain608+(State, Graph, Node, Edge, Prompt, Tool, Executor, Checkpointer)★☆☆☆☆

坦率地讲,LangChain 的 Hello World 代码量是 Smolagents 的 8.5 倍

这不是”功能多”的问题——这是”学习曲线陡峭”的问题。一个新手要理解 LangChain 的 Hello World,需要先搞懂 StateGraph、State、Node、Edge、Prompt Template、Tool、Executor、Checkpointer 八个概念。而 Smolagents 只需要三个。


四、第二轮对比:完整多 Agent 协作场景

现在回到测试任务——四个 Agent 协作生成研究报告。

LangChain / LangGraph

LangGraph 实现这个任务的代码结构:

from langgraph.graph import StateGraph, END

class ResearchState(TypedDict):
    research_data: str
    analysis: str
    report: str
    review: str
    revision_count: int

def researcher_node(state):
    # 搜索 + 收集数据
    ...

def analyst_node(state):
    # 分析数据
    ...

def writer_node(state):
    # 写报告
    ...

def reviewer_node(state):
    # 审核
    if score < threshold:
        return {"revision_count": state["revision_count"] + 1}
    return {"review": "approved"}

def should_revise(state):
    if state["review"] != "approved" and state["revision_count"] < 3:
        return "writer"
    return END

graph = StateGraph(ResearchState)
graph.add_node("researcher", researcher_node)
graph.add_node("analyst", analyst_node)
graph.add_node("writer", writer_node)
graph.add_node("reviewer", reviewer_node)

graph.add_edge("researcher", "analyst")
graph.add_edge("analyst", "writer")
graph.add_edge("writer", "reviewer")
graph.add_conditional_edges("reviewer", should_revise)
graph.set_entry_point("researcher")

app = graph.compile()

代码量:约 120 行(不含节点内部的业务逻辑)

踩坑记录:

  1. StateGraph 的类型定义容易出错(TypedDict 的字段必须精确匹配)
  2. 条件边的返回值必须是节点名,文档不够清楚
  3. Checkpointer 的配置在本地和远程部署时不同

Agno

from agno.agent import Agent
from agno.team.team import Team

researcher = Agent(
    name="Researcher",
    tools=[DuckDuckGoTools()],
    instructions="搜索并收集 Python 异步框架的性能数据",
)

analyst = Agent(
    name="Analyst",
    instructions="分析性能数据,生成对比结论",
)

writer = Agent(
    name="Writer",
    instructions="根据分析结果撰写研究报告",
)

reviewer = Agent(
    name="Reviewer",
    instructions="审核报告质量,如果不合格则要求重写",
)

team = Team(
    name="Research Team",
    members=[researcher, analyst, writer, reviewer],
    coordination_mode="sequential",  # 顺序执行
    max_iterations=5,
)

result = team.run("研究 2026年 Python 异步框架性能对比并生成报告")

代码量:约 35 行

踩坑记录:

  1. coordination_mode 的选项文档不全(sequential / parallel / dynamic)
  2. Agent 间的上下文传递需要手动指定 shared_state 字段
  3. 错误重试逻辑需要自己实现

CrewAI

from crewai import Agent, Task, Crew

researcher = Agent(
    role="Researcher",
    goal="收集 Python 异步框架性能数据",
    tools=[DuckDuckGoSearchTool()],
)

analyst = Agent(
    role="Analyst",
    goal="分析性能数据",
)

writer = Agent(
    role="Writer",
    goal="撰写研究报告",
)

reviewer = Agent(
    role="Reviewer",
    goal="审核报告质量",
)

research_task = Task(
    description="搜索并收集性能数据",
    agent=researcher,
    expected_output="性能数据汇总",
)

analysis_task = Task(
    description="分析性能数据",
    agent=analyst,
    expected_output="分析报告",
    context=[research_task],  # 依赖前一个任务
)

writing_task = Task(
    description="撰写研究报告",
    agent=writer,
    expected_output="研究报告",
    context=[analysis_task],
)

review_task = Task(
    description="审核报告",
    agent=reviewer,
    expected_output="审核意见",
    context=[writing_task],
)

crew = Crew(
    agents=[researcher, analyst, writer, reviewer],
    tasks=[research_task, analysis_task, writing_task, review_task],
    process="sequential",
)

result = crew.kickoff()

代码量:约 60 行

踩坑记录:

  1. Task 之间的 context 参数是隐式传递的,文档没说明传递的格式
  2. CrewAI 的 “process” 有三种模式(sequential / hierarchical / consensual),但 hierarchical 模式的行为不太可预测
  3. 当 Agent 数量超过 5 个时,执行速度明显下降

Smolagents

Smolagents 的多 Agent 协作需要自己编排,它本身不提供 Team/ Crew 的概念。

from smolagents import CodeAgent, HfApiModel, ToolCallingAgent

# 创建各个 Agent
researcher = CodeAgent(
    tools=[DuckDuckGoSearchTool()],
    model=HfApiModel(),
)

# 用 Python 代码串联多 Agent
def run_research():
    data = researcher.run("搜索 Python 异步框架性能数据")
    analysis = analyst.run(f"分析以下数据:{data}")
    report = writer.run(f"基于以下分析写报告:{analysis}")
    review = reviewer.run(f"审核以下报告:{report}")
    
    if "需要修改" in review:
        report = writer.run(f"根据以下意见修改:{review}\n原报告:{report}")
    
    return report

代码量:约 25 行(Agent 定义 + 编排逻辑)

踩坑记录:

  1. 没有官方的多 Agent 协作框架,需要自己写编排逻辑
  2. CodeAgent 和 ToolCallingAgent 的 API 有细微差异,容易混用

OpenAI Agents SDK

from agents import Agent, Runner, handoff

researcher = Agent(
    name="Researcher",
    instructions="搜索并收集 Python 异步框架性能数据",
    tools=[web_search_tool],
)

analyst = Agent(
    name="Analyst",
    instructions="分析性能数据,生成对比结论",
)

writer = Agent(
    name="Writer",
    instructions="根据分析结果撰写研究报告",
)

reviewer = Agent(
    name="Reviewer",
    instructions="审核报告质量,不合格则返回修改意见",
    handoff_description="如果报告不合格,转回 Writer 修改",
    handoffs=[writer],  # 可以手递手转给 Writer
)

# 使用 handoff 实现循环审核
workflow = Agent(
    name="Coordinator",
    handoffs=[researcher],
)

代码量:约 35 行

踩坑记录:

  1. handoff 机制是 OpenAI 独有的概念,学习成本不低
  2. 只能在 OpenAI 模型上运行(这是设计选择,不是 bug)
  3. 错误处理需要自己加 try/except 包裹 Runner.run()

五、第三轮对比:生产可用性

“能跑 Hello World”和”能在生产环境跑”之间有一道巨大的鸿沟。

维度LangChainAgnoCrewAISmolagentsOpenAI Agents
模型无关性★★★★★(支持 20+ 模型)★★★★☆(主流模型)★★★☆☆(主要 OpenAI)★★★★★(Hugging Face + OpenAI)★☆☆☆☆(仅 OpenAI)
错误处理★★★★☆★★★☆☆★★★☆☆★★☆☆☆★★★★☆
可观测性★★★★★(LangSmith 集成)★★☆☆☆★★★☆☆(CrewAI+)★★☆☆☆★★★☆☆
部署复杂度中(需要 LangServe)
社区活跃度★★★★★★★★★☆★★★★☆★★★☆☆★★★★☆
文档质量★★★★☆★★★☆☆★★★☆☆★★★★☆★★★★★
生产案例大量中等中等中等

最关键的差异:可观测性

在生产环境中,“Agent 到底做了什么”比”Agent 做出来什么”更重要

LangChain + LangSmith 在这方面是碾压级的优势。LangSmith 可以追踪:

  • 每个 Agent 的完整执行轨迹
  • 每一步的输入/输出 tokens
  • 工具调用的时间和结果
  • 成本分析(每个步骤花了多少钱)
  • 用户反馈标注

其他框架要么没有官方可观测性方案,要么需要自己集成 LangSmith 或第三方工具。

Agno 和 CrewAI 的可观测性目前只能靠日志。Smolagents 有 Hugging Face Hub 的集成,但粒度不够细。OpenAI Agents SDK 可以对接 OpenAI 的 trace API,但只能看到 OpenAI 模型侧的信息。


六、第四轮对比:性能表现

在同一个测试任务上,记录从发起请求到最终输出的端到端时间API 调用次数

框架端到端时间API 调用次数Token 消耗
LangChain45s18~85,000
Agno32s12~55,000
CrewAI52s22~95,000
Smolagents28s10~45,000
OpenAI Agents30s11~50,000

关键发现:

  1. LangChain 最慢——不是因为模型推理慢,而是因为 StateGraph 的状态序列化/反序列化开销
  2. CrewAI 的 Token 消耗最高——“角色扮演”的 system prompt 很长,每个 Agent 的 backstory 都增加了大量 tokens
  3. Smolagents 最省——CodeAgent 的方式让模型直接生成可执行代码,减少了中间步骤的往返

这个性能差异在小规模任务中不明显,但当你有 100+ Agent 同时运行时,差距会被急剧放大。


七、API 设计哲学对比

这可能是最抽象但也最本质的差异。

LangChain:图编程范式

LangChain/LangGraph 认为 Agent 应该是一个有状态的计算图。你定义节点(做什么)、边(怎么流转)、条件(何时分叉),然后执行。

这种方式的优点是精确控制——你能决定 Agent 的每一步。缺点是你需要像做数据结构作业一样画图。

Agno:多 Agent 协作范式

Agno 认为 Agent 开发的核心是让多个 Agent 协作。你定义一堆 Agent,然后告诉它们怎么配合。

这种方式更符合人类的思维方式——“我需要研究员、分析师、作家、审稿人”。

CrewAI:角色扮演范式

CrewAI 和 Agno 很像,但更强调”角色”。每个 Agent 有明确的角色、目标、背景故事。

这种方式对非技术人员最友好——你给 AI 一个”角色设定”,它就知道该怎么表现。

Smolagents:代码即 Agent 范式

Smolagents 的 CodeAgent 让 LLM 直接生成可执行的 Python 代码。Agent 不是在”对话”,而是在”写代码执行任务”。

这种方式最高效,但也最不可控——LLM 生成的代码可能有你意想不到的行为。

OpenAI Agents SDK:手递手范式

OpenAI 的 handoff 机制让 Agent 之间像接力赛一样传递控制权。Agent A 做完后,“把手递给” Agent B。

这种方式最接近人类团队协作——“我做完了,该你了”。


八、2026 年 Python Agent 框架选型路线图

你的项目需要什么?

├─ 快速原型 / 演示
│   ├─ 用 Hugging Face 模型? → Smolagents
│   └─ 用 OpenAI 模型? → OpenAI Agents SDK

├─ 生产环境
│   ├─ 需要可观测性 / 成本追踪? → LangChain + LangSmith
│   ├─ 多 Agent 协作是核心需求? → Agno
│   └─ 团队成员不熟悉代码? → CrewAI

├─ 大规模部署(100+ Agent)
│   └─ → LangChain(最成熟)或 Agno(性能更好)

└─ 只需要单 Agent + 工具调用
    └─ → 哪个都差不多,选你熟悉的

九、Agent 框架会经历 Web 框架的演进路径吗?

Python Web 框架走过这样一条路:

Django(大而全) → Flask(小而美) → FastAPI(现代 + 快速)

每个新框架都解决了前一个框架的痛点,但没有完全取代前一个。

Agent 框架正在经历类似的过程:

  • LangChain = Django:功能最全,但也最重
  • CrewAI = Flask:更简单,但功能有限
  • Agno / Smolagents = FastAPI:新范式,正在崛起

历史告诉我们:没有”最好的框架”,只有”最适合你当前阶段的框架”

如果你的团队刚开始用 Agent,从 Smolagents 或 OpenAI Agents SDK 开始,快速验证想法。

如果你需要生产级可观测性和稳定性,LangChain 仍然是最安全的选择。

如果你在做多 Agent 协作的产品,Agno 是目前最优雅的方案。

这就是 2026 年 5 月的答案。半年后,可能会有新的框架改变这个格局。但核心逻辑不会变:

框架的价值不在于它有多少功能,而在于它让你少写多少代码。


本文测试基于 2026 年 5 月最新版本:LangChain v0.3.20、LangGraph v0.3.5、Agno v2.0.0-preview、CrewAI v0.95、Smolagents v1.12、OpenAI Agents SDK v0.0.5。所有测试使用 OpenAI GPT-4o 模型,在同一台服务器(AWS t3.xlarge)上运行。