LlamaIndex 入门笔记:从零搭建 RAG 应用框架
什么是 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+ 种数据来源,覆盖结构化与非结构化数据:
- 常见文件格式:
pdf、docx、image、audio、csv、markdown等; - 外部系统 / API:Arxiv、GitHub、Database、Gmail、GraphDB、Jira……
2. 加载层(Loading)
负责把不同来源的原始数据读成统一格式的 Document / Node:
DirectoryReader:读取本地目录;Data Connectors:对接外部数据源(数据库、API、云盘等);- 每个 Document 包含
Doc、Node、Metadata(元数据,便于后续过滤)。
3. 切分层(Chunking)
把长文档切成模型能消化的小块:
Node Parsers(节点解析器)Text Splitters(文本切分器)TokenTextSplitter:按 token 数切分;SentenceTextSplitter:按句子切分;
4. 索引层(Indexing)+ 存储层(Storing)
把切分后的 Node 转成可检索的结构:
- 支持 Keyword Index(关键词)、Vector Index(向量)、Property Graph Index(属性图)三种索引方式;
- 索引结果可以放在内存里,但生产环境建议落地到向量数据库,例如 Qdrant(
QdrantVectorStore)。
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,保留表格、标题、列表、代码块等语义信息;
- 优势:相比传统的
PyPDFLoader、Unstructured等方案,对复杂排版 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对解析向量并存当中,我们应保存到向量数据库 qdrantQdrantVectorStore」——关键词是"应",生产环境不要只放在内存里。
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 的学习路径建议:
- 先跑通 5 步最小流程(本文 Step 1–5)—— 跑通就是最好的学习;
- 替换自己的数据 —— 把自己领域的 PDF/数据库接进来;
- 替换 Embedding / LLM —— 接入国产模型(DeepSeek、通义千问等);
- 加入 Agent / Workflow —— 让 RAG 变成"能办事"的工作流;
- 上 LlamaCloud —— 复杂 PDF 解析交给 LlamaParse,自己专注业务逻辑。
📌 本文是「Llamindex 简介」课件的读书笔记,整理自课堂讲义。如果你也在入门 RAG,强烈建议先跟着官方 Quick Start 跑一遍,再回来对照本文理解每一层的作用。
附:课件原文中出现的 API Key 已脱敏处理——若这份 PDF 还会分享给其他人,记得先把 Key 涂掉再发。
更多推荐



所有评论(0)