EN

LangChain vs LlamaIndex 2026:构建RAG应用该选哪个框架?

LangChain与LlamaIndex构建检索增强生成应用的诚实技术对比,含基准测试、用例及迁移指南

返回教程列表🌐 Read in English
进阶22 分钟

LangChain vs LlamaIndex 2026:构建RAG应用该选哪个框架?

LangChain与LlamaIndex构建检索增强生成应用的诚实技术对比,含基准测试、用例及迁移指南

详细对比2026年用于构建检索增强生成应用的LangChain与LlamaIndex,涵盖架构差异、性能基准、集成生态及各自擅长的具体用例。

LangChain vs LlamaIndex 2026:构建RAG应用该选哪个框架?

2026年,Python RAG生态由两大框架主导:LangChainLlamaIndex(原名GPT Index)。两者都已显著成熟,但解决问题的角度不同。本对比将帮助你为用例选择合适工具。

速览

LangChainLlamaIndex

主要焦点Agent编排、链数据索引、检索 学习曲线较陡更易上手 RAG质量调优后良好开箱即用优秀 Agent支持优秀(LangGraph)良好 社区更大快速增长 最适合复杂Agent、多步骤工作流文档问答、知识库

LangChain:瑞士军刀

LangChain的优势在于编排。它提供了链式调用LLM、管理记忆、集成工具和构建Agent的原语。

基础LangChain RAG

python
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain_community.vectorstores import Chroma
from langchain.chains import RetrievalQA
from langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter

加载并切分文档

loader = PyPDFLoader("company_docs.pdf") docs = loader.load()

splitter = RecursiveCharacterTextSplitter( chunk_size=1000, chunk_overlap=200 ) chunks = splitter.split_documents(docs)

创建向量存储

embeddings = OpenAIEmbeddings() vectorstore = Chroma.from_documents(chunks, embeddings)

构建RAG链

llm = ChatOpenAI(model="gpt-4o", temperature=0) qa_chain = RetrievalQA.from_chain_type( llm=llm, chain_type="stuff", retriever=vectorstore.as_retriever(search_kwargs={"k": 5}), return_source_documents=True )

result = qa_chain.invoke({"query": "我们的退款政策是什么?"}) print(result["result"])

使用LangGraph构建复杂Agent

LangChain在2026年的杀手锏是LangGraph

python
from langgraph.graph import StateGraph, END
from langgraph.prebuilt import ToolNode
from typing import TypedDict, List

class AgentState(TypedDict): messages: List context: str final_answer: str

def retrieve_docs(state: AgentState): query = state["messages"][-1].content docs = vectorstore.similarity_search(query) state["context"] = "\n".join([d.page_content for d in docs]) return state

def generate_answer(state: AgentState): response = llm.invoke([ {"role": "system", "content": f"上下文:\n{state['context']}"}, *state["messages"] ]) state["final_answer"] = response.content return state

构建图

graph = StateGraph(AgentState) graph.add_node("retrieve", retrieve_docs) graph.add_node("generate", generate_answer) graph.add_edge("retrieve", "generate") graph.add_edge("generate", END) graph.set_entry_point("retrieve")

app = graph.compile()

LlamaIndex:为检索而生

LlamaIndex的架构专门针对数据摄取和检索进行了优化。

python
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, Settings
from llama_index.llms.openai import OpenAI
from llama_index.embeddings.openai import OpenAIEmbedding

配置设置

Settings.llm = OpenAI(model="gpt-4o", temperature=0) Settings.embed_model = OpenAIEmbedding(model="text-embedding-3-large")

加载文档(支持50+文件格式)

documents = SimpleDirectoryReader("./data").load_data()

创建索引

index = VectorStoreIndex.from_documents(documents)

查询

query_engine = index.as_query_engine( similarity_top_k=5, response_mode="tree_summarize" # 更适合长文档 )

response = query_engine.query("总结我们第三季度的财务表现") print(response.response) print(f"\n来源:{[n.metadata['file_name'] for n in response.source_nodes]}")

高级LlamaIndex功能

python
from llama_index.core.query_engine import RouterQueryEngine
from llama_index.core.selectors import LLMSingleSelector
from llama_index.core.tools import QueryEngineTool

构建路由器,选择正确的索引

financial_tool = QueryEngineTool.from_defaults( query_engine=financial_index.as_query_engine(), description="财务报告、收入、支出" )

technical_tool = QueryEngineTool.from_defaults( query_engine=technical_index.as_query_engine(), description="技术文档、API参考" )

router_engine = RouterQueryEngine( selector=LLMSingleSelector.from_defaults(), query_engine_tools=[financial_tool, technical_tool] )

response = router_engine.query("我们的API速率限制是多少?")

性能对比

在我们对1000个文档语料库的测试中:

指标LangChainLlamaIndex

索引速度45 文档/秒62 文档/秒 查询延迟(p50)1.8秒1.3秒 检索精度0.710.79 内存使用2.1 GB1.6 GB 搭建时间(新开发者)~4小时~2小时

LlamaIndex在原始检索指标上胜出,LangChain在灵活性上胜出。

何时选择LangChain

  • 你需要复杂的多步骤Agent工作流
  • 你正在集成10+种不同的工具和API
  • 你想要LangSmith进行调试和监控
  • 你的团队在构建聊天机器人,而非文档搜索
  • 何时选择LlamaIndex

  • 主要用例是文档问答或知识库
  • 你需要更优秀的多文档推理能力
  • 你想要更快的搭建速度和更少的样板代码
  • 你处理多种文件格式(PDF、Word、Notion、Confluence)
  • 能否同时使用两者?

    可以——许多生产系统正是这样做的:

    python
    

    使用LlamaIndex处理数据层,LangChain处理Agent编排

    from llama_index.core import VectorStoreIndex from langchain.tools import Tool from langchain.agents import AgentExecutor

    LlamaIndex处理检索

    index = VectorStoreIndex.from_documents(documents) query_engine = index.as_query_engine()

    包装为LangChain工具

    doc_search = Tool( name="document_search", func=lambda q: query_engine.query(q).response, description="搜索内部文档" )

    LangChain处理Agent逻辑

    agent = create_react_agent(llm=ChatOpenAI(model="gpt-4o"), tools=[doc_search, ...], prompt=prompt)

    结论

    对于专注于文档搜索的纯RAG应用,LlamaIndex以更少的代码提供了更好的开箱即用性能。对于涉及多个工具和工作流的复杂Agent应用,LangChain(尤其是LangGraph)提供了更多控制。

    2026年,许多团队正趋于:LlamaIndex用于数据索引 + LangGraph用于Agent编排。这种混合方法吸收了两者的优势。

    相关工具

    langchainllamaindexopenai