2024年是Agent框架的“寒武纪大爆发”,GitHub上超过1000 Stars的Agent相关仓库从14个猛增至89个,增长了535%。而到了2026年,格局已显著收敛,优胜劣汰之后的存活者各自占据了清晰的生态位。在这个收敛的过程中,LangChain、LlamaIndex、Dify分别以“底层编排能力”、“数据检索能力”和“低代码易用性”走上了截然不同的道路。

本文将从架构设计、核心功能、代码实战、适用场景等维度,对这三个框架进行深度对比,帮助你在实际项目中做出精准的选型决策。


一、定位差异:三条不同的路径

框架 类型定位 核心哲学 开发门槛
LangChain 底层开发框架 “少抽象,多控制”——通过图状态机提供极致灵活性 高(需编程)
LlamaIndex 数据框架 + RAG引擎 “数据是Agent智能的基石”——深耕数据连接与检索 高(需编程)
Dify 低代码可视化平台 “让非技术团队也能构建AI应用”——拖拽式编排 低(低代码)

这种定位差异,决定了三者适用的场景截然不同。LangChain选择在“易用性”和“生产就绪性”之间押注后者,LlamaIndex选择在“数据密集型Agent”这个垂直领域做到极致,Dify则选择用“降低门槛”来扩大受众。


二、LangChain:工业级Agent的“操作系统”

核心设计理念

LangGraph是LangChain生态中的底层编排框架,其核心哲学是**“少抽象,多控制”**。它不提供高层Agent抽象,而是提供最底层的原语——Node(节点)、Edge(边)、State(状态)——让开发者自行组合出任意复杂的执行图。

这种设计灵感来自Google的Pregel和Apache Beam。LangGraph本质上是一个有向图状态机:每个Node是一个计算单元(LLM调用、工具执行、自定义逻辑),Edge控制执行流向(支持条件分支),State是在所有节点间共享的持久化数据结构。

与其他框架的本质区别:LangGraph不做架构决策——它不预设Agent应该如何思考、如何协作。你需要自己设计状态模式、编排逻辑和错误处理。这带来了最高的灵活性,也意味着最陡峭的学习曲线。

核心能力速览

  • 多Agent编排:支持单Agent、多Agent层级、并行扇出/扇入模式,通过子图(subgraph)机制拆分复杂系统,不预设编排模式,开发者完全自定义。
  • 持久化与“时间旅行”:内置Checkpointer支持SQLite、PostgreSQL等后端的状态持久化,Checkpoint机制支持回溯到任意历史状态进行调试。
  • Human-in-the-Loop:内置interrupt()函数,可在任意节点暂停执行等待人工审批,恢复后从断点继续。
  • 可观测性:与LangSmith深度集成,提供完整的执行追踪,支持Mermaid图可视化执行路径。

代码实战:LangGraph构建多Agent协作

以下示例演示用LangGraph构建一个“研究员+编码员+评论员”的多Agent团队:

from typing import TypedDict, Annotated
from langgraph.graph import StateGraph, END
from langgraph.checkpoint import MemorySaver
from langchain_openai import ChatOpenAI
from langchain.agents import AgentExecutor, create_react_agent
from langchain.tools import Tool
import operator

# 1. 定义共享状态
class AgentState(TypedDict):
    task: str
    research: str
    code: str
    critique: str
    final_answer: str
    messages: Annotated[list, operator.add]

# 2. 初始化LLM
llm = ChatOpenAI(model="gpt-4o-mini")

# 3. 创建各Agent的工具
research_tools = [
    Tool(name="search", func=lambda x: f"搜索结果:关于'{x}'的相关资料...", description="搜索信息")
]
code_tools = [
    Tool(name="python_exec", func=lambda x: f"执行结果:{eval(x) if x.isdigit() else '代码执行完成'}", description="执行Python代码")
]

# 4. 定义Agent节点函数
def researcher(state: AgentState) -> AgentState:
    """研究员节点:收集信息"""
    prompt = f"请研究以下主题并提供详细资料:{state['task']}"
    response = llm.invoke(prompt)
    return {"research": response.content}

def coder(state: AgentState) -> AgentState:
    """编码员节点:基于研究结果编写代码"""
    prompt = f"""基于以下研究结果,编写解决方案代码:
    任务:{state['task']}
    研究结果:{state.get('research', '无')}
    """
    response = llm.invoke(prompt)
    return {"code": response.content}

def critic(state: AgentState) -> AgentState:
    """评论员节点:评估并提出改进意见"""
    prompt = f"""请评估以下代码方案的优缺点:
    代码:{state.get('code', '无')}
    """
    response = llm.invoke(prompt)
    return {"critique": response.content}

def synthesizer(state: AgentState) -> AgentState:
    """整合节点:汇总所有结果"""
    prompt = f"""综合以下所有信息,输出最终答案:
    任务:{state['task']}
    研究:{state.get('research', '')}
    代码:{state.get('code', '')}
    评论:{state.get('critique', '')}
    """
    response = llm.invoke(prompt)
    return {"final_answer": response.content}

# 5. 构建Graph
graph = StateGraph(AgentState)

# 添加节点
graph.add_node("researcher", researcher)
graph.add_node("coder", coder)
graph.add_node("critic", critic)
graph.add_node("synthesizer", synthesizer)

# 定义边(执行顺序)
graph.set_entry_point("researcher")
graph.add_edge("researcher", "coder")
graph.add_edge("coder", "critic")
graph.add_edge("critic", "synthesizer")
graph.add_edge("synthesizer", END)

# 6. 编译并运行
memory = MemorySaver()
app = graph.compile(checkpointer=memory)

result = app.invoke(
    {"task": "设计一个计算斐波那契数列第n项的Python函数,并分析其时间复杂度"},
    config={"configurable": {"thread_id": "session-001"}}
)

print("最终答案:", result.get("final_answer", ""))

LangChain的优势与不足

优势:生产成熟度业界领先——持久化执行、检查点、错误恢复机制完善,社区生态最大(LangChain主仓库126k Stars),企业用户包括Klarna、Replit、Elastic、Uber、LinkedIn等。

不足:学习曲线陡峭,有经验团队需2-3周才能写出生产级代码;LangGraph Platform为商业产品,完整生产能力需付费;LangSmith可观测服务同样需要付费。


三、LlamaIndex:RAG领域的“专业选手”

核心设计理念

LlamaIndex的核心哲学是**“数据是Agent智能的基石”**。在其他框架关注编排和协作时,LlamaIndex深耕数据连接——如何将正确的数据、在正确的时间、以正确的格式送入LLM。

LlamaIndex由两个核心层组成:数据层(300+数据连接器、丰富的索引结构、先进的检索引擎)和编排层(Workflows 1.0——事件驱动、异步优先的执行引擎)。其技术栈可划分为数据接入层、索引构建层、查询引擎层和应用接口层四个层次。

LlamaIndex不试图做通用Agent框架,而是在“数据密集型Agent”这个垂直领域做到极致。其LlamaParse是业界领先的文档解析引擎,支持130+文件格式,包括复杂表格、嵌入图片、手写笔记。

核心能力速览

  • Workflows 1.0:独立的事件驱动编排引擎,支持分支、循环、并行执行,使用类型化事件在步骤间传递信息,已独立为llama-index-workflows包。
  • RAG能力:支持混合检索(向量+关键词)、重排序、查询路由、多步查询分解,可结合BM25与向量检索提升关键词查询准确性。
  • LlamaParse:支持130+文件格式的高保真解析,是业界领先的文档解析引擎。
  • 数据连接器:LlamaHub提供300+社区贡献的数据连接器。

代码实战:构建企业级RAG系统

# 1. 安装依赖
# pip install llama-index llama-index-vector-stores-chroma chromadb

from llama_index.core import (
    SimpleDirectoryReader,
    VectorStoreIndex,
    Settings
)
from llama_index.vector_stores.chroma import ChromaVectorStore
from llama_index.core.postprocessor import SentenceTransformerRerank
from llama_index.core.node_parser import SentenceSplitter
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.llms.openai import OpenAI
import chromadb

# 2. 配置Embedding模型(使用国产中文模型更好适配信创环境)
Settings.embed_model = HuggingFaceEmbedding(
    model_name="BAAI/bge-small-zh-v1.5"
)
Settings.llm = OpenAI(model="gpt-4o-mini")

# 3. 加载并切分文档
documents = SimpleDirectoryReader("./knowledge_base").load_data()

# 4. 设置文本分块策略(建议200-500词,避免上下文断裂)
text_splitter = SentenceSplitter(chunk_size=512, chunk_overlap=50)

# 5. 创建Chroma向量存储
chroma_client = chromadb.PersistentClient(path="./chroma_db")
chroma_collection = chroma_client.get_or_create_collection("knowledge")
vector_store = ChromaVectorStore(chroma_collection=chroma_collection)

# 6. 构建索引
index = VectorStoreIndex.from_documents(
    documents,
    vector_store=vector_store,
    transformations=[text_splitter],
    show_progress=True
)

# 7. 配置检索器(使用重排序提升精度)
retriever = index.as_retriever(similarity_top_k=10)

# 8. 配置重排序器(Cross-Encoder二次排序)
reranker = SentenceTransformerRerank(
    model="cross-encoder/ms-marco-MiniLM-L-6-v2",
    top_n=3
)

# 9. 创建查询引擎
query_engine = index.as_query_engine(
    similarity_top_k=10,
    node_postprocessors=[reranker],
    response_mode="compact"  # 紧凑模式节省上下文
)

# 10. 执行查询
response = query_engine.query("公司最新的产品退换货政策是什么?")
print(f"回答:{response}")
print(f"来源:{[node.node.metadata.get('file_name') for node in response.source_nodes]}")

LlamaIndex的优势与不足

优势:RAG能力行业顶尖,在金融、法律等领域广泛验证;数据连接器生态无人能及;轻量级易魔改,可与LangChain无缝集成。

不足:通用Agent编排不如LangGraph灵活;Workflows 1.0刚独立,需更多生产验证;作为“Agent框架”的认知度不如其RAG定位。


四、Dify:低代码可视化的“先锋”

核心设计理念

Dify的定位与其他两者截然不同——它是一个低代码/零代码的AI应用开发平台,而非纯粹的开发框架。其核心目标是让非技术团队也能通过拖拽式操作构建AI应用。

Dify内置了完整的RAG、Agent、Workflow编排能力,同时提供了企业级的多租户管理、权限控制和私有化部署方案,支持Docker一键部署。

核心能力速览

  • 可视化Workflow编排:通过拖拽组合意图识别、知识检索、多轮对话管理等节点,某电商客服机器人案例中较传统编码方式减少72%的代码量。
  • 全模型生态支持:通过统一API接入各类参数规模的模型(7B-700B),模型切换耗时从4-8小时降至15分钟。
  • RAG引擎:支持语义检索、关键词检索(BM25)、混合检索三种策略,可自定义检索权重。
  • 代码节点:支持在工作流中嵌入Python/JavaScript代码执行数据转换、数学计算、结构化数据整合,执行环境被严格隔离(沙箱化)。

代码实战:Dify工作流的代码节点

Dify的代码节点允许在工作流中嵌入自定义Python脚本,用于数据处理和转换。

# Dify代码节点示例:处理HTTP响应并提取关键字段

def main(http_response: str) -> dict:
    import json
    from datetime import datetime
    
    # 解析API返回的JSON
    data = json.loads(http_response)
    
    # 提取关键字段并格式化
    result = {
        'id': data.get('data', {}).get('id', ''),
        'name': data.get('data', {}).get('name', ''),
        'category': data.get('data', {}).get('category', ''),
        'created_at': datetime.now().isoformat(),
        'processed': True
    }
    
    # 注意:输出变量需在Dify界面中预先声明
    return {
        'result': result
    }
# Dify代码节点示例:合并多个知识检索结果

def main(knowledge1: list, knowledge2: list) -> dict:
    """
    合并来自多个知识库的检索结果,去重并排序
    """
    # 合并两个列表
    combined = knowledge1 + knowledge2
    
    # 按score去重(保留最高分的)
    seen_ids = set()
    unique_results = []
    for item in sorted(combined, key=lambda x: x.get('score', 0), reverse=True):
        item_id = item.get('id', '')
        if item_id not in seen_ids:
            seen_ids.add(item_id)
            unique_results.append(item)
    
    return {
        'merged_results': unique_results[:10]  # 最多返回10条
    }

安全注意:Dify的代码节点执行环境被严格沙箱化,无法访问文件系统、发起网络请求或执行操作系统命令,确保恶意代码不会被执行。

Dify的优势与不足

优势:上手极快,非技术人员也能使用;Docker一键部署,企业级权限管理完善;提供模型仓库(50+预训练模型)、Workflow模板库(200+模板)、插件市场(150+插件)。

不足:检索召回效果一般(不如LlamaIndex专业);底层定制能力有限,无法深入修改核心逻辑;社区版无法去除版权信息。


五、选型决策指南

按场景选择

场景 推荐框架 理由
需要极致控制力的生产级多Agent系统 LangChain/LangGraph 图状态机提供最大灵活性,持久化和错误恢复机制完善
企业知识库、文档问答系统 LlamaIndex RAG能力行业顶尖,数据连接器生态最丰富
快速MVP验证、非技术团队 Dify 低代码拖拽式编排,一键部署,上手门槛极低
需要深度定制且对检索要求高的项目 LlamaIndex + LangChain 可无缝集成,LlamaIndex负责检索,LangChain负责编排

按团队能力选择

  • 无开发能力团队 → Dify(零代码/低代码,无需编程)
  • 有基础开发能力 → Dify(轻度开发即可上手)
  • 资深开发团队 → LangChain、LlamaIndex(需熟练编程,支持深度定制)

按私有化需求选择

  • 必须私有化部署 → Dify(Docker一键部署)、LlamaIndex、LangChain均可支持

六、写在最后

2026年的Agent框架格局已经从“百花齐放”走向“生态位分化”。

LangChain/LangGraph押注“控制力”,适合需要精细编排的复杂生产系统;LlamaIndex押注“数据”,适合对检索精度要求极高的RAG场景;Dify押注“易用性”,适合快速验证和非技术团队参与的项目。

选型没有绝对的对错。真正决定成败的,往往不是框架本身的细微性能差异,而是你的团队能不能驾驭它、你的业务场景能不能容忍它的限制

如果你正在做一个需要精细控制执行流程、持久化状态、支持人机协同的复杂Agent系统,LangGraph是难以绕过的选择。如果你需要处理海量文档、追求检索精度,LlamaIndex是不可或缺的利器。如果你需要快速上线、让产品和业务团队也能参与迭代,Dify是性价比最高的答案。

在做最终决定前,记住一句话:用自己的数据和场景做压测,别人的benchmark永远只是参考。

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐