Skip to main content

13 · 横向对比与选型决策

前面十三篇一个一个拆完了,这一篇给结论。


一、总表:11 个框架 × 关键维度

基础信息

框架Star版本语言层级许可证
LangChain144.5k1.3.15Py / TSFrameworkMIT
LangGraph39.9k1.2.11Py / TSRuntimeMIT
DeepAgents27.9k0.7.7Py / TSHarnessMIT
Claude Agent SDK7.9k0.2.139Py / TSHarnessMIT
OpenAI Agents SDK28.7k0.21.1Py / TSFrameworkMIT
Google ADK21.2k2.7.1Py/TS/Go/Java/KtFrameworkApache 2.0
Microsoft AF12.9k1.14.0Py / .NETFrameworkMIT
LlamaIndex51.7k0.14.23Py / TSFrameworkMIT
Qwen-Agent17.0k——PyFrameworkApache 2.0
Spring AI9.3k + 10.6k2.0.0JavaFrameworkApache 2.0
Eino12.7kv0.9.15GoFrameworkApache 2.0

能力对比

图例: 强 / 有但一般 / 弱或没有

框架上手
速度
拓扑
灵活度
持久
执行
HITL上下文
工程
多智
能体
可观
测性
模型
中立
生态
规模
LangChain
LangGraph
DeepAgents
Claude Agent SDK
OpenAI Agents SDK
Google ADK
Microsoft AF
LlamaIndex
Qwen-Agent
Spring AI○ ◐
Eino

Spring AI 的拓扑灵活度:纯 Spring AI 为 ○,加上 Spring AI Alibaba Graph 为 ◐。

注意「模型中立」这一列 —— 它是最容易在半年后咬你一口的维度,详见本文第五节。

各自最擅长的一件事

框架它比所有人都强的那件事
LangChain集成数量,以及「同一套概念能从框架下沉到运行时、上升到 Harness」
LangGraph长时任务的持久执行、时间旅行、任意拓扑
DeepAgents模型可换的开箱即用 Harness(规划 + 文件系统 + 子智能体 + 上下文压缩)
Claude Agent SDK编码 Agent 的能力上限
OpenAI Agents SDK上手速度、Handoff 语义、语音 Agent、开箱即用的 Tracing
Google ADK多语言、图的编译期校验、内建评测、A2A
Microsoft AF.NET 一等公民 + 企业治理
LlamaIndex复杂文档解析与检索链路
Qwen-AgentQwen 模型的一手适配知识 + 一行起 WebUI
Spring AI无缝融入现有 Spring Boot 系统
EinoGo 里的编译期类型安全编排

二、同一个任务,五种写法

任务:给 Agent 一个查天气的工具,问它旧金山天气怎么样。

# LangChain —— 一个工厂函数搞定,入参是「状态」不是字符串
from langchain.agents import create_agent
agent = create_agent(model="openai:gpt-5.5", tools=[get_weather],
system_prompt="You are a helpful assistant")
agent.invoke({"messages": [{"role": "user", "content": "What's the weather in SF?"}]})
# OpenAI Agents SDK —— Agent 是配置,Runner 是执行者,两者分开
from agents import Agent, Runner
agent = Agent(name="Assistant", instructions="You are a helpful assistant", tools=[get_weather])
result = Runner.run_sync(agent, "What's the weather in SF?") # 直接传字符串
# Google ADK —— 只声明,不写启动代码;`adk run` 会自动找名为 root_agent 的变量
from google.adk import Agent
root_agent = Agent(name="assistant", model="gemini-2.5-flash",
instruction="You are a helpful assistant", tools=[get_weather])
// Spring AI —— 链式调用,和 RestClient / WebClient 一个味道,Spring 开发者零学习成本
String answer = chatClient.prompt()
.user("What's the weather in SF?")
.tools(new WeatherTools()) // 对象里 @Tool 注解的方法会被扫成工具
.call()
.content();
// Eino —— Go 的显式风格,配置结构体嵌套较深,但每一层类型都是编译期检查的
agent, _ := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{
Model: chatModel,
ToolsConfig: adk.ToolsConfig{ToolsNodeConfig: compose.ToolsNodeConfig{
Tools: []tool.BaseTool{weatherTool},
}},
})

在最简单的任务上,所有框架长得都差不多。 这说明一件重要的事:

简单场景下,框架选择几乎不影响结果

差异只在复杂度上来之后才显现 —— 上下文爆了怎么办、跑一半崩了怎么办、要人工审批怎么办、要拆多个 Agent 怎么办。

所以选型的正确方式不是「比谁的 Hello World 更短」,而是**「想清楚我半年后会撞上哪些问题,看谁的答案更好」**。


三、选型决策树

先回答这四个问题

问题它决定什么
1. 团队主力语言是什么?这一刀砍掉 80% 的选项,且往往不可谈判
2. 任务会跑多久?秒级 → 任何框架;分钟到天级 → 必须有持久执行
3. 出错的代价有多大?代价大 → 必须有工具级审批和完整审计轨迹
4. 模型会不会换?会 → 中立性优先;不会 → 可以吃原厂框架的红利

四、七个反模式

这些是我见过最常见的选型错误。

反模式 1:还没做单 Agent 基线就上多智能体

症状:直接上 CrewAI 搭五个角色,成本涨 5 倍,效果盲测赢不过一个提示词写好的单 Agent。

正确做法:先做「一个 Agent + 好工具」的基线,测出效果和成本,再论证多智能体的增量。真正需要多智能体的只有两种情况:上下文必须隔离能力/权限必须分离

反模式 2:拿 Dify 和 LangGraph 比

症状:「Dify 15 万星,LangGraph 才 4 万,用 Dify」。

它们不在一层:Dify 是产品,LangGraph 是运行时库。正确的问题是「我要拖拽还是要写代码」,见 01 的分层

反模式 3:用 star 数代替 pushed_at

症状:选了 AutoGen(60.5k star),三个月后发现它 2026-04 就冻结了。

正确做法:每次评估都跑一遍 —— 最近提交时间、最近 release、issue 响应速度、背后组织的战略连续性。详见 07 微软阵营 那个案例。

反模式 4:把「支持 100+ 模型」当成模型中立

症状:用了 OpenAI Agents SDK 的 WebSearchTool 和 Tracing,半年后要换模型,发现核心能力全绑死了。

正确做法:把框架能力分成「可迁移」和「不可迁移」两栏,明确知道自己踩了几个不可迁移的。

反模式 5:在原型阶段就上重型运行时

症状:Demo 阶段就搭 LangGraph + Postgres checkpointer + 自定义 reducer,两周还没跑通第一个版本。

正确做法:原型用最薄的框架,撞上真实问题(上下文爆了、要审批了、崩了要恢复)再升级。升级路径的存在比一开始就选最强的更重要。

反模式 6:靠提示词做安全边界

症状:系统提示词里写「不要删除生产数据库」。

正确做法:边界在工具层和沙箱层强制。DeepAgents 官方直说自己是 trust-the-LLM 模型Claude Agent SDK 用 hooks 做确定性拦截 —— 两家都在说同一件事:模型不会自律,代码才会。

反模式 7:没有评测就换框架

症状:「换成 X 框架之后感觉好多了」。

正确做法:先有回归评测集,再动架构。Google ADK 的 adk eval 是本专题里少数把评测做进核心的,其余都要自己搭 —— 见 EvalHub


五、迁移成本:换框架到底有多贵

好消息:Agent 应用里真正值钱的三样东西,框架无关

资产迁移成本
工具实现(业务逻辑)低 —— 换个装饰器/接口的事
提示词低 —— 纯文本
评测集低 —— 数据
编排拓扑中到高
状态 / 检查点格式
托管部署路径
可观测性接入

结论:把业务逻辑写在工具里,把编排写得薄,你的迁移成本就低。 反过来,把大量业务逻辑写进框架特有的图节点、状态 reducer、生命周期钩子里,你就被锁住了。

一个实用的护栏:


六、评估一个新框架的 checklist

拿到任何一个新框架,按这个顺序查,十分钟能得出结论:

# 十秒钟拿到一个框架的三个关键事实:多少星、最近一次提交、什么许可证。
# pushed_at 比 stars 更能说明这个项目还活不活着
gh api repos/OWNER/REPO --jq '{stars: .stargazers_count, pushed: .pushed_at, license: .license.spdx_id}'
#检查项不合格的信号
1最近提交时间超过 3 个月
2版本号还在 0.x 且要上生产
3背后组织同一家公司有两套竞争方案
4破坏性变更历史一年内两次大重写
5它在哪一层你分不清它是 Runtime / Framework / Harness
6持久执行没有 checkpoint 却要跑长任务
7HITL 强度只有回调式,进程必须一直活着
8可观测性出口只能发到它自家 SaaS
9不可迁移的能力你打算用的核心能力全在这一栏
10逃生舱能不能只用它的一部分

第 10 条最容易被忽略但最有用LlamaIndex 的 Workflows 可以单独装LangGraph 可以不带 LangChain 用、LlamaIndex 的检索可以当工具接进任何框架。能被局部使用的框架,风险比全家桶低得多。


七、三条我会给出的实际建议

1. 大多数团队应该从「薄」开始

OpenAI Agents SDKLangChain create_agentSpring AIEino ChatModelAgent —— 先跑通,撞上具体问题再升级。「先选最强的框架」是一种前置优化。

2. 混搭是常态,不是妥协

生产系统里最常见的组合:

框架不是宗教。 用每个框架最强的那部分,避开它最弱的那部分。

3. 投资在框架无关的地方

工具设计、提示词、评测集 —— 这三样决定你的 Agent 好不好用,而且换框架时全部保留。框架决定的是「工程上有多顺手」,不是「效果有多好」。

关于工具设计,Anthropic 那篇长期运行代理的工具设计 值得反复读 —— 它讲的东西,在本专题的 11 个框架里都成立。


八、回到起点

本专题第一句话是:做 Agent 的第一个问题不是「用哪个模型」,而是「用哪个框架,或者不用框架」。

现在可以补上答案的另一半:

框架解决的是工程问题,不是效果问题。

它替你回答「上下文爆了怎么办、崩了怎么办、要审批怎么办、要拆分怎么办」这四个问题。 你的 Agent 好不好用,取决于工具设计、提示词和评测 —— 那些和框架无关。

所以:选一个能让你少写胶水代码、且留了逃生舱的框架,然后把时间花在别处。