8.2 框架核心能力对比
承前:在 8.1 节中,我们从宏观视角梳理了 Agent 框架的发展脉络,了解了 LangChain、LangGraph、AutoGen、CrewAI、LlamaIndex、Semantic Kernel、Dify 等主流框架的定位与核心特征。然而,仅知道"有哪些框架"还远远不够——真正在工程实践中做出正确选型,需要对框架的核心能力做深度横向对比。本节将从编排能力、记忆系统、工具集成、可观测性四个维度逐一拆解,帮助读者建立系统化的评估框架。
8.2.1 评估框架的四个核心维度
选择 Agent 框架时,不能只看 GitHub Star 数或社区名气,而应从以下四个维度进行系统评估。这就像买房子不能只看外观,还要看户型结构、水电系统、物业管理、安保监控——每一个维度都关系到日后的居住体验。
┌──────────────────────────────────────────────────────────┐
│ Agent 框架核心能力评估模型 │
├──────────────┬──────────────┬──────────────┬─────────────┤
│ 编排能力 │ 记忆系统 │ 工具集成 │ 可观测性 │
│ (Orchestration)│ (Memory) │ (Tool Use) │(Observability)│
├──────────────┼──────────────┼──────────────┼─────────────┤
│ · 图编排 │ · 短期记忆 │ · 函数调用 │ · 追踪(Trace)│
│ · 对话驱动 │ · 长期记忆 │ · MCP协议 │ · 日志(Log) │
│ · 角色化 │ · 语义记忆 │ · 插件体系 │ · 评估(Eval) │
│ · 工作流 │ · 向量存储 │ · 自定义工具 │ · 调试(Debug)│
└──────────────┴──────────────┴──────────────┴─────────────┘打个比方,如果把 Agent 比作一个公司的员工,那么编排能力是他的工作方法论(如何拆解任务、协调步骤),记忆系统是他的笔记本和知识库(记住做过什么、学过什么),工具集成是他手中的工具箱(会使用哪些软件和设备),可观测性则是管理者对他的绩效考核系统(每一步都在监控之下,出了问题能追溯)。
8.2.2 编排能力(Orchestration)深度对比
编排能力是 Agent 框架的"大脑",决定了任务如何拆解、步骤如何执行、状态如何流转。
四种编排范式对比
① 图编排(LangGraph)
LangGraph 将 Agent 协作抽象为有向图,节点(Node)执行操作,边(Edge)定义流转逻辑。支持条件边和循环,使复杂流程可视化、可控制。
┌─────────┐ ┌─────────┐ ┌─────────┐
│ START │────▶│ 搜索节点 │────▶│ 分析节点 │
└─────────┘ └─────────┘ └────┬────┘
│
┌──────────┴──────────┐
▼ ▼
┌─────────┐ ┌─────────┐
│ 生成节点 │ │ 重试节点 │
└─────────┘ └─────────┘生活类比:编排能力就像城市交通系统:每个节点是一个路口,每条边是一条道路,条件边是红绿灯,循环是绕路掉头。你可以在任何路口设置导航规则,也可以回退到上一个路口重新选择路线。
图编排的核心组件包括:
- 节点(Node):执行具体操作的函数,接收当前状态、返回状态更新
- 边(Edge):定义节点之间的流转关系,支持普通边和条件边
- 状态(State):在节点间传递的数据容器,通常用 TypedDict 定义
- 检查点(Checkpointer):持久化每一步状态,支持回溯和时间旅行
- 中间件(Middleware):在节点执行前后插入逻辑,如日志、监控、权限检查
适用场景:当你需要"每一步都可审计、可回溯、可重放"时,图编排是首选。金融交易 Agent、医疗诊断 Agent、法律合规 Agent 都属于这类场景。
优势:确定性高,状态可持久化,支持检查点和回溯,适合需要严格流程控制的生产环境。
② 对话驱动(AutoGen)
AutoGen 以智能体间对话为协作核心。Agent 之间通过消息传递进行协商、分工和任务执行,人类可以随时介入。
用户 ──消息──▶ 助手Agent ──代码──▶ 执行Agent
▲ │
└────────── 结果反馈 ────────────────┘对话驱动就像一个微信群:群里有不同专长的成员,有人提问,有人回答,有人执行,结果发回群里供所有人参考。沟通方式灵活,但缺乏严格流程约束。
优势:灵活度高,动态适应性强,适合探索性任务和人机协作。
③ 角色化(CrewAI)
CrewAI 模拟真实团队的工作模式,通过角色(Role)、任务(Task)、工具(Tool)三大核心组件定义协作。
┌──────────────────────────────────────┐
│ Crew (团队) │
│ ┌──────────┐ ┌──────────┐ │
│ │ 研究员 │ │ 撰写人 │ ... │
│ │ Agent │ │ Agent │ │
│ └────┬─────┘ └────┬─────┘ │
│ │ 顺序/层级 │ │
│ └──────┬──────┘ │
│ ▼ │
│ Task 完成 │
└──────────────────────────────────────┘角色化就像剧组拍电影:导演分配角色,演员按剧本走位,每个角色有明确的职责和出场顺序,最终共同完成一部作品。
优势:概念直观,角色分工明确,适合内容创作、业务流程自动化。
④ 工作流(Dify/Coze)
Dify 和 Coze 提供可视化拖拽式工作流编排,将每个步骤抽象为画布上的节点。
工作流就像用积木搭房子:你不需要写一行代码,只需要拖拽组件、连接连线,就能拼装出一个完整的 Agent 应用。
优势:零代码,业务人员可用,适合快速原型和非技术场景。
编排能力评分表
| 维度 | LangGraph | AutoGen | CrewAI | Dify | LlamaIndex | SK |
|---|---|---|---|---|---|---|
| 流程确定性 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ |
| 动态适应性 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ |
| 复杂流程支持 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ |
| 人机协作 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ | ⭐⭐ | ⭐⭐⭐ |
| 可视化程度 | ⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐ |
解读技巧:不存在"全五星"的框架。流程确定性高的框架往往动态适应性低——这就像高铁(确定性高但路线固定)和越野车(灵活但速度不稳定)的权衡。
编排范式选择指南:
| 你的需求特征 | 推荐编排范式 | 推荐框架 |
|---|---|---|
| 每一步都要可审计、可回溯 | 图编排 | LangGraph |
| Agent 间需要自由协商 | 对话驱动 | AutoGen |
| 任务天然有角色分工 | 角色化 | CrewAI |
| 业务人员需要可视化配置 | 工作流 | Dify/Coze |
| 简单的单 Agent + 工具调用 | 函数式 | LangChain |
混合编排:实际项目中,你可能会混合使用多种编排范式。例如,用 LangGraph 做整体流程控制(图编排),在某个节点内部用 CrewAI 做角色化协作(角色化),在需要人机交互的环节用 AutoGen 的对话模式。这种"编排范式组合"在复杂项目中很常见。
8.2.3 记忆系统(Memory)深度对比
记忆系统是 Agent 的"海马体",决定了 Agent 能否记住历史交互、学习用户偏好、积累领域知识。人脑有短期记忆、长期记忆和工作记忆之分,Agent 的记忆系统同样分层。
记忆层次模型
┌─────────────────────────────────────────────┐
│ 记忆系统层次模型 │
├─────────────────────────────────────────────┤
│ 短期记忆 (Short-term Memory) │
│ ├─ 当前对话上下文 │
│ ├─ 滑动窗口管理 │
│ └─ Token 预算控制 │
├─────────────────────────────────────────────┤
│ 长期记忆 (Long-term Memory) │
│ ├─ 向量数据库存储(Chroma, Pinecone, Milvus)│
│ ├─ 语义检索 │
│ └─ 结构化存储(关系型/文档型) │
├─────────────────────────────────────────────┤
│ 工作记忆 (Working Memory) │
│ ├─ 任务执行中间状态 │
│ ├─ 工具调用结果缓存 │
│ └─ 检查点/快照 │
└─────────────────────────────────────────────┘生活类比:短期记忆就像你正在打电话时脑子里记住的对话内容,挂了电话可能就忘了;长期记忆就像你的笔记本或百度网盘,存下来随时可以翻找;工作记忆则是你案头的草稿纸,记录当前正在做的工作的中间状态。
各框架记忆实现对比
LangChain/LangGraph:
- 短期记忆:
ConversationBufferMemory、ConversationSummaryMemory - 长期记忆:通过
VectorStore集成 Chroma、Pinecone、Weaviate 等 - LangGraph 特有:
Checkpointer实现状态持久化,支持时间旅行调试
AutoGen:
- 弱状态管理,依赖对话上下文
- 支持
Memory组件存储学习经验 - 2025 年新增
Teachability功能,Agent 可从交互中学习
CrewAI:
- 内置
Memory类,支持短期和长期记忆 - 记忆可跨任务共享
- 与 LangChain 的向量存储生态兼容
LlamaIndex:
- 记忆系统是其核心优势
ChatMemoryBuffer管理对话历史- 原生支持多种向量存储后端
IngestionPipeline实现数据持续摄入
Semantic Kernel:
SemanticTextMemory提供语义记忆- 支持 Azure Cognitive Search、Chroma 等后端
- 与 Microsoft 生态深度集成
下面以 LangGraph 的检查点机制为例,展示 Agent 如何实现跨会话的记忆持久化:
# LangGraph 检查点示例:实现对话记忆持久化
# 导入内存检查点保存器,用于在内存中持久化对话状态
from langgraph.checkpoint.memory import MemorySaver
# 导入图构建器、消息状态类型、起止节点标识
from langgraph.graph import StateGraph, MessagesState, START, END
# 创建内存检查点实例,每次图执行后自动保存状态快照
memory = MemorySaver()
# 编译图时传入 checkpointer,使图具备状态持久化能力
graph = graph_builder.compile(checkpointer=memory)
# 每次调用传入 thread_id,同一 thread_id 的请求共享记忆
config = {"configurable": {"thread_id": "user-123"}}
# 第一轮对话:告诉 Agent 用户的名字
graph.invoke({"messages": [{"role": "user", "content": "我叫小明"}]}, config)
# 状态被保存:thread_id="user-123" 的上下文中记录了"用户叫小明"
# 第二轮对话:Agent 从检查点恢复记忆,回答"你叫小明"
graph.invoke({"messages": [{"role": "user", "content": "我叫什么名字?"}]}, config)
# 输出:你叫小明 —— 因为 checkpointer 自动恢复了上一轮的对话历史关键理解:
thread_id是记忆隔离的关键。不同用户用不同thread_id,各自记忆互不干扰,就像酒店客房号一样,同一房号的客人的行李会保留,换房号则是全新的房间。
8.2.4 工具集成(Tool Use)深度对比
工具集成决定了 Agent 的"手"——能操作什么外部系统。一个没有工具的 Agent 只能"纸上谈兵",有了工具才能真正执行操作。
工具集成方式对比
| 框架 | 工具定义方式 | 协议支持 | 工具生态 |
|---|---|---|---|
| LangChain | @tool 装饰器 / StructuredTool | MCP、OpenAI Functions | 丰富的内置工具库 |
| LangGraph | 同 LangChain | MCP、OpenAI Functions | 同 LangChain 生态 |
| AutoGen | 函数注册 / register_function | OpenAI Functions | 代码执行沙箱 |
| CrewAI | Tool 类 / @tool 装饰器 | 基于 LangChain | LangChain 工具兼容 |
| LlamaIndex | FunctionTool / QueryEngineTool | OpenAI Functions | 专注数据工具 |
| SK | @kernel_function 装饰器 / Plugin | OpenAI Functions | Azure 生态集成 |
| Dify | 可视化配置 / 插件市场 | API 集成 | 丰富的插件市场 |
生活类比:工具集成方式就像不同品牌手机的充电接口——有的用 Type-C(通用标准),有的用 Lightning(专属生态),有的用 MagSafe(磁吸式)。MCP 协议正在成为 Agent 世界的"Type-C 标准"。
MCP 协议(Model Context Protocol)
2024 年底,Anthropic 推出的 MCP(Model Context Protocol) 正在成为 Agent 工具集成的标准协议。它定义了 LLM 与外部工具/数据源之间的统一接口,解决了"每个框架都要为每个工具写一遍适配代码"的痛点。
┌──────────┐ MCP协议 ┌──────────────┐
│ Agent │◄───────────▶│ MCP Server │
│ (Client) │ │ (Tool Provider)│
└──────────┘ └──────┬───────┘
│
┌───────────────────────┼───────────────────────┐
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ 数据库 │ │ 文件系统 │ │ API服务 │
└──────────┘ └──────────┘ └──────────┘# LangChain 中使用 MCP 工具
# 导入 MCP 多服务端客户端,用于同时连接多个 MCP Server
from langchain_mcp import MultiServerMCPClient
# 创建客户端,配置两个 MCP Server:文件系统和数据库
client = MultiServerMCPClient({
"filesystem": { # 文件系统工具:通过 npx 启动 MCP 文件系统服务
"command": "npx", # 使用 npx 运行 Node.js 包
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"], # 限定可访问目录为 /tmp
},
"database": { # 数据库工具:通过 Python 启动 MCP Postgres 服务
"command": "python", # 使用 python 运行模块
"args": ["-m", "mcp_server_postgres"], # 启动 Postgres MCP Server
},
})
# 异步获取所有可用工具(MCP Server 自动暴露其工具列表)
tools = await client.get_tools()
# 用获取到的工具创建 Agent
agent = create_agent(model="gpt-4o", tools=tools)MCP 的价值:以前你需要为每个框架写不同的工具适配代码——LangChain 一套、AutoGen 一套、CrewAI 一套。有了 MCP,你只需实现一次 MCP Server,所有支持 MCP 的框架都能直接使用。这就像 USB 接口统一之前,每个手机品牌都有自己专属的数据线。
三框架工具定义对比
下面用同一段"汇率转换"工具的代码,展示 LangChain、LlamaIndex、Semantic Kernel 三个框架的工具定义差异,帮助读者直观感受不同框架的 API 设计风格:
# ===== 工具:汇率转换 =====
# --- LangChain 版本 ---
from langchain.tools import tool # 导入 LangChain 的工具装饰器
@tool # 用装饰器将普通函数注册为 LangChain 工具
def convert_currency(amount: float, from_currency: str, to_currency: str) -> str:
"""将金额从一种货币转换为另一种货币(模拟汇率)"""
# 模拟汇率表,实际项目中应调用实时汇率 API
rates = {"USD": 1.0, "CNY": 7.2, "EUR": 0.92, "JPY": 150.0}
if from_currency not in rates or to_currency not in rates: # 货币代码校验
return "不支持的货币类型"
result = amount * rates[to_currency] / rates[from_currency] # 交叉汇率计算
return f"{amount} {from_currency} = {result:.2f} {to_currency}" # 格式化输出
# --- LlamaIndex 版本 ---
from llama_index.core.tools import FunctionTool # 导入 LlamaIndex 的工具类
def convert_currency_li(amount: float, from_currency: str, to_currency: str) -> str:
"""将金额从一种货币转换为另一种货币"""
rates = {"USD": 1.0, "CNY": 7.2, "EUR": 0.92, "JPY": 150.0}
result = amount * rates[to_currency] / rates[from_currency]
return f"{amount} {from_currency} = {result:.2f} {to_currency}"
# 通过 FunctionTool.from_defaults 将函数包装为 LlamaIndex 工具
li_tool = FunctionTool.from_defaults(fn=convert_currency_li) # 自动提取函数签名和文档字符串
# --- Semantic Kernel 版本 ---
import semantic_kernel as sk # 导入 Semantic Kernel
from semantic_kernel.functions import kernel_function # 导入函数装饰器
class CurrencyPlugin: # SK 使用 Plugin 类组织工具
@kernel_function(description="将金额从一种货币转换为另一种货币") # SK 的函数装饰器
def convert_currency(
self, amount: float, from_currency: str, to_currency: str
) -> str:
rates = {"USD": 1.0, "CNY": 7.2, "EUR": 0.92, "JPY": 150.0}
result = amount * rates[to_currency] / rates[from_currency]
return f"{amount} {from_currency} = {result:.2f} {to_currency}"
# 注册插件到 Kernel
kernel = sk.Kernel() # 创建 Kernel 实例
kernel.add_plugin(CurrencyPlugin(), "currency") # 注册为名为 "currency" 的插件对比要点:三个框架都能实现同样的功能,但 API 风格迥异。LangChain 用装饰器最简洁;LlamaIndex 用
FunctionTool.from_defaults包装普通函数;Semantic Kernel 要求将工具组织到 Plugin 类中,更面向对象。选择哪种风格取决于团队偏好。
8.2.5 可观测性(Observability)深度对比
可观测性是 Agent 的"眼睛",决定了开发者能否理解 Agent 的每一步决策。Agent 不同于传统程序——它的行为是非确定性的(同样的输入可能产生不同的输出),如果没有可观测性,出了问题就像大海捞针。
可观测性三大支柱
┌──────────────────────────────────────────────────────┐
│ 可观测性全景 │
├────────────────┬──────────────────┬──────────────────┤
│ 追踪(Trace) │ 日志(Log) │ 评估(Eval) │
├────────────────┼──────────────────┼──────────────────┤
│ · 执行链路追踪 │ · 结构化日志 │ · 输出质量评估 │
│ · Token消耗统计 │ · 错误诊断 │ · 延迟/成本监控 │
│ · 工具调用记录 │ · 调试信息 │ · A/B测试 │
│ · 模型选择记录 │ · 审计追踪 │ · 回归测试 │
└────────────────┴──────────────────┴──────────────────┘生活类比:追踪(Trace)就像快递物流信息——你能看到包裹从揽收到送达的每一步;日志(Log)像行车记录仪——记录每一刻发生了什么;评估(Eval)则是用户评分系统——统计满意率、平均送达时间,持续改进服务质量。
各框架可观测性方案
| 框架 | 原生方案 | 第三方集成 | 特点 |
|---|---|---|---|
| LangChain/LangGraph | LangSmith | Weights & Biases, MLflow | 最全面的可观测性平台 |
| AutoGen | AgentOps | 日志 | 内置对话追踪 |
| CrewAI | CrewAI Enterprise | LangSmith | 任务级追踪 |
| LlamaIndex | LlamaTrace | Arize, LangSmith | 查询级追踪 |
| Dify | 内置监控面板 | - | 可视化日志与监控 |
| SK | Application Insights | - | Azure 生态集成 |
LangSmith 深度解析
LangSmith 是 LangChain 官方提供的可观测性平台,是当前 Agent 生态中最成熟的追踪/评估工具:
- Trace 视图:完整展示 Agent 的每一步执行(LLM 调用、工具调用、检索步骤),像 X 光片一样透视 Agent 内部
- Token 统计:精确计算每次调用的 Token 消耗和成本,帮你看清"钱花在了哪里"
- 数据集与实验:支持创建测试数据集,运行 A/B 实验对比不同 prompt/模型
- Annotation Queue:人工标注队列,用于收集反馈和改进
生活类比:LangSmith 之于 Agent,就像行车记录仪之于汽车——你希望平时用不到它,但出了问题时它能帮你还原每一个细节。不同的是,LangSmith 还能帮你做"行车数据分析"(评估和优化)。
# LangSmith 追踪配置
import os
# 开启 LangChain V2 追踪,所有 LLM 调用自动上报到 LangSmith
os.environ["LANGCHAIN_TRACING_V2"] = "true"
# 配置 LangSmith API Key(在 smith.langchain.com 注册获取)
os.environ["LANGCHAIN_API_KEY"] = "ls__..."
# 设置项目名称,同一项目的追踪记录归为一组
os.environ["LANGCHAIN_PROJECT"] = "my-agent-project"
# 所有 LangChain/LangGraph 调用自动被追踪,无需额外代码
agent.invoke({"messages": [{"role": "user", "content": "你好"}]})
# 执行后,在 https://smith.langchain.com 查看完整追踪链路
# 包括:每一步的输入输出、耗时、Token 消耗、工具调用参数和返回值配置要点:只需设置三个环境变量,LangSmith 就会自动追踪所有 LangChain/LangGraph 的调用。这种"零代码侵入"的设计是 LangSmith 被广泛采用的重要原因。
8.2.6 常见误区
误区一:Star 数越高框架越好
GitHub Star 数反映的是关注热度,不是适用性。Dify 的 Star 数快速增长,但如果你需要的是精细的代码级流程控制,LangGraph 才是更好的选择——尽管它的 Star 数可能不如 Dify。
误区二:功能列表越全越好
"我需要的功能框架都有"听起来很美好,但功能越全意味着抽象层越厚、调试越难。一个只需要搜索+总结的简单 Agent,用 LangChain 的 5 行代码就能实现,引入 CrewAI 的角色化系统反而增加了不必要的复杂度。
误区三:可观测性是"以后再加"的事情
很多团队在开发阶段不配置追踪,等到上生产后发现 Agent 行为异常,完全没有调试线索。可观测性应该在第一天就配置好——它不是"锦上添花",而是"安全绳"。
误区四:MCP 还不成熟,先用传统方式
MCP 协议虽然 2024 年底才推出,但已经被 LangChain、Claude、Cursor 等主流生态采用。早期采用 MCP 意味着你的工具集成代码面向未来,避免了后续大规模迁移的成本。
误区五:记忆系统就是存对话历史
完整的记忆系统包括短期记忆(对话上下文管理)、长期记忆(向量存储的语义检索)、工作记忆(任务执行中间状态)。只存对话历史相当于只有短期记忆——Agent 记不住一周前学的东西。
8.2.7 本节小结
本节从编排能力、记忆系统、工具集成、可观测性四个维度,对主流 Agent 框架进行了深度横向对比:
- 编排能力是框架的核心差异点:LangGraph 以图驱动(确定性高),AutoGen 以对话驱动(灵活度高),CrewAI 以角色驱动(概念直观),Dify 以工作流驱动(零代码)
- 记忆系统分三层:短期记忆(对话上下文)、长期记忆(向量存储)、工作记忆(检查点/状态快照)
- MCP 协议正在成为 Agent 工具集成的标准,解决了"每个框架都要重新写工具适配"的问题
- LangSmith 是目前最成熟的 Agent 可观测性平台,提供追踪、评估、实验三大核心能力
- 框架选型时,应从编排能力 + 记忆系统 + 工具集成 + 可观测性四个维度综合评估
启后:有了上述四个维度的对比框架,我们已经知道"怎么看"各个框架的能力。但光知道能力对比还不够——下一节 8.3 将从工程实践角度,探讨如何设计规范的 Agent 项目结构,包括分层架构、配置管理、依赖注入与插件化设计,让你的 Agent 项目从"能跑的脚本"进化为"可维护的工程"。
参考资料
- LangChain & LangGraph 1.0 发布公告 - LangChain 官方,2025年10月,详细介绍 LangGraph 的检查点、状态管理、中间件等核心能力
- LangGraph vs Autogen vs CrewAI 全面对比 - CSDN,2025年,从协作模式、状态管理、工具集成等多维度对比三大框架
- A Comparative Study of AI Agent Orchestration Frameworks - ResearchGate,2024年,学术论文,系统对比了主流 Agent 编排框架
- LangSmith Changelog - LangChain 官方文档,持续更新,展示 LangSmith 可观测性平台的最新功能
- MCP 协议官方文档 - Anthropic,MCP 协议官网,Agent 工具集成的标准协议
- AutoGen 官方文档 - Memory - Microsoft,AutoGen 的记忆系统和 Teachability 功能说明