引言

     检索增强生成(RAG)把信息检索与生成式模型结合,在问答、摘要及其他 NLP 任务中极具威力。实现 RAG 最常用的两大框架是 LangChain 与 LlamaIndex。二者都可处理文档摄取、切分、索引,并把各步骤串联成流畅的 RAG 工作流。但哪一个更契合你的项目?本文将围绕 RAG 的四大核心组件——加载器(Loaders)、切分器(Splitters)、索引(Indexing)与链(Chains)——逐层比较 LangChain 与 LlamaIndex,并在每一步给出代码示例。

LangChain 关键组件

LangChain 围绕以下模块构建:

提示(Prompts)
提示是给予语言模型的指令,用以引导回答。LangChain 提供标准化接口来创建与管理提示,便于跨模型、跨场景复用与定制。

模型(Models)
LangChain 为多家大模型(如 OpenAI GPT-4o、Anthropic Claude、Cohere 等)提供统一接口,抽象掉不同模型的差异,实现无缝切换。

记忆(Memory)
LangChain 的亮点之一是其记忆管理能力。与普通 LLM 独立处理每条查询不同,LangChain 可保存先前交互信息,实现上下文连贯的对话。它提供多种记忆实现,可保存完整对话历史,也可通过摘要旧信息、保留近期信息的方式工作。

链(Chains)
链是一系列操作,每一步的输出作为下一步的输入。LangChain 提供健壮接口来构建与管理链,并附带大量可复用组件。这种模块化方法可创建集成多种工具与多次 LLM 调用的复杂工作流。

智能体(Agents)
智能体根据输入判断并执行动作。它们利用 LLM 决定动作顺序,并调用各种工具完成任务。LangChain 提供多种预制智能体,可按需定制。

LangChain 的强项
• 需要保留对话上下文的聊天机器人、自动客服等场景
• 通过提示让 LLM 执行文本生成、翻译、问答等任务
• 提供访问多源多格式文档的加载器,丰富 LLM 知识库
• 使用文本嵌入模型生成语义嵌入,支持 50 余种向量存储方案实现内容发现与检索
• 智能体与工具包:智能体依据自然语言指令行动,可动态调用链。

LlamaIndex 关键组件

LlamaIndex 为 LLM 增添 RAG 能力,让外部知识源、数据库、索引充当记忆。

LlamaIndex 典型工作流

索引阶段
将私有数据高效转为可搜索的向量索引。可处理无结构文本、结构化数据库记录、知识图谱等。数据被转换为捕捉语义含义的数值嵌入,以便后续快速相似度搜索。

存储
默认情况下,索引数据仅存于内存;如需持久化,可用 .persist() 方法写入磁盘,后续通过重建存储上下文并加载索引,节省重索引时间与算力。

向量存储
用于保存索引阶段产生的嵌入。

嵌入
默认使用 OpenAI 的 text-embedding-ada-002,也可按所用 LLM 替换其他嵌入方案。VectorStoreIndex 将文本转为嵌入,查询时亦将问题转为嵌入并返回最相似的前 k 个文本块(top-k 语义检索)。若嵌入已存在,可直接从向量库加载,免去重新索引。

查询阶段
系统根据语义相似度从向量索引中检索最相关片段,连同原始问题交给大模型生成最终回答。

检索
从存储索引中检索最相关信息并送给 LLM,返回最新且上下文相关的回答。

后处理
对检索到的节点(文档片段)进行重排、变换或过滤,通过元数据或关键词提高数据的相关性与准确性。

回答合成
将查询、最相关数据及初始提示组合后送 LLM 生成回答。

LlamaHub
包含多种数据加载器,可将多源数据接入应用。例如 Google Docs Reader、SimpleDirectoryReader 等,支持 md、PDF、图片、Word、音视频等格式。

特性对比

主要关注点
LlamaIndex:搜索与检索
LangChain:灵活的大模型应用开发

数据索引
LlamaIndex:高度高效
LangChain:模块化、可定制

检索算法
LlamaIndex:先进且经过优化
LangChain:与 LLM 集成,输出具备上下文感知

用户界面
LlamaIndex:简洁易用
LangChain:全面且可适配

集成能力
LlamaIndex:多数据源、平台无缝集成
LangChain:支持多种 AI 技术和服务

定制化
LlamaIndex:有限,聚焦索引与检索
LangChain:高度可定制,支持复杂工作流

上下文保持
LlamaIndex:基础
LangChain:先进,对聊天机器人与长对话至关重要

典型用例
LlamaIndex:内部搜索、知识管理、企业方案
LangChain:客服、内容生成、代码文档

性能
LlamaIndex:速度与精度优化
LangChain:高效处理复杂数据结构

生命周期管理
LlamaIndex:与调试、监控工具集成
LangChain:通过 LangSmith 提供完整评估套件

LangChain vs LlamaIndex:基本概览

• LlamaIndex 长于搜索与检索,适合需高级搜索的项目。能快速、精准地从大数据集中检索信息。
• LangChain 是一套模块化、灵活的工具集,可构建各类 NLP 应用,提供标准链式接口、丰富集成及端到端场景链。

加载器对比

加载器负责从本地文件、API、数据库等多源加载文档。二者均提供常用格式的内置加载器。

LangChain 中的加载器
LangChain 拥有多种加载器,可加载文本、PDF 甚至网页。

    from langchain.document_loaders import TextLoader  
    # Load a text document  
    loader = TextLoader("sample.txt")  
    documents = loader.load()  
    print(documents[0].page_content)  

LangChain 加载器返回一个 Document 对象列表,可继续处理。

LlamaIndex 中的加载器
LlamaIndex(原 GPT Index)采用类似方式加载文档,并支持 Pandas DataFrame 等额外格式。

    from llama_index import SimpleDirectoryReader  
    # Load a text document from a directory  
    loader = SimpleDirectoryReader('path/to/docs')  
    documents = loader.load_data()  
    print(documents[0].text)  
      
LlamaIndex 的加载器同样返回 Document 对象列表,但结构可能因加载器而异。

切分器对比

切分器将大文档拆分成小块,以适配 GPT、BERT 等模型的 token 限制。

LangChain 中的切分器
LangChain 的切分器称为 TextSplitters,可按字符、单词或句子自定义切分。

    from langchain.text_splitter import CharacterTextSplitter

    # Define a character splitter  
    splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=200)  
    chunks = splitter.split_documents(documents)  
    print(chunks[0].page_content)  

LlamaIndex 中的切分器
LlamaIndex 使用 TokenTextSplitter,按 token 数量切分文档,确保块大小符合模型限制。 

  from llama_index import TokenTextSplitter
  # Define a token splitter  
    splitter = TokenTextSplitter(chunk_size=1000)  
    chunks = splitter.split(documents)  
    print(chunks[0].text)

索引对比

索引是 RAG 核心,支持基于用户查询快速检索相关片段。

LangChain 中的索引
LangChain 使用 VectorStoreIndex,通过文档嵌入创建索引,支持相似度检索。

    from langchain.vectorstores import FAISS  
    from langchain.embeddings.openai import OpenAIEmbeddings

    # Create embeddings  
    embedding_model = OpenAIEmbeddings()

    # Create FAISS index  
    index = FAISS.from_documents(chunks, embedding_model)  

LlamaIndex 中的索引
LlamaIndex 通过 GPTTreeIndex 简化索引,使用树形结构实现高效检索。

from llama_index import GPTTreeIndex

# Create an index  
index = GPTTreeIndex(documents)  
query_engine = index.as_query_engine()

链对比

链指将检索与生成串接的操作序列。二者均可把检索结果送入生成模型。

LangChain 中的链
LangChain 支持灵活链式,可将 LLMChain 等多个组件组合成复杂工作流。

    from langchain.chains import RetrievalQA  
    from langchain.llms import OpenAI

    # Combine FAISS index and OpenAI for RAG  
    llm = OpenAI()  
    qa_chain = RetrievalQA(llm=llm, retriever=index.as_retriever())  
    result = qa_chain.run("What is the content of the document?")  
    print(result)  

LlamaIndex 中的链
LlamaIndex 通过 query engine 将检索与生成合并,简化实现。 

   response = query_engine.query("What is the content of the document?")  
   print(response)

何时选 LangChain 或 LlamaIndex?

选择取决于项目复杂度、所需灵活性及框架特性。

控制与定制

LangChain:提供对 RAG 管道各组件的细粒度控制,可构建高度灵活的工作流,适合多源异构数据与多种检索策略。
示例场景:构建多模态 RAG,需同时处理 PDF、网页、API。

    from langchain.chains import SequentialChain  
    from langchain.llms import OpenAI  
    from langchain.document_loaders import WebPageLoader, TextLoader  
    from langchain.vectorstores import FAISS

    # Step 1: Load data from multiple sources  
    pdf_loader = TextLoader("docs/sample.pdf")  
    web_loader = WebPageLoader(url="[https://example.com")](https://example.com")/)  
    documents = pdf_loader.load() + web_loader.load()

    # Step 2: Create embeddings and index  
    embedding_model = OpenAIEmbeddings()  
    index = FAISS.from_documents(documents, embedding_model)

    # Step 3: Build a chain that retrieves and generates responses  
    llm = OpenAI()  
    qa_chain = RetrievalQA(llm=llm, retriever=index.as_retriever())

    # Run the chain  
    response = qa_chain.run("What are the key points in the PDF and website?")  
    print(response)

LlamaIndex:适合较小范围、结构简单的文本任务,配置极简,迅速落地。 

    from llama_index import SimpleDirectoryReader, GPTTreeIndex

    # Load documents from a directory  
    loader = SimpleDirectoryReader('docs/')  
    documents = loader.load_data()

    # Build a tree index and query  
    index = GPTTreeIndex(documents)  
    query_engine = index.as_query_engine()

    # Query the system  
    response = query_engine.query("Summarize the legal document.")  
    print(response)  

集成与生态

LangChain:连接器丰富(FAISS、Pinecone、Chroma 等向量库;OpenAI、Claude、Hugging Face 等模型),切换模型、存储轻松自如。

    from langchain.chains import SimpleSequentialChain  
    from langchain.llms import OpenAI, HuggingFaceHub

    # Use GPT-4 and Hugging Face BERT sequentially  
    gpt_chain = LLMChain(llm=OpenAI(model="gpt-4"), prompt="What is AI?")  
    bert_chain = LLMChain(llm=HuggingFaceHub(model="bert-large-uncased"), prompt="Translate the response.")

    # Chain them together  
    chain = SimpleSequentialChain(chains=[gpt_chain, bert_chain])  
    result = chain.run("What is the future of AI?")  
    print(result)

LlamaIndex:集成能力相对有限,但在快速文档摄取与查询场景表现可靠。

复杂查询与检索

LangChain:支持路由查询、混合检索(关键词+向量)、后检索重排等高级策略。
示例:法律文档用关键词检索,科研论文用向量检索,LangChain 可路由至对应检索器。

    from langchain.retrievers.multi_retriever import MultiRetriever  
    from langchain.retrievers import FAISSRetriever, KeywordRetriever

    # Define keyword and embedding-based retrieval systems  
    keyword_retriever = KeywordRetriever(documents=legal_documents)  
    embedding_retriever = FAISSRetriever(index=scientific_index)

    # Combine them in a MultiRetriever  
    retriever = MultiRetriever(retrievers={  
         'legal': keyword_retriever,  
         'science': embedding_retriever  
    })

    # Query the retriever with a legal question  
    response = retriever.retrieve("What are the recent changes in contract law?")  
    print(response)

LlamaIndex:适合简单任务,如文档内定位或摘要,其树状索引对层次分明的文档(合同、法规)尤佳。 

    from llama_index import GPTTreeIndex

    # Load and index legal contracts  
    documents = SimpleDirectoryReader('contracts/').load_data()  
    index = GPTTreeIndex(documents)

    # Query specific clauses within a contract  
    response = index.query("What are the termination clauses?")  
    print(response)

生态与社区

LangChain:社区活跃,更新迅速,云部署、扩展更成熟。

LlamaIndex:相对年轻,却在简单工作流或层次数据场景快速流行。

结论:选 LangChain 还是 LlamaIndex?

二者均为优秀 RAG 框架,但适用场景不同。

选 LangChain 若你需要:
• 对每个环节进行深度定制
• 处理多模态、多源数据
• 采用高级检索策略(混合搜索、后检索重排)
• 与多种模型、存储系统无缝集成
LangChain 功能更强、更灵活,适合需要复杂管道与深度定制的场景。

选 LlamaIndex 若你需要:
• 简单轻量的快速 RAG 实现,聚焦文档检索与摘要
• 适配层次化文档的树状索引
• 最小配置即可运行的系统
LlamaIndex 更简洁高效,适合文档型任务且无需深度定制。

最终,项目复杂度决定选择:
• 复杂多源、高定制需求 → LangChain
• 文档型、层次结构、快速落地 → LlamaIndex

 

 

 

  如何学习大模型?

学习AI大模型是一个系统的过程,需要从基础开始,逐步深入到更高级的技术。

这里给大家精心整理了一份全面的AI大模型学习资源,包括:AI大模型全套学习路线图(从入门到实战)、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等,资料免费分享!

这是一份大模型从零基础到进阶的学习路线大纲全览,小伙伴们记得点个收藏!

请添加图片描述

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

100套AI大模型商业化落地方案

请添加图片描述

大模型全套视频教程

请添加图片描述

200本大模型PDF书籍

请添加图片描述

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

LLM面试题合集

请添加图片描述

大模型产品经理资源合集

请添加图片描述

大模型项目实战合集

请添加图片描述

😝有需要的小伙伴,可以扫描下方二v码免费领取【保证100%免费】🆓

 

 

 

 


 

 

 

 

 

 

 

 

 

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐