LlamaIndex 详解:构建 RAG 与代理应用的数据框架
让大模型用上私有数据(文档、数据库、API),最成熟的路径就是 RAG;而把"接入数据、建索引、检索问答、编排代理"这套流程做成框架的,正是 run-llama/llama_index(LlamaIndex)。它是一个开源的数据框架,约 51.8k Star、MIT 协议,官方定位已从"LLM 应用的数据框架"演进到"构建代理应用(agentic applications)"。本文从核心概念、快速上手、两种用法到本地模型与生态,完整拆解。
1、项目概述
LlamaIndex 由 LlamaIndex 公司(Jerry Liu 创立)开源,仓库约 51.8k Star、8k Fork,MIT 协议。它解决的核心问题:大模型不懂你的私有数据,而把数据"喂"给模型需要一整条管线——读取、解析、切分、嵌入、索引、检索、生成,LlamaIndex 把这条管线标准化成了组件与 API。
基本面:
- 两种应用形态:RAG 查询引擎(问数据)与代理(自动完成任务)
- 300+ 集成包(LlamaHub):各家 LLM、嵌入模型、向量库即插即用
- 云端配套 LlamaCloud:LlamaParse 解析、Extract 抽取、托管索引等
- 可与 LangChain、Flask、Docker、ChatGPT 插件等外部框架集成
2、核心概念:连接器、索引与引擎
LlamaIndex 的抽象围绕"数据进来、组织好、查出去"三步展开。
三大件:
- Data Connectors(数据连接器):从 API、PDF、文档、SQL 等来源读入数据
- Data Indexes(数据索引):把文档切块、嵌入,组织成向量索引、树、图等结构
- Engines(引擎):在索引之上提供检索与问答接口——送入提示词,拿回检索上下文与知识增强后的答案
理解要点:
1. 连接器负责"异构数据进来",索引负责"数据变知识",引擎负责"知识变答案"
2. 查询引擎(Query Engine)面向精准问答,代理(Agent)面向多步任务
3. 索引结构可选:向量索引最常用,也有树索引、关键词表、知识图谱等
4. 各环节(LLM、嵌入、切分、检索器)都可替换成任意集成包
3、安装与快速上手
入门用一站式安装包即可;追求可控可按需装核心加集成。
// 一站式安装(核心 + 精选集成)
pip install llama-index
// 或按需组装:核心 + 各集成包(LlamaHub 有 300+ 个)
pip install llama-index-core
pip install llama-index-llms-openaiimport os
os.environ["OPENAI_API_KEY"] = "YOUR_OPENAI_API_KEY"
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
// 读目录下的文档,一键建成向量索引
documents = SimpleDirectoryReader("YOUR_DATA_DIRECTORY").load_data()
index = VectorStoreIndex.from_documents(documents)上手要点:
1. SimpleDirectoryReader 读入整个目录的文档(PDF、Markdown、文本等)
2. VectorStoreIndex.from_documents 一步完成切块、嵌入与建索引
3. 默认走 OpenAI,需设置 OPENAI_API_KEY 环境变量
4. 生产环境建议按需安装,避免全量依赖拖慢部署
4、两种用法:RAG 查询与代理
索引建好后,最常见的用法是把它变成查询引擎;更进一步则用 Workflows 编排代理。
// 用法一:RAG 查询引擎——对私有数据问答
query_engine = index.as_query_engine()
response = query_engine.query("YOUR_QUESTION")
print(response)两种用法对比:
- 查询引擎:固定管线"检索 → 组装上下文 → 生成",适合文档问答、知识库
- 代理:由 LLM 决策调用哪些工具(查询引擎也是一种工具),适合多步任务
- 多代理用 Workflows 编排,官方 Agent Builder 可可视化搭建文档代理
选型要点:
1. 需求只是"对着文档问答案" → 查询引擎,简单稳定
2. 需要跨多个数据源、多步推理、调用工具 → 代理
3. 代理可把查询引擎当工具挂载,两种形态天然组合
5、换用本地模型:Ollama 与 HuggingFace
不想把数据发给 OpenAI?用 Settings 全局换成本地 LLM 与本地嵌入,三行配置搞定。
from llama_index.core import Settings, VectorStoreIndex, SimpleDirectoryReader
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.llms.ollama import Ollama
from transformers import AutoTokenizer
// 换本地 LLM(Ollama 跑 llama-3.1)
Settings.llm = Ollama(model="llama-3.1:latest", request_timeout=360.0)
// tokenizer 与 LLM 对齐
Settings.tokenizer = AutoTokenizer.from_pretrained(
"meta-llama/Llama-3.1-8B-Instruct")
// 换本地嵌入模型
Settings.embed_model = HuggingFaceEmbedding(model_name="BAAI/bge-small-en-v1.5")
documents = SimpleDirectoryReader("YOUR_DATA_DIRECTORY").load_data()
index = VectorStoreIndex.from_documents(documents)本地化要点:
1. Settings.llm / Settings.embed_model 全局生效,业务代码零改动
2. tokenizer 与所选 LLM 对齐,切分与计数才准确
3. 嵌入模型常选 BAAI 的 bge 系列,中文场景同样适用
4. 与 qmd 这类本地检索工具互补:一个面向生产管线,一个面向个人笔记
6、索引持久化与重载
索引建一次反复用:持久化到本地,下次直接加载,跳过重复嵌入的花销。
// 保存索引到 ./storage
index.storage_context.persist()
// 下次直接重载,无需重新嵌入
from llama_index.core import StorageContext, load_index_from_storage
storage_context = StorageContext.from_defaults(persist_dir="./storage")
index = load_index_from_storage(storage_context)持久化要点:
1. storage_context.persist() 把索引与元数据落盘
2. 重载用 load_index_from_storage,指定持久化目录即可
3. 文档更新后需重建或增量更新索引
4. 生产环境可把存储层换成外部向量库(Chroma、Milvus 等)
7、生态:LlamaHub 与 LlamaCloud
LlamaIndex 的强势之处在生态:开源集成库 LlamaHub 加云端服务 LlamaCloud 双轮驱动。
LlamaHub(开源集成):
- 300+ 集成包:LLM(OpenAI、Anthropic、Ollama...)、嵌入、向量库、读取器
- 每个集成独立发版,按需安装、互不拖累
LlamaCloud(企业平台):
- LlamaParse:代理式文档解析,支持 130+ 格式,专攻复杂 PDF / 表格
- Extract / Index / Split / Agents:抽取、托管索引、切分与代理服务
- 可独立使用,也可与开源框架组合;注册入口 cloud.llamaindex.ai
与周边工具的搭配:
- LiteLLM 做网关统一各家模型,LlamaIndex 在其上做数据与检索
- LLMLingua 可插在"检索之后、生成之前"压缩上下文,进一步省 token
8、总结
LlamaIndex 是构建 RAG 与代理应用的开源数据框架,51.8k Star、MIT 协议。它用连接器接入异构数据,用索引把文档组织成可检索的知识,用查询引擎与代理两种形态输出答案;300+ LlamaHub 集成让模型、嵌入、向量库随意替换,Settings 三行配置即可切换到 Ollama 本地全链路,索引可持久化复用,企业侧还有 LlamaParse 等云端服务。
落地建议:文档问答起步用"SimpleDirectoryReader + VectorStoreIndex + as_query_engine"三行核心链路;数据敏感就换 Ollama 本地模型;规模变大后把存储迁到外部向量库、把多步需求升级成 Workflows 代理。与 LiteLLM(网关)、LLMLingua(压缩)组合,即构成一套完整的多模型 RAG 生产架构。对于要做私有数据应用的团队,LlamaIndex 是必要的框架层选择。