LangChain vs LlamaIndex 2026:构建RAG应用该选哪个框架?
LangChain与LlamaIndex构建检索增强生成应用的诚实技术对比,含基准测试、用例及迁移指南
LangChain vs LlamaIndex 2026:构建RAG应用该选哪个框架?
LangChain与LlamaIndex构建检索增强生成应用的诚实技术对比,含基准测试、用例及迁移指南
详细对比2026年用于构建检索增强生成应用的LangChain与LlamaIndex,涵盖架构差异、性能基准、集成生态及各自擅长的具体用例。
LangChain vs LlamaIndex 2026:构建RAG应用该选哪个框架?
2026年,Python RAG生态由两大框架主导:LangChain 和 LlamaIndex(原名GPT Index)。两者都已显著成熟,但解决问题的角度不同。本对比将帮助你为用例选择合适工具。
速览
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, Listclass 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个文档语料库的测试中:
LlamaIndex在原始检索指标上胜出,LangChain在灵活性上胜出。
何时选择LangChain
何时选择LlamaIndex
能否同时使用两者?
可以——许多生产系统正是这样做的:
python
使用LlamaIndex处理数据层,LangChain处理Agent编排
from llama_index.core import VectorStoreIndex
from langchain.tools import Tool
from langchain.agents import AgentExecutorLlamaIndex处理检索
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编排。这种混合方法吸收了两者的优势。
相关工具
相关教程
通过 LlamaIndex 摄取管道和查询引擎将 LLM 连接到您的文档
为生产级LLM应用选择合适的RAG框架
两大领先LLM框架深度对比
使用现代 Python AI 栈构建生产级 AI 应用
从零构建结合向量与关键词搜索、实现最大召回率的RAG系统
从零构建用于多跳推理的知识图谱遍历RAG系统