LangChain与LlamaIndex框架实战——从快速原型到生产级RAG应用

📅 2026/7/9 4:06:01
LangChain与LlamaIndex框架实战——从快速原型到生产级RAG应用
开篇总述为什么2026年RAG开发离不开框架在本篇文章中我们将系统性地拆解三个核心问题第一LangChain和LlamaIndex的设计哲学差异是什么各自的适用场景是什么第二如何用这两个框架分别快速搭建一个完整的RAG应用第三2026年最成熟的实践方案是什么——为什么“LlamaIndex做检索LangGraph做编排”正在成为主流架构读完这篇文章你将获得一套清晰的框架选型决策方法和可直接运行的代码范例。分述一LangChain vs LlamaIndex——理解“基因”差异LangChain通用AI应用开发框架LangChain的设计哲学是“通用”和“灵活”。它试图解决所有AI应用的通用问题——如何调用LLM、如何处理Prompt、如何接入各种API、如何编排多步骤工作流。这种“万能”在复杂场景下是优势但在RAG这个特定场景下往往变成了负担。LangChain的核心抽象Chain链、Agent智能体、Tool工具、Memory记忆。通过把这些组件像“乐高积木”一样拼接起来你可以构建任意复杂的AI工作流。LangChain 1.x的关键变化2026年LangChain 1.x完成了“推倒重来”式重构。底层从DAG有向无环图升级为LangGraph的图结构支持循环、分支、人工介入十几种Agent API被统一为create_agent智能体能力从“线性链式调用”进化为真正的ReAct推理循环。LlamaIndex专注RAG的“数据框架”LlamaIndex的定位则截然不同——它的口号是“Data Framework for LLM”一切设计都围绕着“如何让数据更好地被检索到”。LlamaIndex的核心抽象Index索引、Retriever检索器、Query Engine查询引擎、Node节点。它的概念非常“直觉化”——数据摄入→构建索引→检索→生成这条线性流程天然符合RAG工程师的思维方式。LlamaIndex的差异化优势内置了极其丰富的Reader数据读取器和Node Parser节点解析器。同样是一份包含合并单元格的Excel财务报表LangChain解析出来是一团乱麻而LlamaIndex的PandasExcelReader几乎是零配置直接生成结构化数据。此外LlamaIndex的IngestionPipeline允许你像搭乐高一样配置清洗、转换、嵌入的步骤这种体验是LangChain无法比拟的。核心对比速查表维度LangChainLlamaIndex设计哲学通用AI应用开发框架瑞士军刀RAG专用引擎精密手术刀核心抽象Chain / Agent / Tool / MemoryIndex / Retriever / Query Engine数据处理高度灵活但需手写大量自定义逻辑内置丰富解析器和优化好的数据管线开发体验极度灵活但调试像“走迷宫”API直观开箱即用痛点文档碎片化、版本更新快、易产生“链地狱”Agent定制化能力较弱生态不如LangChain庞大2026年定位适合构建复杂的多工具Agent工作流适合90%的纯RAG知识库场景分述二实战一——用LlamaIndex快速搭建RAG知识库如果你要构建一个企业内部知识库问答系统这是90%的企业RAG需求LlamaIndex是毫无疑问的首选。以下是最小可用实现的完整代码。环境准备pip install llama-index-core llama-index-llms-openai chromadb数据加载与索引构建LlamaIndex最核心的“杀手级”功能是SimpleDirectoryReader——一行代码加载整个文件夹的文档自动识别PDF、Word、Markdown等20种格式。from llama_index.core import VectorStoreIndex, SimpleDirectoryReader from llama_index.llms.openai import OpenAI # 1. 加载文档——一行代码搞定PDF/Word/Markdown documents SimpleDirectoryReader(knowledge_base/).load_data() # 2. 构建向量索引——内置分块、向量化全自动 index VectorStoreIndex.from_documents(documents) # 3. 创建查询引擎——开箱即用的RAG问答 query_engine index.as_query_engine() # 4. 开始问答 response query_engine.query(公司的年假政策是什么) print(response)就这么简单。LlamaIndex在后台自动完成了文档解析→分块→向量化→存入向量库→检索→生成的全链路。进阶自定义分块策略与检索参数from llama_index.core.node_parser import SimpleNodeParser from llama_index.core import StorageContext from llama_index.vector_stores import ChromaVectorStore import chromadb # 自定义分块参数——块大小512 Token重叠20 parser SimpleNodeParser.from_defaults( chunk_size512, chunk_overlap50, ) # 持久化向量库 chroma_client chromadb.PersistentClient(path./chroma_db) vector_store ChromaVectorStore(chroma_clientchroma_client, collection_namedocs) # 构建索引 storage_context StorageContext.from_defaults(vector_storevector_store) index VectorStoreIndex.from_documents( documents, node_parserparser, storage_contextstorage_context, ) # 高级检索Top-5 相似度阈值 retriever index.as_retriever(similarity_top_k5, similarity_cutoff0.7)混合检索2026年进阶功能纯向量检索在处理精确术语如产品型号、编号时存在天然短板。LlamaIndex原生支持混合检索——在同一查询中同时执行BM25关键词检索和语义向量检索通过alpha参数控制两种检索的权重比例。from llama_index.retrievers import HybridRetriever hybrid_retriever HybridRetriever( vector_retrievervector_index.as_retriever(), keyword_retrieverkeyword_index.as_retriever(), alpha0.5 # 语义检索权重0.5表示BM25和向量各占一半 )分述三实战二——用LangChain 1.x构建RAG问答链如果你需要更复杂的自定义工作流如多轮对话管理、多工具调用LangChain的模块化设计会更有优势。环境准备pip install langchain langchain-openai chromadbRAG基础实现import os from langchain_openai import ChatOpenAI, OpenAIEmbeddings from langchain_community.document_loaders import PyPDFLoader from langchain_text_splitters import RecursiveCharacterTextSplitter from langchain_community.vectorstores import Chroma from langchain_core.prompts import ChatPromptTemplate from langchain_core.runnables import RunnablePassthrough from langchain_core.output_parsers import StrOutputParser # 1. 文档加载 loader PyPDFLoader(company_policy.pdf) docs loader.load() # 2. 分块——LangChain推荐方案 splitter RecursiveCharacterTextSplitter( chunk_size512, # 每块512 Token chunk_overlap50, # 重叠50 Token ) splits splitter.split_documents(docs) # 3. 向量化入库 vectorstore Chroma.from_documents( documentssplits, embeddingOpenAIEmbeddings(), persist_directory./chroma_db ) retriever vectorstore.as_retriever(search_kwargs{k: 4}) # 4. 构建RAG链使用LCEL语法 llm ChatOpenAI(modelgpt-4o) prompt ChatPromptTemplate.from_template( 你是一个企业知识助手。请根据以下参考资料回答问题。 如果参考资料中没有答案请明确说不知道。 参考资料 {context} 用户问题{question} ) rag_chain ( {context: retriever, question: RunnablePassthrough()} | prompt | llm | StrOutputParser() ) # 5. 执行查询 result rag_chain.invoke(公司的年假政策是什么) print(result)LangChain 1.x的核心变化从Chain到LangGraph如果你需要用循环、分支、人工介入构建更复杂的AgentLangChain 1.x已经统一用LangGraph作为底层引擎from langchain.agents import create_agent from langchain.tools import tool tool def search_knowledge_base(query: str) - str: 搜索企业内部知识库 # 实际实现中调用RAG检索 return 年假政策入职满一年享5天年假... # 一行创建Agent——支持ReAct推理循环 agent create_agent( modelllm, tools[search_knowledge_base], system_prompt你是一个企业知识助手可以查询内部知识库回答问题。 ) result agent.invoke({messages: [{role: user, content: 我的年假有几天}]})分述四2026年RAG架构的“黄金组合”很多团队在实践中发现没有必要在LangChain和LlamaIndex之间“二选一”。因为它们的优势是互补的而非重叠的。推荐的混合架构经过多次架构重构和实践验证目前的推荐架构是LlamaIndex负责底层数据检索 LangChain/LangGraph负责顶层Agent编排为什么这样搭配层级负责框架核心职责数据摄入层LlamaIndex文档解析、分块、去噪——IngestionPipeline开箱即用效果优于手写实现检索层LlamaIndex向量检索、混合检索、重排序——LlamaIndex在检索精度和灵活性上更专注编排层LangChain/LangGraph多轮对话管理、多工具调用、复杂工作流——LangGraph的图结构支持循环、分支和人工介入关键配置实践来自真实生产案例在企学宝的企业培训RAG实践中他们采用了“数据增强Rerank”的四层链路架构第一层存储层在写入向量库之前将“资料来源页码”拼接到文本内容中参与嵌入。这样用户即使不用精确的文件名提问模型也能锚定到正确的制度和位置。第二层检索层先用向量检索从FAISS中召回Top-20候选块拉宽候选池保证“正确答案不落榜”。第三层精排层用DashScope的gte-rerank-v2对Top-20进行语义级重排把最贴切的问题的段落排到最前面。第四层生成层将精排后的上下文送入LLM配合拒答式Prompt生成答案。这套四层链路将向量检索的“广度”和Rerank的“精度”结合起来比单纯扩大对话模型更接近工业级RAG的迭代节奏。关键代码片段数据增强Rerankdef _enrich_page_content_for_embedding(page_content: str, source: str, page: int): 写入向量前拼接身份信息缓解同义不同问法的召回漂移 return f资料来源{source} 第{page}页\n\n{page_content} def rerank_retrieval_hits(candidates: List, query: str): 用gte-rerank-v2精排向量召回的Top-K # 调用DashScope Rerank API对候选块重新打分 # 返回按rerank_score排序的结果结尾总结按场景选型组合优于二选一让我们回顾一下本文的核心内容第一LangChain和LlamaIndex的“基因”不同。LangChain是通用AI应用开发框架瑞士军刀适合构建复杂的多工具Agent工作流LlamaIndex是RAG专用引擎精密手术刀适合90%的纯知识库问答场景。理解这个核心差异选型就解决了80%的问题。第二快速原型用LlamaIndex更高效。SimpleDirectoryReader一行代码加载所有文档VectorStoreIndex.from_documents自动完成分块、向量化、索引构建——这几乎是“零配置”的RAG体验。如果需要高级功能混合检索、自定义重排序LlamaIndex也提供了完整的扩展接口。第三复杂工作流用LangChain/LangGraph更灵活。1.x版本以LangGraph为底层引擎支持循环、分支、人工介入统一的create_agentAPI大幅降低了开发门槛。需要多轮对话、多工具调用、状态管理的场景LangChain是唯一选择。第四2026年最成熟的方案是混合架构。用LlamaIndex处理数据摄入与检索它做得更好用LangGraph处理Agent编排与对话管理它做得更灵活二者优势互补。再加一层Rerank精排如gte-rerank-v2就能构建出接近工业级水平的RAG系统。掌握了两个框架的核心用法和选型逻辑后你已经具备了搭建完整RAG系统的能力。下一篇我们将进入RAG检索优化的深度篇章——从查询改写、HyDE到重排序Rerank系统性地拆解如何把RAG的检索精度从“能用”提升到“好用”。