Skip to content

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 应用。

优势:零代码,业务人员可用,适合快速原型和非技术场景。

编排能力评分表
维度LangGraphAutoGenCrewAIDifyLlamaIndexSK
流程确定性⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
动态适应性⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
复杂流程支持⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
人机协作⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
可视化程度⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐

解读技巧:不存在"全五星"的框架。流程确定性高的框架往往动态适应性低——这就像高铁(确定性高但路线固定)和越野车(灵活但速度不稳定)的权衡。

编排范式选择指南

你的需求特征推荐编排范式推荐框架
每一步都要可审计、可回溯图编排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

  • 短期记忆:ConversationBufferMemoryConversationSummaryMemory
  • 长期记忆:通过 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 如何实现跨会话的记忆持久化:

python
# 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 装饰器 / StructuredToolMCP、OpenAI Functions丰富的内置工具库
LangGraph同 LangChainMCP、OpenAI Functions同 LangChain 生态
AutoGen函数注册 / register_functionOpenAI Functions代码执行沙箱
CrewAITool 类 / @tool 装饰器基于 LangChainLangChain 工具兼容
LlamaIndexFunctionTool / QueryEngineToolOpenAI Functions专注数据工具
SK@kernel_function 装饰器 / PluginOpenAI FunctionsAzure 生态集成
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服务  │
  └──────────┘           └──────────┘           └──────────┘
python
# 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 设计风格:

python
# ===== 工具:汇率转换 =====

# --- 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/LangGraphLangSmithWeights & Biases, MLflow最全面的可观测性平台
AutoGenAgentOps日志内置对话追踪
CrewAICrewAI EnterpriseLangSmith任务级追踪
LlamaIndexLlamaTraceArize, LangSmith查询级追踪
Dify内置监控面板-可视化日志与监控
SKApplication Insights-Azure 生态集成

LangSmith 深度解析

LangSmith 是 LangChain 官方提供的可观测性平台,是当前 Agent 生态中最成熟的追踪/评估工具:

  • Trace 视图:完整展示 Agent 的每一步执行(LLM 调用、工具调用、检索步骤),像 X 光片一样透视 Agent 内部
  • Token 统计:精确计算每次调用的 Token 消耗和成本,帮你看清"钱花在了哪里"
  • 数据集与实验:支持创建测试数据集,运行 A/B 实验对比不同 prompt/模型
  • Annotation Queue:人工标注队列,用于收集反馈和改进

生活类比:LangSmith 之于 Agent,就像行车记录仪之于汽车——你希望平时用不到它,但出了问题时它能帮你还原每一个细节。不同的是,LangSmith 还能帮你做"行车数据分析"(评估和优化)。

python
# 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 框架进行了深度横向对比:

  1. 编排能力是框架的核心差异点:LangGraph 以图驱动(确定性高),AutoGen 以对话驱动(灵活度高),CrewAI 以角色驱动(概念直观),Dify 以工作流驱动(零代码)
  2. 记忆系统分三层:短期记忆(对话上下文)、长期记忆(向量存储)、工作记忆(检查点/状态快照)
  3. MCP 协议正在成为 Agent 工具集成的标准,解决了"每个框架都要重新写工具适配"的问题
  4. LangSmith 是目前最成熟的 Agent 可观测性平台,提供追踪、评估、实验三大核心能力
  5. 框架选型时,应从编排能力 + 记忆系统 + 工具集成 + 可观测性四个维度综合评估

启后:有了上述四个维度的对比框架,我们已经知道"怎么看"各个框架的能力。但光知道能力对比还不够——下一节 8.3 将从工程实践角度,探讨如何设计规范的 Agent 项目结构,包括分层架构、配置管理、依赖注入与插件化设计,让你的 Agent 项目从"能跑的脚本"进化为"可维护的工程"。

参考资料

  1. LangChain & LangGraph 1.0 发布公告 - LangChain 官方,2025年10月,详细介绍 LangGraph 的检查点、状态管理、中间件等核心能力
  2. LangGraph vs Autogen vs CrewAI 全面对比 - CSDN,2025年,从协作模式、状态管理、工具集成等多维度对比三大框架
  3. A Comparative Study of AI Agent Orchestration Frameworks - ResearchGate,2024年,学术论文,系统对比了主流 Agent 编排框架
  4. LangSmith Changelog - LangChain 官方文档,持续更新,展示 LangSmith 可观测性平台的最新功能
  5. MCP 协议官方文档 - Anthropic,MCP 协议官网,Agent 工具集成的标准协议
  6. AutoGen 官方文档 - Memory - Microsoft,AutoGen 的记忆系统和 Teachability 功能说明