Chapter 01

LlamaIndex 是什么 · 为何是它

LLM 的知识停在训练截止日期,而你的业务数据分散在 PDF、数据库、Notion、企业网盘——把这些数据接进 LLM 是大多数 AI 应用的真命题。LlamaIndex 就是这件事的专业工具。

一、一句话定位

LlamaIndex 是一个 LLM 数据框架——专注把"非结构化/半结构化的私有数据"高效接入 LLM 的全过程:读入 → 切块 → 向量化 → 索引 → 检索 → 喂给模型。它不是"另一个 Agent 框架",而是 Agent 和 RAG 应用的数据底座

2022 年项目最早叫 GPT Index(Jerry Liu 开源),那会儿 ChatGPT 刚火、大家都在想"怎么让 GPT 读我们自己的 PDF"。它把 RAG 的每一步抽象成清晰的模块——这比当时拿 OpenAI Embedding API + FAISS 手写循环要省事一个量级。2023 年改名 LlamaIndex,到 2026 年已经是 RAG 生态的事实标准之一。

二、为什么需要一个"数据框架"

看起来 RAG 不就是五步吗?

(1) 读文档 → (2) 切块 → (3) 向量化 → (4) 检索 → (5) 拼 prompt 给 LLM

每一步单看都简单。真正做起来每一步都有几十个要选的参数和细节,而且互相影响:

步骤表面上实际要纠结的
读文档打开文件PDF 表格怎么保留?扫描件 OCR?Markdown 标题层级?多语言?图片?元数据?
切块按字符切chunk_size = 512 还是 1024?overlap 要多少?按句子还是 token?Markdown 要不要按 section?
向量化调 embedding选 OpenAI/BGE/M3?中文还是多语?维度 768 vs 1536 存储成本?batch 多大?
检索最相似 top-kk=5 够不够?要不要重排?加 BM25 混合?metadata 过滤?HyDE 改写 query?
拼 prompt塞进 contextcontext 超长怎么办?多个源冲突?引用格式?"我不知道"怎么写?

手写做几版玩具还行,生产项目里这些参数都要可配、可换、可观测、可回放。LlamaIndex 就是把这整套流水线做成"可插拔组件",你决定用哪些,它负责把管道焊好。

三、LlamaIndex vs LangChain vs Haystack vs 手写

特征LlamaIndexLangChainHaystack手写
定位数据框架(RAG-first)通用 LLM orchestration企业级搜索+NLP pipeline
RAG 深度★★★★★★★★★★★★看你写多少
Agent 能力★★★(持续加强)★★★★(LangGraph 加持)★★看你写多少
上手5 行 RAG偏工程(LCEL)需学 Pipeline/Node 抽象自己发明轮子
数据连接器LlamaHub 300+150+若干自己写
可观测Arize Phoenix 原生LangSmith需额外接自己搭
适合RAG/检索/Agentic RAG复杂工作流/Agent传统搜索 + LLM几十行的小 demo
二者常混用:LlamaIndex 负责数据层(Ingestion / Index / Retriever),LangChain 负责 orchestration(Agent / 流程);LlamaIndex 也有自己的 Agent/Workflow 模块,生态相互兼容——一个项目用 LlamaIndex 做 RAG、LangGraph 做流程 是常见搭配。

四、RAG 全景图:LlamaIndex 覆盖的范围

┌──────────── LlamaIndex 覆盖区 ────────────┐ │ │ │ 数据源 │ │ PDF/DB/Notion/API ──▶ Reader │ │ │ │ │ ▼ │ │ Document │ │ │ │ │ Splitter │ │ │ ▼ │ │ Node(+metadata) │ │ │ │ │ Embedding │ │ │ ▼ │ │ Vector Store │ │ │ │ │ │ (query) │ │ 用户问题 ──▶ Retriever ──┴──▶ Nodes │ │ │ │ │ PostProc │ │ │ (重排/过滤) │ │ ▼ │ │ Query Engine ──▶ LLM │ │ │ │ └─────────────────────────────┼─────────────┘ ▼ 最终回答

这张图是后续 12 章的路线——每一章深挖一两个框。现在你只需要先记住:LlamaIndex 就是把"从数据到答案"之间所有机械工序自动化掉

五、五行 Hello RAG

最小可运行的 RAG,放一个文件夹的 PDF,问一个问题,看到答案:

pip install "llama-index>=0.12"
export OPENAI_API_KEY=sk-...
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader

docs  = SimpleDirectoryReader("./data").load_data()   # 读文件夹
index = VectorStoreIndex.from_documents(docs)             # 建索引(切块+嵌入+存)
qe    = index.as_query_engine()                            # 默认 Query Engine
ans   = qe.query("这份报告里 2025 Q3 的营收是多少?")
print(ans)

跑一次背后发生了什么:

  1. SimpleDirectoryReader 识别 ./data 里各种后缀的文件,分派给对应解析器(PDF → pypdf,docx → python-docx,...),产出 Document 列表
  2. VectorStoreIndex.from_documents 默认:用 SentenceSplitter 切块 → 用 OpenAI text-embedding-3-small 嵌入 → 存到内存的 SimpleVectorStore
  3. as_query_engine() 默认:top-k=2 检索 + gpt-4o-mini 回答 + 拼 prompt
  4. .query() 执行检索+合成,返回一个 Response 对象,自带 .source_nodes(被引用的 chunk)

这 5 行能跑,但离"生产可用"还远——后面每一章就是把这 5 行中的每个默认项,换成真正讲究的选择

六、核心概念速览

Document
一段原始文本(可能还带元数据),通常对应"一个文件/一条记录"。是数据进入 LlamaIndex 的第一站。
Node
Document 被切成的小块,也是索引/检索的最小单位。一个 chunk 就是一个 TextNode
Index
Node 的组织方式。最常见是 VectorStoreIndex(语义检索),也有 SummaryIndex、KeywordTableIndex、KnowledgeGraphIndex。
Retriever
从 Index 里拉出相关 Node。可自定义 top_k、阈值、过滤器,或用高级的 RecursiveRetriever / AutoRetriever。
Query Engine
检索 + LLM 合成,返回答案。最终用户接触的主接口。
Chat Engine
Query Engine + 对话历史管理 = Chat Engine。给聊天型 UI 用。
Agent
在 Query Engine 之上加"工具选择 + 多步推理",能调用多个 QE 和外部工具,面向 Agentic RAG。
Workflow
事件驱动的 DAG,把复杂流程(多分支/并行/HITL)拆成 @step。是 LlamaIndex 的 LangGraph 对应物。

七、装配 LlamaIndex 的正确姿势

LlamaIndex 模块化很彻底,核心包 + 按需装集成包:

# 核心(轻量,不绑 provider)
pip install llama-index-core

# LLM / Embedding provider
pip install llama-index-llms-openai
pip install llama-index-embeddings-openai
pip install llama-index-llms-anthropic
pip install llama-index-llms-ollama          # 本地模型

# Vector Store
pip install llama-index-vector-stores-qdrant
pip install llama-index-vector-stores-postgres

# Reader(LlamaHub)
pip install llama-index-readers-web
pip install llama-index-readers-database

# 方便的元包(把上面常用的都装上)
pip install llama-index                       # 包含 openai + 常用 reader
推荐生产项目用 llama-index-core + 显式装需要的集成包,比元包 llama-index 干净,版本锁定也清楚。

八、2026 年生态位

九、什么时候别用 LlamaIndex

这些场景换个工具可能更合适:

十、12 章的学习路线

  1. 基础三章(Ch1-3):框架定位、Document/Node 数据模型、数据连接器
  2. 索引与向量(Ch4-6):Ingestion Pipeline、Index 家族、Vector Store 选型
  3. 查询与高级 RAG(Ch7-8):Retriever/QueryEngine 精调、HyDE/SubQ/Self-RAG
  4. Agent 与 Workflow(Ch9-10):FunctionAgent/ReAct、事件驱动 Workflow
  5. 质量与生产(Ch11-12):Eval/观测、FastAPI/llama_deploy/上线 checklist

每章都围绕"这一步你要做什么决策,各方案的取舍"讲,而不是照搬 API 文档。读完后你应该能独立设计一个 RAG 系统,并说出为什么每一步这样选。

十一、本章小结

记住:
① LlamaIndex 是 数据框架,LangChain 是 orchestration 框架,二者常组合使用而不是互斥。
② RAG 看起来五步,每一步几十个参数要选;LlamaIndex 把这些做成可插拔组件。
③ 五行 Hello RAG 能跑通,但默认项都要根据业务替换——这是后面 11 章的主题。
④ 2026 年 LlamaIndex 已是 RAG 事实标准之一,300+ 连接器 + LlamaParse + llama_deploy 构成完整生态。