框架对比与选型
选择合适的 Agent 框架是项目成功的关键。本章将从多个维度对比主流框架,并提供选型决策指南。
一、框架全景对比
1.1 功能对比矩阵
┌─────────────────────────────────────────────────────────────────────┐
│ Agent 框架功能对比矩阵 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ┌───────────────────────────────────────────────────────────────┐│
│ │ 功能完整度 ││
│ │ ││
│ │ LangChain ████████████████████████░░ 85% ││
│ │ LlamaIndex ████████████████████░░░░░░ 80% ││
│ │ LangGraph █████████████████████████░ 95% ││
│ │ AutoGPT ████████████████░░░░░░░░░░ 65% ││
│ │ Semantic K. ███████████████████░░░░░░░ 75% ││
│ │ ││
│ └───────────────────────────────────────────────────────────────┘│
│ │
│ ┌───────────────────────────────────────────────────────────────┐│
│ │ 易用性 ││
│ │ ││
│ │ LlamaIndex ████████████████████████░░ 高 ││
│ │ Semantic K. ██████████████████████░░░░ 高 ││
│ │ LangChain ████████████████████░░░░░░ 中 ││
│ │ LangGraph ████████████████░░░░░░░░░░ 中 ││
│ │ AutoGPT ████████████░░░░░░░░░░░░░░ 低 ││
│ │ ││
│ └───────────────────────────────────────────────────────────────┘│
│ │
│ ┌───────────────────────────────────────────────────────────────┐│
│ │ 生产就绪度 ││
│ │ ││
│ │ LangChain ████████████████████████░░ 高 ││
│ │ Semantic K. ███████████████████████░░░ 高 ││
│ │ LlamaIndex █████████████████████░░░░░ 高 ││
│ │ LangGraph ███████████████████░░░░░░░ 中高 ││
│ │ AutoGPT ████████████░░░░░░░░░░░░░░ 低 ││
│ │ ││
│ └───────────────────────────────────────────────────────────────┘│
│ │
└─────────────────────────────────────────────────────────────────────┘1.2 详细对比表
| 对比维度 | LangChain | LlamaIndex | LangGraph | AutoGPT | Semantic Kernel |
|---|---|---|---|---|---|
| 核心定位 | 通用 Agent | RAG 专精 | 工作流编排 | 自主 Agent | 企业级 SDK |
| 主要语言 | Python/JS | Python | Python | Python | C#/Python |
| 学习曲线 | 中等 | 较低 | 中等 | 较低 | 中等 |
| 文档质量 | 优秀 | 优秀 | 良好 | 一般 | 良好 |
| 社区活跃度 | 非常高 | 高 | 高 | 中 | 中 |
| 工具生态 | 丰富 | 数据连接器丰富 | 复用 LangChain | 内置工具 | 技能系统 |
| 状态管理 | 基础 | 基础 | 强大 | 文件系统 | 内存 |
| 可观测性 | LangSmith | 基础 | 原生支持 | 基础 | 基础 |
| 人机协作 | 基础 | 无 | 原生支持 | 基础 | 基础 |
1.3 场景适配表
┌─────────────────────────────────────────────────────────────────────┐
│ 场景适配矩阵 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ 场景 最佳选择 备选方案 │
│ ──────────────────────────────────────────────────────────────── │
│ │
│ RAG / 知识库问答 LlamaIndex LangChain │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ • LlamaIndex: 数据连接和索引能力最强 │ │
│ │ • LangChain: 也可以做 RAG,但需要更多配置 │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
│ 复杂工作流 LangGraph AutoGen │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ • LangGraph: 图状流程,支持循环、分支、并行 │ │
│ │ • AutoGen: 多 Agent 对话协作 │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
│ 快速原型 LangChain LlamaIndex │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ • LangChain: 开箱即用的组件多 │ │
│ │ • LlamaIndex: RAG 原型特别快 │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
│ 企业级应用 Semantic Kernel LangChain │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ • Semantic Kernel: 微软生态,Azure 集成 │ │
│ │ • LangChain: 成熟稳定,社区大 │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
│ 自主任务执行 AutoGPT LangGraph │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ • AutoGPT: 经典的自主 Agent 实现 │ │
│ │ • LangGraph: 可实现自主循环 │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
│ 多 Agent 协作 AutoGen/CrewAI LangGraph │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ • AutoGen: 微软出品,对话式协作 │ │
│ │ • CrewAI: 角色扮演式协作 │ │
│ │ • LangGraph: 图状协作 │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
│ .NET 技术栈 Semantic Kernel - │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ • Semantic Kernel: 唯一支持 C# 的主流框架 │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────┘二、深入对比分析
2.1 架构设计对比
┌─────────────────────────────────────────────────────────────┐
│ 架构设计对比 │
├─────────────────────────────────────────────────────────────┤
│ │
│ LangChain: 链式架构 │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ Prompt → LLM → Parser → Chain → Agent │ │
│ │ │ │
│ │ 特点: │ │
│ │ • 组件化设计,模块可组合 │ │
│ │ • LCEL 提供声明式语法 │ │
│ │ • Chain 是核心抽象 │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ LlamaIndex: 数据管道架构 │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ Loader → Parser → Index → Retriever → Engine │ │
│ │ │ │
│ │ 特点: │ │
│ │ • 数据流为中心 │ │
│ │ • Index 是核心抽象 │ │
│ │ • 专为 RAG 优化 │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ LangGraph: 图状态架构 │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ State → Node → Edge → Conditional Edge → Loop │ │
│ │ │ │
│ │ 特点: │ │
│ │ • 显式状态管理 │ │
│ │ • 支持循环和分支 │ │
│ │ • 可调试性强 │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ Semantic Kernel: 技能规划架构 │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ Ask → Planner → Skills → Result │ │
│ │ │ │
│ │ 特点: │ │
│ │ • 技能系统为核心 │ │
│ │ • 自动规划执行 │ │
│ │ • 代码与 AI 融合 │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘2.2 核心概念映射
| 概念 | LangChain | LlamaIndex | LangGraph | Semantic Kernel |
|---|---|---|---|---|
| 功能单元 | Tool | - | Node | Skill |
| 流程编排 | Chain | Query Engine | Graph | Plan |
| 决策引擎 | Agent | - | Conditional Edge | Planner |
| 数据存储 | Memory | Index/Store | State | Memory |
| 模板系统 | PromptTemplate | - | - | 内置 |
| 模型封装 | BaseLLM | LLM | - | Connector |
2.3 代码风格对比
"""
不同框架的代码风格对比
以简单的问答应用为例
"""
# ========== LangChain 风格 ==========
from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain.schema.output_parser import StrOutputParser
# 使用 LCEL
llm = ChatOpenAI(model="gpt-4")
prompt = ChatPromptTemplate.from_template("请回答:{question}")
chain = prompt | llm | StrOutputParser()
result = chain.invoke({"question": "什么是 AI?"})
# ========== LlamaIndex 风格 ==========
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
# 加载文档并创建索引
documents = SimpleDirectoryReader("./docs").load_data()
index = VectorStoreIndex.from_documents(documents)
# 查询
query_engine = index.as_query_engine()
result = query_engine.query("什么是 AI?")
# ========== LangGraph 风格 ==========
from langgraph.graph import StateGraph, END
# 定义状态
class State(TypedDict):
question: str
answer: str
# 定义节点
def answer_node(state: State):
answer = llm.invoke(state["question"])
return {"answer": answer}
# 构建图
graph = StateGraph(State)
graph.add_node("answer", answer_node)
graph.set_entry_point("answer")
graph.add_edge("answer", END)
app = graph.compile()
result = app.invoke({"question": "什么是 AI?"})
# ========== Semantic Kernel 风格 ==========
import semantic_kernel as sk
# 创建 Kernel
kernel = sk.Kernel()
kernel.add_chat_service("gpt", OpenAIChatCompletion(...))
# 定义技能
@sk.sk_function(description="回答问题")
def answer(question: str) -> str:
return kernel.run_async(question)
# 执行
result = await kernel.run_async(answer, input="什么是 AI?")三、选型决策指南
3.1 决策流程图
┌─────────────────────────────────────────────────────────────┐
│ 框架选型决策流程 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ │
│ │ 项目类型? │ │
│ └──────┬──────┘ │
│ │ │
│ ┌──────────────────┼──────────────────┐ │
│ ↓ ↓ ↓ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ RAG/检索 │ │ Agent/ │ │ 企业级 │ │
│ │ 类应用 │ │ 工作流 │ │ 应用 │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │ │
│ ↓ │ ↓ │
│ ┌─────────────┐ │ ┌─────────────┐ │
│ │ LlamaIndex │ │ │ Semantic K. │ │
│ │ 或 │ │ │ 或 │ │
│ │ LangChain │ │ │ LangChain │ │
│ └─────────────┘ │ └─────────────┘ │
│ │ │
│ ↓ │
│ ┌─────────────┐ │
│ │ 工作流复杂度│ │
│ └──────┬──────┘ │
│ │ │
│ ┌───────────────┼───────────────┐ │
│ ↓ ↓ ↓ │
│ ┌───────────┐ ┌───────────┐ ┌───────────┐ │
│ │ 简单 │ │ 中等 │ │ 复杂 │ │
│ │ 链式流程 │ │ 条件分支 │ │ 循环/并行 │ │
│ └─────┬─────┘ └─────┬─────┘ └─────┬─────┘ │
│ │ │ │ │
│ ↓ ↓ ↓ │
│ ┌───────────┐ ┌───────────┐ ┌───────────┐ │
│ │ LangChain │ │ LangChain │ │ LangGraph │ │
│ │ Chain │ │ + │ │ │ │
│ │ │ │ LangGraph │ │ │ │
│ └───────────┘ └───────────┘ └───────────┘ │
│ │
│ 其他考虑因素: │
│ ┌─────────────────────────────────────────────────────┐│
│ │ • 团队技术栈:Python 选 LangChain,C# 选 SK ││
│ │ • 云服务商:Azure 选 SK,其他选 LangChain ││
│ │ • 学习时间:快速入门选 LlamaIndex ││
│ │ • 生产需求:选成熟的 LangChain 或 SK ││
│ └─────────────────────────────────────────────────────┘│
│ │
└─────────────────────────────────────────────────────────────┘3.2 选型检查清单
┌─────────────────────────────────────────────────────────────┐
│ 框架选型检查清单 │
├─────────────────────────────────────────────────────────────┤
│ │
│ □ 1. 项目需求 │
│ □ 是否需要 RAG? │
│ □ 是否需要复杂工作流? │
│ □ 是否需要多 Agent 协作? │
│ □ 是否需要人机交互? │
│ │
│ □ 2. 团队能力 │
│ □ 团队熟悉的技术栈是什么? │
│ □ 是否有 AI/ML 背景? │
│ □ 学习时间预算是多少? │
│ │
│ □ 3. 技术约束 │
│ □ 是否需要私有化部署? │
│ □ 是否有特定的云服务依赖? │
│ □ 是否需要特定的向量数据库? │
│ │
│ □ 4. 生产要求 │
│ □ 是否需要可观测性? │
│ □ 是否需要高可用? │
│ □ 是否需要成本控制? │
│ │
│ □ 5. 长期考量 │
│ □ 框架是否持续维护? │
│ □ 社区是否活跃? │
│ □ 是否有足够的文档和示例? │
│ │
└─────────────────────────────────────────────────────────────┘3.3 组合使用建议
┌─────────────────────────────────────────────────────────────┐
│ 框架组合使用 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 组合 1: LangChain + LlamaIndex │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ LlamaIndex 负责 RAG 检索 │ │
│ │ ↓ │ │
│ │ LangChain 负责 Agent 和工具调用 │ │
│ │ ↓ │ │
│ │ 完整的 RAG + Agent 应用 │ │
│ │ │ │
│ │ 适用:需要 RAG + 复杂 Agent 的场景 │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ 组合 2: LangChain + LangGraph │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ LangChain 提供工具和 LLM 封装 │ │
│ │ ↓ │ │
│ │ LangGraph 负责工作流编排 │ │
│ │ ↓ │ │
│ │ 复杂工作流 Agent 应用 │ │
│ │ │ │
│ │ 适用:复杂多步骤工作流场景 │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ 组合 3: LangChain + 自定义 │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ LangChain 作为基础框架 │ │
│ │ ↓ │ │
│ │ 自定义组件扩展 │ │
│ │ ↓ │ │
│ │ 定制化 Agent 系统 │ │
│ │ │ │
│ │ 适用:有特殊需求的企业应用 │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘四、发展趋势
4.1 框架演进方向
┌─────────────────────────────────────────────────────────────┐
│ Agent 框架发展趋势 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 1. 更强的状态管理 │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ • 显式状态定义成为标准 │ │
│ │ • 持久化和恢复能力增强 │ │
│ │ • 跨会话状态管理 │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ 2. 更好的可观测性 │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ • 内置追踪和监控 │ │
│ │ • 成本和 Token 统计 │ │
│ │ • 调试和可视化工具 │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ 3. 多模态支持 │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ • 图像理解和生成 │ │
│ │ • 音频处理 │ │
│ │ • 视频分析 │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ 4. 低代码/无代码化 │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ • 可视化流程编排 │ │
│ │ • 自然语言定义 Agent │ │
│ │ • 拖拽式工具集成 │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ 5. 标准化 │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ • 工具定义标准(如 MCP) │ │
│ │ • Agent 通信协议 │ │
│ │ • 评估基准 │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘4.2 选型建议更新
┌─────────────────────────────────────────────────────────────┐
│ 2024-2025 选型建议 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 新项目推荐: │
│ │
│ • RAG 应用:LlamaIndex(成熟稳定) │
│ • 复杂 Agent:LangGraph(灵活性高) │
│ • 快速原型:LangChain(生态丰富) │
│ • 企业 .NET:Semantic Kernel(微软支持) │
│ │
│ 不推荐: │
│ │
│ • 生产环境使用 AutoGPT(可靠性不足) │
│ • 纯研究项目使用过于复杂的框架 │
│ │
│ 关注中的新框架: │
│ │
│ • AutoGen(多 Agent 协作) │
│ • CrewAI(角色扮演协作) │
│ • MetaGPT(软件开发专用) │
│ │
└─────────────────────────────────────────────────────────────┘五、面试问答
Q1: LangChain 和 LlamaIndex 如何选择?
回答要点:
-
选择 LlamaIndex:
- 主要需求是 RAG/知识库问答
- 需要处理大量文档
- 重视检索质量
-
选择 LangChain:
- 需要完整的 Agent 能力
- 需要丰富的工具集成
- 需要灵活的工作流
-
组合使用:
- LlamaIndex 做 RAG
- LangChain 做 Agent
Q2: LangGraph 相比 LangChain Chain 有什么优势?
回答要点:
| 特性 | LangChain Chain | LangGraph |
|---|---|---|
| 流程类型 | 线性 | 图状(循环、分支、并行) |
| 状态管理 | 隐式 | 显式 TypedDict |
| 可调试性 | 中等 | 高 |
| 人机协作 | 不支持 | 原生支持 |
| 持久化 | 无 | 内置检查点 |
Q3: 如何评估一个 Agent 框架是否适合生产环境?
回答要点:
- 稳定性:框架是否经过大规模生产验证
- 可观测性:是否有日志、追踪、监控能力
- 扩展性:是否支持自定义组件
- 社区支持:问题能否快速得到解答
- 维护状态:框架是否持续更新
Q4: 多 Agent 协作应该选择哪个框架?
回答要点:
- AutoGen:微软出品,对话式协作,适合研究
- CrewAI:角色扮演模式,适合业务流程
- LangGraph:图状协作,适合复杂工作流
- MetaGPT:软件开发专用,适合代码生成
六、小结
框架选型是项目成功的关键:
核心要点
- 没有万能框架:根据场景选择最合适的
- 可以组合使用:利用各框架的优势
- 关注发展趋势:选择持续维护的框架
选型原则
- 简单场景选简单框架
- 复杂场景选灵活框架
- 企业应用选成熟框架
- 实验项目选活跃框架
下一步
- 根据项目需求,对照检查清单进行选型
- 尝试搭建原型,验证框架适配度
- 关注框架更新,及时调整策略