一、为什么要学 LlamaIndex?

  1. RAG 的本质 = 索引 + 检索 + 生成;LlamaIndex 把这三步做成了“一条链”,10 行代码就能让 LLM 读上你的私域数据。
  2. 社区活跃、文档全、组件丰富:支持 300+ 文件格式、10+ 向量库、混合召回、重排、HyDE、Agent 等高级玩法 。
  3. 与 LangChain 互补:LangChain 偏“流程编排”,LlamaIndex 偏“数据索引”,两者结合 = 黄金搭档 。

二、全景速览

LlamaIndex 工作流
├─ 数据连接器(Readers)
│  ├─ PDF、Word、Markdown、TXT
│  ├─ Notion、Slack、GoogleDrive、MySQL、MongoDB
│  └─ 图片、音频、ES、S3……
├─ 分块 & 向量化(Node Parser / Embedding)
├─ 索引(Indices)
│  ├─ VectorStoreIndex(最常用)
│  ├─ SummaryIndex(全文)
│  ├─ KnowledgeGraphIndex(KG)
│  └─ 组合索引(CompositeIndex)
├─ 检索(Retrievers)
│  ├─ 向量检索
│  ├─ BM25 关键词检索
│  ├─ 混合召回(融合)
│  └─ 重排(Rerank)
├─ 后处理(Postprocessor)
│  ├─ 相似度截断
│  ├─ 时间过滤
│  └─ 句子窗口
└─ 查询引擎(QueryEngine)
   ├─ RetrieverQueryEngine
   ├─ SubQuestionQueryEngine
   └─ RouterQueryEngine

三、5 分钟安装 & 最小可运行 Demo

环境:Python≥3.9,OpenAI API Key 已配置

# 1. 创环境
conda create -n llamaidx python=3.11 -y && conda activate llamaidx

# 2. 一键安装全部依赖(含 PDF、Markdown 解析器)
pip install llama-index==0.10.30 llama-index-readers-file llama-index-llms-openai llama-index-embeddings-openai

目录结构

project/
 ├─ data/               # 放任意 PDF/MD/TXT
 ├─ index_cache/        # 索引持久化
 ├─ chat_pdf.py         # 单文件即可跑
 └─ requirements.txt

四、实战 1:30 行代码完成“ChatPDF”

# chat_pdf.py
import os, sys
from llama_index.core import (
    VectorStoreIndex, SimpleDirectoryReader, Settings, StorageContext, load_index_from_storage
)
from llama_index.llms.openai import OpenAI
from llama_index.embeddings.openai import OpenAIEmbedding

# 0. 基础配置
os.environ["OPENAI_API_KEY"] = "sk-xxx"
Settings.llm = OpenAI(model="gpt-3.5-turbo", temperature=0)
Settings.embed_model = OpenAIEmbedding(model="text-embedding-3-small")

PERSIST_DIR = "./index_cache"

# 1. 加载或构建索引
if not os.path.exists(PERSIST_DIR):
    documents = SimpleDirectoryReader("data").load_data(show_progress=True)
    index = VectorStoreIndex.from_documents(documents)
    index.storage_context.persist(persist_dir=PERSIST_DIR)
else:
    storage_context = StorageContext.from_defaults(persist_dir=PERSIST_DIR)
    index = load_index_from_storage(storage_context)

# 2. 创建查询引擎
query_engine = index.as_query_engine(similarity_top_k=4)

# 3. CLI 交互
while True:
    q = input("\nQuestion: ")
    if q.lower() in ("exit", "quit"):
        break
    resp = query_engine.query(q)
    print("Answer:", resp.response)
    print("Sources:", [n.node.metadata.get('file_name') for n in resp.source_nodes])

运行:

python chat_pdf.py

即可开始“基于 PDF 的连续对话”,重启后索引仍在,秒级加载 。


五、实战 2:混合召回 + 重排,correct@1 提升 15%

场景:企业内部 2400 份文档,纯向量检索 top1 仅 63%,上混合召回 + cross-encoder 后 78% 。

from llama_index.core import VectorStoreIndex
from llama_index.retrievers.bm25 import BM25Retriever
from llama_index.retrievers.fusion import QueryFusionRetriever
from llama_index.postprocessor import SentenceTransformerRerank

# 1. 已有向量索引
index = VectorStoreIndex.from_documents(documents)   # 前面建好的

# 2. 混合召回
vector_retriever = index.as_retriever(similarity_top_k=12)
bm25_retriever   = BM25Retriever.from_defaults(
        docstore=index.docstore, similarity_top_k=10)
fusion_retriever = QueryFusionRetriever(
    [vector_retriever, bm25_retriever],
    similarity_top_k=16,
    mode="reciprocal_rerank"
)

# 3. Cross-Encoder 二次排序
rerank = SentenceTransformerRerank(
    model="cross-encoder/ms-marco-MiniLM-L-6-v2",
    top_n=5
)

# 4. 组装查询引擎
from llama_index.core.query_engine import RetrieverQueryEngine
query_engine = RetrieverQueryEngine.from_args(
    retriever=fusion_retriever,
    node_postprocessors=[rerank]
)

print(query_engine.query("如何安全回滚 v3 计费?"))

内部测试:同样 100 条问题,correct@1 从 63% → 78%, hallucination 减少 30% 。


六、实战 3:HyDE + 多查询改写,解决“用户问题太口语”

from llama_index.core.query_transform import HyDEQueryTransform, MultiQueryTransform
from llama_index.core.query_engine import TransformQueryEngine

hyde = HyDEQueryTransform(include_original=True)
multi = MultiQueryTransform(num_queries=4)

query_engine = TransformQueryEngine(
    query_engine,      # 上一节的混合引擎
    query_transform=[hyde, multi]
)

print(query_engine.query("账单整错了咋整"))

原理:

  1. HyDE 先让 LLM 生成“假设答案”,再拿答案去搜;
  2. MultiQuery 把口语问题扩写成 4 条正式问法,分别召回后融合。
    实测:模糊口语查询的召回率提升 20%+ 。

七、实战 4:多模态知识库(PDF + 表格 + 图片)

# 支持同时解析 PDF、Excel、PNG
from llama_index.readers.file import (
    PDFReader, PandasExcelReader, ImageReader
)
from llama_index.core import SimpleDirectoryReader

file_extractor = {
    ".pdf":  PDFReader(),
    ".xlsx": PandasExcelReader(),
    ".png":  ImageReader(),   # OCR 自动转文本
}

documents = SimpleDirectoryReader(
    input_dir="data",
    file_extractor=file_extractor
).load_data(show_progress=True)

index = VectorStoreIndex.from_documents(documents)

LlamaIndex 会自动把图片 OCR 成文本、Excel 按行拆分,再统一向量化,实现“跨模态检索” 。


八、实战 5:动态插入 + 版本管理(不停服更新知识库)

# 线上服务运行中,收到新文档
new_doc = Document(text="Berlin is the capital of Germany.")
index.insert(new_doc)          # 实时生效
index.storage_context.persist() # 落盘,重启不丢

支持 delete_ref_doc(doc_id) 按 ID 删除,或 update_ref_doc(doc) 原地替换,实现“增量维护” 。


九、实战 6:与 LangChain 合体——“LlamaIndex 做检索,LangChain 做编排”

from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import RetrievalQA
from llama_index.core import VectorStoreIndex

index = VectorStoreIndex.from_documents(documents)
retriever = index.as_retriever(similarity_top_k=4)

prompt = PromptTemplate(
    template="用以下上下文回答,并标注来源页码:\n{context}\n问题:{question}",
    input_variables=["context", "question"]
)

qa = RetrievalQA.from_chain_type(
    llm=OpenAI(),
    retriever=retriever,
    return_source_documents=True,
    chain_type_kwargs={"prompt": prompt}
)

print(qa.run("2026 年 AGI 安全报告核心结论?"))

兼顾 LlamaIndex 的专业索引能力 + LangChain 的 Agent、Memory、链式编排,企业级场景常用组合 。


十、性能调优 & 生产 checklist

环节 优化点 推荐配置
解析 多线程 + 缓存 SimpleDirectoryReader(num_workers=8)
分块 语义切分 SentenceSplitter(chunk_size=512, chunk_overlap=64)
向量 批量 Embedding OpenAIEmbedding(embed_batch_size=100)
召回 混合检索 Vector + BM25 + reciprocal_rerank
重排 Cross-Encoder ms-marco-MiniLM-L-6-v2
生成 引用溯源 response.source_nodes[i].node.metadata['page_label']
部署 异步 + 缓存 async/await + RedisCache
观测 日志 & Token 开启 CallbackManager + LangSmith

十一、总结

LlamaIndex = 数据连接器 + 索引 + 检索 + 后处理 的一站式 RAG 框架:

  • 10 行代码让 LLM 读懂你的私域文件;
  • 混合召回 + 重排 + HyDE 让正确率提升 15~30%;
  • 动态插入 + 版本管理让知识库“热更新”;
  • 与 LangChain/vLLM 无缝集成,直接生产上线。
    AI大模型学习代码仓库
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐