Skip to content
维度LangChainLlamaIndex
适用范围通用:支持 RAG、Agent、聊天机器人等多种 LLM 应用专一:主要聚焦 RAG 场景,其他 LLM 应用支持较弱
组件设计高度模块化,组件间解耦(如 VectorStoreChain 等接口可自由替换)组件更集成化,围绕“索引(Index)”设计(索引包含加载、分割、存储逻辑)
检索能力基础检索支持(向量检索、关键词检索),复杂策略需手动组合内置高级检索策略(如递归检索、路由检索、混合检索),开箱即用
文档处理提供丰富的加载器和分割器,但需手动串联流程自动处理文档加载→分割→索引→存储全流程,支持复杂格式(表格、公式)
LLM 集成支持几乎所有主流 LLM(OpenAI、Anthropic、开源模型等),接口统一同样支持多 LLM,但更侧重与 OpenAI 等主流模型的深度适配
扩展性极强:支持自定义组件(如自研检索器、工具)中等:扩展需遵循索引体系,自定义灵活度低于 LangChain
学习曲线较陡:组件多、概念多(Chain、Agent、Memory 等)较平缓:核心概念少(Index、QueryEngine 等),专注 RAG 场景
  • 选 LangChain 当

    • 你的应用不止 RAG(如需要 Agent 工具调用、多轮对话记忆);
    • 需深度定制 RAG 链路(如自定义检索算法、特殊数据处理流程);
    • 依赖小众工具或开源模型,需要丰富的集成能力。
  • 选 LlamaIndex 当

    • 专注 RAG 场景,追求快速实现且检索质量高;
    • 处理复杂文档(如长论文、多格式报告);
    • 团队希望降低开发成本,减少代码量。

在 RAG(检索增强生成)链路中,不同库承担着不同的核心角色,从数据处理、检索到生成形成完整闭环。以下是 RAG 中常用库的作用及典型场景:

1. LangChain:RAG 链路的“胶水框架”

核心定位:提供标准化接口和组件,快速拼接 RAG 各环节(数据加载、处理、检索、LLM 调用等),降低开发复杂度。
主要作用

  • 统一接口抽象:对文档加载器(DocumentLoader)、分割器(TextSplitter)、向量存储(VectorStore)、LLM 模型等进行抽象,支持无缝切换不同工具(如从 OpenAI 切换到 Anthropic,从 Pinecone 切换到 Chroma)。
  • 链(Chain)与代理(Agent):封装 RAG 核心逻辑为可复用的“链”(如 RetrievalQA 链直接实现“检索+生成”),支持复杂流程编排(如多轮检索、动态调整 prompt)。
  • 内存管理(Memory):维护对话历史,让 RAG 支持上下文感知的多轮交互(如用户追问时结合历史对话优化检索)。

典型场景:快速搭建基础 RAG 流程,例如:

python
from langchain.document_loaders import TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.vectorstores import Chroma
from langchain.llms import OpenAI
from langchain.chains import RetrievalQA

# 加载文档 → 分割 → 向量存储 → 构建检索+生成链


<NolebasePageProperties />




loader = TextLoader("docs.txt")
docs = loader.load()
splitter = RecursiveCharacterTextSplitter(chunk_size=500)
split_docs = splitter.split_documents(docs)
db = Chroma.from_documents(split_docs, OpenAIEmbeddings())
qa_chain = RetrievalQA.from_chain_type(llm=OpenAI(), chain_type="stuff", retriever=db.as_retriever())

# 调用 RAG 链
result = qa_chain.run("文档中关于xxx的内容是什么?")

2. LlamaIndex(原 GPT Index):专注 RAG 优化的“智能检索框架”

核心定位:更专注于检索增强场景,提供更深度的文档理解和检索策略优化。
主要作用

  • 文档结构化处理:支持将非结构化文档(PDF、网页等)转换为结构化索引(如 VectorStoreIndexTreeIndex),甚至支持表格、图片等多模态数据的解析。
  • 高级检索策略:除基础向量检索外,提供“关键词检索+向量检索”混合模式、递归检索(对复杂文档逐层深入查询)、路由检索(自动选择最相关的文档片段)等。
  • LLM 增强索引:通过 LLM 生成文档摘要、关键词,辅助优化检索相关性(如 SummaryIndex 先生成摘要再检索)。

典型场景:处理复杂文档(如长论文、多章节手册)时,提升检索精准度,例如:

python
from llama_index import VectorStoreIndex, SimpleDirectoryReader

# 加载文档并构建索引(内部自动完成分割、嵌入、存储)
documents = SimpleDirectoryReader("docs/").load_data()
index = VectorStoreIndex.from_documents(documents)

# 创建查询引擎,支持高级检索参数(如相似度阈值、返回文档数量)
query_engine = index.as_query_engine(similarity_top_k=3)
response = query_engine.query("文档中关于xxx的核心观点是什么?")

3. OpenAI SDK / Anthropic SDK 等:LLM 调用的“原生接口”

核心定位:直接调用大语言模型(LLM)的官方工具,负责 RAG 链路的“生成”环节。
主要作用

  • 模型调用:封装 API 接口,支持调用 GPT-3.5/4(OpenAI)、Claude(Anthropic)等模型,传入 prompt 并获取生成结果。
  • 流式输出:支持实时返回生成内容(如聊天场景的打字机效果)。
  • 参数控制:设置温度(temperature,控制随机性)、最大 tokens、停止词等,优化生成效果。

典型场景:在 RAG 中作为“生成器”,基于检索到的文档生成回答,例如:

python
import openai

# RAG 中检索到的文档片段
retrieved_docs = ["文档内容1...", "文档内容2..."]
prompt = f"基于以下文档回答问题:{retrieved_docs}\n问题:xxx"

# 调用 OpenAI API 生成回答
response = openai.ChatCompletion.create(
  model="gpt-3.5-turbo",
  messages=[{"role": "user", "content": prompt}],
  temperature=0.3  # 降低随机性,更贴合文档
)
print(response.choices[0].message.content)

4. 向量数据库:如 Pinecone、Chroma、Weaviate

核心定位:存储文档向量 embedding,提供高效的相似性检索能力,是 RAG 中“检索”环节的核心。
主要作用

  • 向量存储:将文档片段的 embedding(由嵌入模型生成的向量)存入数据库。
  • 近似最近邻(ANN)检索:根据用户查询的 embedding,快速找到最相似的文档片段(无需全量比对,提升效率)。
  • 元数据过滤:支持结合文档的元数据(如日期、类别)筛选检索结果(如只检索 2023 年后的文档)。

典型场景:作为 RAG 的“记忆库”,例如用 Chroma(轻量级本地向量库)存储文档:

python
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma

# 文档片段的 embedding 生成与存储
embeddings = OpenAIEmbeddings()
db = Chroma.from_documents(split_docs, embeddings, persist_directory="./chroma_db")
db.persist()

# 检索:根据查询生成 embedding,找相似文档
query = "xxx"
similar_docs = db.similarity_search(query, k=3)  # 返回 top3 相似文档

5. 嵌入模型库:如 SentenceTransformers、OpenAI Embeddings

核心定位:将文本(用户查询、文档片段)转换为向量(embedding),是“检索”环节的前提(向量才能计算相似度)。
主要作用

  • 文本向量化:将非结构化文本映射到高维向量空间,使得语义相似的文本向量距离更近。
  • 多语言支持:部分模型(如 all-MiniLM-L6-v2)支持多语言文本的向量化。

典型场景:生成文档和查询的 embedding,例如:

python
from sentence_transformers import SentenceTransformer

model = SentenceTransformer('all-MiniLM-L6-v2')  # 轻量级开源模型
doc_embedding = model.encode("这是一段文档内容")  # 文档向量
query_embedding = model.encode("用户的查询")      # 查询向量

6. 文档处理库:如 Unstructured、PyPDF2

核心定位:负责 RAG 链路的“数据输入”环节,将原始文档(PDF、Word、网页等)解析为可处理的文本。
主要作用

  • 格式解析:提取不同格式文档的文本内容(如 PyPDF2 解析 PDF,Unstructured 处理复杂格式)。
  • 元数据提取:获取文档的标题、页码、作者等信息,辅助后续检索过滤。

典型场景:加载本地 PDF 文档到 RAG 流程:

python
from PyPDF2 import PdfReader

reader = PdfReader("document.pdf")
text = ""
for page in reader.pages:
    text += page.extract_text()  # 提取所有页文本

总结:各库在 RAG 链路中的协作关系

  1. 文档加载与处理:用 Unstructured/PyPDF2 解析原始文档 → 用 LangChain/LlamaIndex 的分割器切割为片段。
  2. 向量化与存储:用 SentenceTransformers/OpenAI Embeddings 生成向量 → 存入 Pinecone/Chroma 向量库。
  3. 检索:用户查询经向量化后,通过向量库找到相似文档片段(LangChain/LlamaIndex 封装检索逻辑)。
  4. 生成:将检索到的文档与查询组合为 prompt → 调用 OpenAI SDK 等工具让 LLM 生成最终回答。

这些库分工明确,通过 LangChain 或 LlamaIndex 等框架整合后,可快速搭建高效的 RAG 系统。

贡献者

The avatar of contributor named as jiechen jiechen

页面历史

撰写