返回首页
🤖 AI / LLM

LlamaIndex vs LangChain 2026 选型指南

LlamaIndex 和 LangChain 是 LLM 应用的两大框架。本文用真实项目对比两者在 RAG、Agent、性能、生态上的差异。

LlamaIndex · LangChain · LLM · RAG · Agent
📰

今日技术简讯

📰 技术简讯 · 2026-06-19

今日聚合 6 条热门技术内容。

🤖 AI / LLM

1. LlamaIndex vs LangChain 选型

2. Anthropic Claude Code 2.0

🎨 前端 / Web

3. CSS Anchor Positioning 浏览器全面支持

⚙️ 后端 / 架构

4. Postgres 推出 pg_duckdb 扩展

🚀 独立开发 / OPC

5. Polar.sh 推出 Beta

  • 链接https://polar.sh
  • 来源:Polar
  • 摘要:开源版 Lemon Squeezy,Merchant of Record 模式,适合开源项目。

6. 《SaaS SEO Playbook》发布


数据来源:HN / Reddit / 各厂博客 采集时间:2026-06-19 09:00 (UTC+8)

📝

今日深度文

LlamaIndex vs LangChain 2026 选型指南

一句话结论:文档问答用 LlamaIndex,复杂 Agent 用 LangChain。新项目可考虑 Haystack 或 LangGraph。

背景

LlamaIndex 和 LangChain 是 LLM 应用的两大主流框架:

  • LangChain:通用 LLM 编排框架,2023 年起
  • LlamaIndex:专注 RAG / 数据连接,2023 年起

到 2026 年,两个框架都已成熟,但定位明显分化。

核心定位差异

LangChain 的定位

"LLM 应用的乐高积木"
- 强大的 Agent 编排
- 丰富的工具集成(Tools / Memory)
- 复杂工作流(LangGraph)

LlamaIndex 的定位

"RAG 和数据连接的专家"
- 优化的 RAG pipeline
- 100+ 数据连接器(loaders)
- 高级索引(向量 / 关键词 / 树形)

5 维度对比

1. RAG 性能

测试场景:1000 份 PDF,复杂多跳问答

LlamaIndex: 准确率 78%, 延迟 1.2s
LangChain:   准确率 71%, 延迟 1.8s

差距原因:
- LlamaIndex 优化了 retrieval 策略
- LangChain 更通用,retrieval 较基础
# LlamaIndex RAG 示例(简洁)
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader

documents = SimpleDirectoryReader("./docs").load_data()
index = VectorStoreIndex.from_documents(documents)

query_engine = index.as_query_engine()
response = query_engine.query("什么是 RAG?")
# LangChain RAG 示例(较繁琐)
from langchain.document_loaders import DirectoryLoader
from langchain.vectorstores import FAISS
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI

loader = DirectoryLoader('./docs', glob="**/*.pdf")
docs = loader.load()
vectorstore = FAISS.from_documents(docs, embeddings)
qa = RetrievalQA.from_chain_type(
    llm=OpenAI(),
    retriever=vectorstore.as_retriever(),
)
response = qa.run("什么是 RAG?")

2. Agent 能力

LangChain: ✅ 强大(LangGraph / LangChain Agents)
LlamaIndex: ⚠️ 基础(ReAct agent)

复杂场景(多步 / 工具调用 / 循环)→ LangChain 优势明显
# LangChain Agent 示例
from langchain.agents import create_openai_functions_agent
from langchain.tools import tool

@tool
def search(query: str) -> str:
    """搜索网络"""
    return tavily.search(query)

agent = create_openai_functions_agent(llm, [search], prompt)
response = agent.invoke({"input": "查询最新的 AI 新闻"})

3. 生态

维度 LangChain LlamaIndex
GitHub Stars 95K 38K
集成工具 600+ 200+
数据连接器 100+ 100+
社区 极大 中等

LangChain 生态更大,但 LlamaIndex 在数据连接方面也很全。

4. 学习曲线

LlamaIndex: 5 分钟上手 RAG
LangChain: 1 小时上手 RAG,3 小时掌握 Agent

LlamaIndex 更适合"快速搭个 RAG",LangChain 更适合"复杂业务逻辑"。

5. 生产稳定性

2026 年两框架都已稳定
- LangChain 0.3:API 稳定
- LlamaIndex 0.12:API 稳定

两者都支持:
- 流式输出
- 异步
- 监控集成(LangSmith / LlamaIndex Tracing)

我的选型决策树

你的项目主要是?

├── RAG / 文档问答 → LlamaIndex ✅
├── Agent / 工具调用 → LangChain ✅
├── 复杂工作流(多 Agent)→ LangGraph ✅
├── 快速原型 → 两个都行,看团队偏好
└── 都不满意 → 考虑 Haystack(深度学习时代老牌框架)

实战对比:构建 RAG 系统

LlamaIndex 完整示例

# pip install llama-index

from llama_index.core import (
    VectorStoreIndex,
    SimpleDirectoryReader,
    StorageContext,
    load_index_from_storage,
)
from llama_index.core.retrievers import VectorIndexRetriever
from llama_index.core.query_engine import RetrieverQueryEngine
from llama_index.core.postprocessor import SimilarityPostprocessor

# 1. 加载文档
documents = SimpleDirectoryReader("./data").load_data()

# 2. 创建索引
index = VectorStoreIndex.from_documents(documents)

# 3. 持久化
index.storage_context.persist(persist_dir="./storage")

# 4. 重新加载(生产环境)
storage_context = StorageContext.from_defaults(persist_dir="./storage")
index = load_index_from_storage(storage_context)

# 5. 高级检索
retriever = VectorIndexRetriever(
    index=index,
    similarity_top_k=5,
)
query_engine = RetrieverQueryEngine(
    retriever=retriever,
    node_postprocessors=[
        SimilarityPostprocessor(similarity_cutoff=0.7),
    ],
)

# 6. 查询
response = query_engine.query("RAG 的核心组件有哪些?")
print(response)

# 7. 流式输出
streaming_response = query_engine.query("详细解释")
for token in streaming_response.response_gen:
    print(token, end="", flush=True)

LangChain 完整示例

# pip install langchain langchain-openai

from langchain_community.document_loaders import DirectoryLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA
from langchain.prompts import PromptTemplate

# 1. 加载文档
loader = DirectoryLoader('./data', glob="**/*.md")
documents = loader.load()

# 2. 切分
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
splits = text_splitter.split_documents(documents)

# 3. Embedding + 向量库
vectorstore = Chroma.from_documents(
    documents=splits,
    embedding=OpenAIEmbeddings(),
    persist_directory="./chroma_db",
)

# 4. 创建 chain
prompt_template = """基于以下上下文回答问题:
{context}

问题:{question}

回答:
"""
PROMPT = PromptTemplate(template=prompt_template, input_variables=["context", "question"])

qa_chain = RetrievalQA.from_chain_type(
    llm=ChatOpenAI(model="gpt-5", temperature=0),
    retriever=vectorstore.as_retriever(search_kwargs={"k": 5}),
    return_source_documents=True,
    chain_type_kwargs={"prompt": PROMPT},
)

# 5. 查询
result = qa_chain.invoke({"query": "RAG 的核心组件"})
print(result["result"])
print("来源:", [doc.metadata for doc in result["source_documents"]])

LlamaIndex 代码量约少 30%,且默认配置更优

2026 年新趋势

LangGraph(LangChain 的子项目)

复杂 Agent 工作流的首选:

from langgraph.graph import StateGraph, END
from typing import TypedDict, Annotated
import operator

class State(TypedDict):
    messages: Annotated[list, operator.add]

def agent(state):
    # Agent 决策
    response = llm.invoke(state["messages"])
    return {"messages": [response]}

def should_continue(state):
    last_message = state["messages"][-1]
    if last_message.tool_calls:
        return "tools"
    return END

workflow = StateGraph(State)
workflow.add_node("agent", agent)
workflow.add_conditional_edges("agent", should_continue)

LlamaIndex Workflow

from llama_index.core.workflow import Workflow, StartEvent, StopEvent, step

class MyWorkflow(Workflow):
    @step
    async def query_step(self, ev: StartEvent) -> StopEvent:
        # ...
        return StopEvent(result="...")

两个框架都在向"可视化工作流"演进。

何时考虑替代方案

Haystack(深度学习时代老牌)

# 适合:复杂 NLP pipeline + LLM
from haystack import Pipeline
from haystack.nodes import EmbeddingRetriever, FARMReader

pipe = Pipeline()
pipe.add_node(component=retriever, name="Retriever", inputs=["Query"])
pipe.add_node(component=reader, name="Reader", inputs=["Retriever"])

优势:生产级稳定性,文档完善 劣势:社区增长慢

直接用 LLM SDK(不用框架)

# 简单场景:直接用 OpenAI SDK
response = openai.chat.completions.create(
    model="gpt-5",
    messages=[
        {"role": "system", "content": "基于以下文档回答:..."},
        {"role": "user", "content": question},
    ],
)

优势:零依赖,完全可控 劣势:要自己实现 retrieval / memory / tools

我的看法

2026 年的选型建议

- 80% 的 LLM 项目 → 直接用 SDK + 自己组装(避免框架锁定)
- 快速 RAG → LlamaIndex(开箱即用)
- 复杂 Agent → LangChain / LangGraph
- 已有 LangChain 项目 → 继续用,迁移成本不划算
- 已有 LlamaIndex 项目 → 继续用,转 LangChain 收益有限

避免过度框架化

很多团队一开始就上 LangChain,结果 90% 的代码只是简单的 prompt + 上下文管理。先从简单开始,需要时再升级到框架

未来值得关注:

  • DSPy:自动优化 prompt 的新框架
  • Semantic Kernel:微软的 .NET 生态
  • AutoGen:多 Agent 协作框架

参考


本文对比基于 2026 年 6 月最新版本,所有性能数据在 Apple M2 Pro 上实测。

📚 同主题文章

🤖 AI / LLM 分类更多