什么是 LlamaIndex

LlamaIndex(官方写法为 LlamaIndex,课件中误写为 LlamIndex)是一个面向大模型应用的开发框架,主打"RAG(Retrieval-Augmented Generation,检索增强生成)“与本地知识库构建。如果说 LangChain 更像"大模型时代的胶水框架”,那么 LlamaIndex 则是把"如何把外部数据喂给 LLM"这件事做到了极致:

  • 提供开箱即用的 SDK(软件开发工具包),让你能像搭积木一样快速构建本地知识库 RAG;
  • 官方生态非常活跃,正在向 LangChain 模式靠拢,插件和生态非常丰富
  • 核心流程覆盖文档加载 → 文档切分 → 文档向量化 → 向量库建库 → 检索

一句话总结:LlamaIndex = 让 LLM "读懂"你自己的数据

官方资源

资源 链接
官网 https://www.llamaindex.ai/
GitHub 源码 https://github.com/run-llama/
官方文档 https://github.com/run-llama/llama_index/
LlamaCloud / 项目控制台 https://cloud.llamaindex.ai/

与 LangChain 的关系

维度 LangChain LlamaIndex
定位 通用 LLM 应用框架 专注于 RAG 与数据接入
生态 庞大、组件多 增长迅速、向 LangChain 学习
上手难度 略陡(抽象层多) 相对平缓(流程清晰)
强项 Agent / Chain / 工具调用 文档解析、索引、检索

课件中有一句很到位:“类似 LangChain(生态很丰富,向 LangChain 转型)”——意思是 LlamaIndex 早期是"文档+索引"的轻量框架,现在正在补齐 Agent、Workflow、Chat 等能力,变成一个综合性更强的框架。

整体架构

LlamaIndex 的数据流可以概括为「五层流水线」,从左到右依次为:

[数据层] → [加载层] → [切分层] → [索引层] → [查询/生成层] → [业务引导层]
                                       │
                                       ▼
                                  [存储层 + 模型层]

下面逐层拆解课件中的架构图。

1. 数据层(Data Sources)

支持180+ 种数据来源,覆盖结构化与非结构化数据:

  • 常见文件格式pdfdocximageaudiocsvmarkdown 等;
  • 外部系统 / API:Arxiv、GitHub、Database、Gmail、GraphDB、Jira……

2. 加载层(Loading)

负责把不同来源的原始数据读成统一格式的 Document / Node

  • DirectoryReader:读取本地目录;
  • Data Connectors:对接外部数据源(数据库、API、云盘等);
  • 每个 Document 包含 DocNodeMetadata(元数据,便于后续过滤)。

3. 切分层(Chunking)

把长文档切成模型能消化的小块:

  • Node Parsers(节点解析器)
  • Text Splitters(文本切分器)
    • TokenTextSplitter:按 token 数切分;
    • SentenceTextSplitter:按句子切分;

4. 索引层(Indexing)+ 存储层(Storing)

把切分后的 Node 转成可检索的结构:

  • 支持 Keyword Index(关键词)、Vector Index(向量)、Property Graph Index(属性图)三种索引方式;
  • 索引结果可以放在内存里,但生产环境建议落地到向量数据库,例如 QdrantQdrantVectorStore)。

5. 查询层(Querying)+ 生成层(Responding)+ 业务引导层

模块 作用
Retrieval 从向量库中召回相关片段
Postprocessors 召回后再过滤、重排(re-rank)
Query Pipelines 把"检索 → 后处理 → 拼装 Prompt"串成管线
Routing 决定这个问题走哪条管线
QA / Chat / Structured 不同输出形态:单轮问答 / 多轮对话 / 结构化抽取
Workflow / Agent 业务引导层,把多个步骤编排成自动化流程

6. 模型层(Models)

整套流水线的"燃料":

  • Embedding Models:把文本转成向量的嵌入模型;
  • LLMs:最终生成答案的大语言模型。

整套架构的特点是:层与层之间是松耦合的,每一层都有多种实现可替换——这也是它能向 LangChain 靠拢、形成丰富生态的基础。

LlamaParse:把 PDF 解析做到极致

课件特别提到一个杀手锏组件 —— LlamaParse

  • 定位:LlamaIndex 官方的高级文档解析服务
  • 能力:能把 PDF 等复杂文档解析成结构化 Markdown,保留表格、标题、列表、代码块等语义信息;
  • 优势:相比传统的 PyPDFLoaderUnstructured 等方案,对复杂排版 PDF 的解析质量更好,非常适合学术论文、合同、研报等场景;
  • 入口:https://cloud.llamaindex.ai/

简单理解:LlamaParse 让"脏 PDF → 干净 Markdown"这件事变得简单

5 步搭建一个 RAG 应用

课件给出的标准流程非常清晰,可以作为入门模板直接套用:

Step 1. 申请 API Key

到 https://cloud.llamaindex.ai/ 注册并申请 LlamaCloud 的 API Key。

⚠️ 安全提醒:课件中贴出的 Key 形如 llx-xxxxxxxx...属于个人凭据,请勿上传到 GitHub、博客或公开笔记中。下面的代码示例已用 <YOUR_LLAMA_CLOUD_API_KEY> 占位。

Step 2. 加载文档

from llama_index.core import SimpleDirectoryReader
from llama_parse import LlamaParse

# 方案 A:本地目录直接读
documents = SimpleDirectoryReader("./data").load_data()

# 方案 B:复杂 PDF → 用 LlamaParse 转成 Markdown 后再加载
parser = LlamaParse(
    api_key="<YOUR_LLAMA_CLOUD_API_KEY>",   # 环境变量更安全
    result_type="markdown",
)
documents = parser.load_data("./data/report.pdf")

课件原话:「因为 LlamaParse 可以将 pdf 解析为 md」——这就是为什么复杂 PDF 推荐用 LlamaParse。

Step 3. 切分文档

from llama_index.core.node_parser import TokenTextSplitter, SentenceSplitter

# 方案 A:按 token 数切
splitter = TokenTextSplitter(chunk_size=512, chunk_overlap=50)

# 方案 B:按句子切(推荐用于英文/语义连贯的场景)
splitter = SentenceSplitter(chunk_size=1024)

nodes = splitter.get_nodes_from_documents(documents)

Step 4. 构建索引(并落地到向量库)

from llama_index.core import VectorStoreIndex, StorageContext
from llama_index.vector_stores.qdrant import QdrantVectorStore
import qdrant_client

# 1. 连接 Qdrant
client = qdrant_client.QdrantClient(host="localhost", port=6333)
vector_store = QdrantVectorStore(client=client, collection_name="demo")

# 2. 构建索引(直接写入 Qdrant)
storage_context = StorageContext.from_defaults(vector_store=vector_store)
index = VectorStoreIndex(nodes, storage_context=storage_context)

课件原话:「构建索引 VectorStoreIndex 对解析向量并存当中,我们应保存到向量数据库 qdrant QdrantVectorStore」——关键词是"",生产环境不要只放在内存里

Step 5. 用户检索

# 把 index 转成检索器
retriever = index.as_retriever(similarity_top_k=3)

# 简单用法:直接 query
query_engine = index.as_query_engine()
response = query_engine.query("请总结这份文档的核心观点")
print(response)

课件这里用的是底层 API BaseRetriever

from llama_index.core.retrievers import BaseRetriever
# 或者更常见的写法:
# retriever = index.as_retriever(retriever_mode="similarity")

LlamaIndex 生态全景

课件最后总结了一句:“llamaIndex 生态体系,生态很丰富”。从架构图能看出,它已经不只是"文档加载 + 检索"了,而是覆盖了:

  • 多模态数据接入(文本、表格、图、音视频、数据库);
  • 多种索引结构(向量、关键词、属性图);
  • 完整的查询管线(召回 → 后处理 → 拼装 → 生成);
  • 多形态输出(QA / Chat / Structured);
  • Workflow + Agent:把多个 RAG 步骤编排成自动化业务流;
  • 官方云服务 LlamaCloud:托管解析、向量化、检索一条龙。

写在最后

LlamaIndex 的学习路径建议:

  1. 先跑通 5 步最小流程(本文 Step 1–5)—— 跑通就是最好的学习;
  2. 替换自己的数据 —— 把自己领域的 PDF/数据库接进来;
  3. 替换 Embedding / LLM —— 接入国产模型(DeepSeek、通义千问等);
  4. 加入 Agent / Workflow —— 让 RAG 变成"能办事"的工作流;
  5. 上 LlamaCloud —— 复杂 PDF 解析交给 LlamaParse,自己专注业务逻辑。

📌 本文是「Llamindex 简介」课件的读书笔记,整理自课堂讲义。如果你也在入门 RAG,强烈建议先跟着官方 Quick Start 跑一遍,再回来对照本文理解每一层的作用。


附:课件原文中出现的 API Key 已脱敏处理——若这份 PDF 还会分享给其他人,记得先把 Key 涂掉再发。

更多推荐