文章目录
-
- [1. 核心定位与设计哲学](#1. 核心定位与设计哲学)
- [2. 架构深度解析](#2. 架构深度解析)
- [3. 代码实战对比](#3. 代码实战对比)
-
- [场景:使用 LlamaIndex 构建 RAG 系统](#场景:使用 LlamaIndex 构建 RAG 系统)
- [场景:使用 LangChain 构建 RAG 系统](#场景:使用 LangChain 构建 RAG 系统)
- [4. 深度对比与选型建议](#4. 深度对比与选型建议)
-
- [什么时候选 LangChain?](#什么时候选 LangChain?)
- [什么时候选 LlamaIndex?](#什么时候选 LlamaIndex?)
- [5. 融合架构:强强联手](#5. 融合架构:强强联手)
在构建基于大语言模型(LLM)的应用时,选择合适的编排框架是至关重要的一步。当前市场上最主流的两个框架------LangChain 和 LlamaIndex,各自拥有庞大的生态和独特的设计哲学。
本文将从架构设计、核心优势、典型应用场景以及代码实战四个维度,提供一份详尽的技术选型参考。
1. 核心定位与设计哲学
在深入代码之前,我们需要理解这两个框架的"灵魂"。
- LangChain :定位为全能型编排框架。它的核心在于"链(Chain)"和"代理(Agent)",旨在将 LLM 与各种计算、逻辑和外部工具连接起来,构建复杂的决策系统。
- LlamaIndex :定位为数据连接与索引框架。它的核心在于"数据(Data)",专注于解决 LLM 的上下文窗口限制,通过高效的索引和检索策略(RAG),让 LLM 更好地理解私有数据。
选型思维导图
LLM 框架选型
LangChain
核心: 通用编排
优势
工具生态丰富
Agent 能力强
灵活性极高
适用场景
AI 助理 / Chatbot
多步推理任务
自动化工作流
LlamaIndex
RAG
优势
数据加载器丰富
索引策略优化
查询引擎高效
适用场景
文档问答系统
知识库构建
结构化数据查询
2. 架构深度解析
LangChain:以"行动"为中心
LangChain 的架构类似于一条流水线。它强调的是 Input -> Processing -> Output 的过程控制。
典型工作流(ReAct Agent):
Tools LLM Agent User Tools LLM Agent User loop [思考与行动循环] 帮我查一下现在的比特币价格并计算买10个需要多少钱 发送当前上下文 + 提示词 思考: 需要使用搜索工具 调用搜索 API (BTC Price) 返回: 65,000 发送工具结果 思考: 需要使用计算器 调用计算器 (65000 \* 10) 返回: 650,000 汇总最终答案 需要 650,000
LlamaIndex:以"数据"为中心
LlamaIndex 的架构类似于一个图书馆管理员。它强调的是如何把海量书籍(数据)整理好,以便快速找到答案。
典型工作流(RAG 检索增强生成):
查询阶段
数据处理阶段
语义检索
返回相关片段 Top-K
Prompt + 上下文
原始文档 PDF/HTML
加载器 Loader
切分与嵌入 Chunking & Embedding
向量数据库 Vector Store
用户提问
Query Engine
LLM
最终回答
3. 代码实战对比
为了更直观地感受两者的区别,我们以构建一个基于本地文档的问答系统为例。
场景:使用 LlamaIndex 构建 RAG 系统
LlamaIndex 在处理数据索引方面极其简洁,几行代码即可完成"加载-索引-查询"的闭环。
python
# 安装: pip install llama-index
import os
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
# 1. 加载数据 (LlamaIndex 的强项:极简的数据加载)
# 它可以自动处理文件夹下的 PDF, TXT, Markdown 等多种格式
documents = SimpleDirectoryReader("data/my_papers").load_data()
# 2. 构建索引
# 这一步自动包含了 Chunking, Embedding 和 向量库存储
index = VectorStoreIndex.from_documents(documents)
# 3. 创建查询引擎
query_engine = index.as_query_engine()
# 4. 提问
response = query_engine.query("这篇文章的主要结论是什么?")
print(response)
# 5. (可选) 持久化保存索引
index.storage_context.persist()
场景:使用 LangChain 构建 RAG 系统
LangChain 需要显式地定义每一个步骤(加载器、分割器、嵌入模型、向量库),代码量稍多,但提供了极致的颗粒度控制。
python
# 安装: pip install langchain langchain-openai chromadb
import os
from langchain_community.document_loaders import DirectoryLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import Chroma
from langchain.chains import RetrievalQA
from langchain_openai import ChatOpenAI
# 1. 加载数据
loader = DirectoryLoader('./data/my_papers', glob="**/*.txt")
documents = loader.load()
# 2. 文本分割 (LangChain 允许你精细控制如何切分)
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
texts = text_splitter.split_documents(documents)
# 3. 初始化 Embedding 和 向量库
embeddings = OpenAIEmbeddings()
db = Chroma.from_documents(texts, embeddings)
# 4. 构建检索器和链
retriever = db.as_retriever()
llm = ChatOpenAI(model_name="gpt-3.5-turbo")
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=retriever
)
# 5. 提问
query = "这篇文章的主要结论是什么?"
result = qa_chain.invoke({"query": query})
print(result['result'])
4. 深度对比与选型建议
| 维度 | LangChain | LlamaIndex |
|---|---|---|
| 核心优势 | 通用性。几乎可以构建任何类型的 LLM 应用。 | 数据处理。在 RAG(检索增强生成)领域有着极深的优化。 |
| 学习曲线 | 陡峭。概念繁多(Chains, Agents, Callbacks, Memory)。 | 平缓。对于 RAG 任务,API 设计非常直观(Load -> Index -> Query)。 |
| 数据连接 | 支持多种加载器,但重点在于处理后的逻辑流转。 | 拥有极其丰富的数据加载器(LlamaHub),对结构化/非结构化数据混合查询支持更好。 |
| Agent 能力 | 极强。拥有最成熟的 Agent 框架,支持复杂的工具调用和规划。 | 正在追赶,引入了 Data Agents,但主要还是围绕数据查询。 |
什么时候选 LangChain?
- 你需要构建一个全能型 AI 助理,它不仅要回答问题,还要发邮件、查天气、写代码。
- 你需要高度定制化的Prompt 编排逻辑。
- 你的应用侧重于多步推理 和状态管理(Memory)。
什么时候选 LlamaIndex?
- 你的核心需求是与数据对话(文档问答、知识库)。
- 你需要处理海量数据,且对检索的准确性(召回率)要求极高。
- 你需要快速验证 RAG 原型,不想在切片策略和向量库配置上花太多时间。
5. 融合架构:强强联手
在实际的企业级应用中,我们往往不需要做"单选题"。最强大的架构通常是 LangChain 做大脑(控制流),LlamaIndex 做海马体(长期记忆/知识库)。
融合架构图:
知识库
记忆与工具
API 调用
对话历史
复杂查询
检索
精准上下文
最终响应
用户
前端应用
LangChain Agent (大脑)
外部工具 (Google, Calc)
短期记忆
LlamaIndex Query Engine
向量数据库
技术选型没有绝对的银弹。
- 如果你是数据驱动 的项目,请从 LlamaIndex 开始。
- 如果你是交互/逻辑驱动 的项目,请从 LangChain 开始。
- 如果你的项目足够复杂,请毫不犹豫地同时使用两者。
希望这份指南能为你的 LLM 应用开发之路提供清晰的方向。