LlamaIndex框架

LlamaIndex(原名 GPT Index)是专注于 数据连接和检索 的 LLM 框架,是构建 RAG 应用的首选工具之一。

LlamaIndex 定位

一句话:LlamaIndex 是专门为 LLM 数据索引和检索设计的框架

如果说 LangChain 是”瑞士军刀”,LlamaIndex 就是”手术刀”——在数据检索领域更精准、更高效。它原名 GPT Index,2023 年更名为 LlamaIndex;其中 “Llama” 借用了大语言模型 LLaMA 的品牌意象(也暗含 Large Language Model 的谐音),强调”为大模型量身打造的数据索引层”。


graph TD

    LI[LlamaIndex 生态] --> core[llama-index-core<br/>核心框架]

    LI --> readers[llama-index-readers<br/>数据加载器 150+ 种]

    LI --> llms[llama-index-llms<br/>LLM 集成]

    LI --> emb[llama-index-embeddings<br/>Embedding 模型集成]

    LI --> vs[llama-index-vector-stores<br/>向量数据库集成]

    LI --> qg[llama-index-question-gen<br/>问题生成]

    LI --> ft[llama-index-finetuning<br/>微调工具]

核心组件

1. Data Connectors 数据连接器

LlamaIndex 支持 150+ 种数据源:

类别加载器支持格式
文件SimpleDirectoryReaderPDF, Word, MD, TXT, HTML
数据库SQLDatabaseReaderMySQL, PostgreSQL
网页WebPageReader任意网页
APIGoogleDocsReader, NotionReaderGoogle Docs, Notion
云存储S3Reader, GCSReaderAWS S3, Google Cloud Storage
嵌入式WikipediaReader, SlackReaderWikipedia, Slack

最简单的方式:

 
from llama_index.core import SimpleDirectoryReader
 
documents = SimpleDirectoryReader("./data").load_data()
 

2. Index 索引类型

LlamaIndex 的核心是将文档组织为不同类型的索引:

索引类型原理适用场景
Vector Store Index向量相似度检索通用 RAG(最常用)
Summary Index按文档顺序遍历生成摘要摘要、总览任务
Tree Index构建文档树,逐层摘要层次化查询
Keyword Table Index关键词倒排索引精确关键词匹配
Knowledge Graph Index构建知识图谱关系推理、图查询

Vector Store Index(最常用)

 
from llama_index.core import VectorStoreIndex
 
index = VectorStoreIndex.from_documents(documents)
 
# 自动生成分块 → Embedding → 向量存储
 

Tree Index


graph TD

    DOC[文档] --> CHUNK[分块]

    CHUNK --> SUM[每个块生成摘要]

    SUM --> TREE[对摘要构建树]

    QUERY[查询时] --> ROOT[从根节点逐层选择最相关的分支]

适合需要”从全局到细节”的查询模式。

Knowledge Graph Index


graph LR

    DOC[文档] --> ENT[实体提取]

    ENT --> REL[关系提取]

    REL --> KG[构建知识图谱]

    QUERY[查询时] --> TRAVERSE[图遍历 → 找到相关实体和关系]

适合需要多跳推理的场景。

3. Query Engine 查询引擎

查询引擎 = Index + 查询策略 + 后处理:

 
# 基础查询引擎
 
query_engine = index.as_query_engine()
 
# 带参数的查询引擎
 
query_engine = index.as_query_engine(
 
    similarity_top_k=5,        # 检索 Top-5
 
    response_mode="compact",   # 压缩上下文
 
    verbose=True
 
)
 
response = query_engine.query("什么是RAG?")
 

response_mode 选项:

模式说明
refine逐个文档精炼答案(质量最高,最慢)
compact将多个文档压缩为一个 prompt(推荐)
tree_summarize递归摘要生成最终答案
simple只用 Top-1 文档生成答案(最快)
accumulate将所有文档的答案拼接

4. Response Synthesizer 响应合成器

负责将检索到的文档片段合成为最终答案:


graph LR

    RET[检索结果] --> PROMPT[Prompt 模板]

    PROMPT --> LLM[LLM 生成]

    LLM --> OUT[答案 + 引用]

LlamaIndex RAG 数据流

LlamaIndex 把”建索引”和”查索引”分成两个清晰阶段,这正是它比通用框架更顺手的原因:


flowchart LR

    subgraph BUILD[构建阶段 Indexing]

        DC[Data Connector<br/>150+ 数据源] --> IDX[Index 索引<br/>Vector/Tree/KG...]

        IDX --> VS[(向量库 / 存储)]

    end

    Q[用户问题] --> QE[Query Engine<br/>查询引擎]

    VS --> QE

    QE --> RS[Response Synthesizer<br/>响应合成器]

    RS --> A[答案 + 引用出处]

索引只在数据变化时重建,查询阶段是无状态轻量推理,因此生产环境可把索引预构建好、查询侧弹性扩容。

LlamaIndex 高级功能

Sub-Question Query Engine

将复杂问题拆分为子问题,分别检索后综合:


graph TD

    Q[原始问题:比较 OpenAI 和 Anthropic 的模型定价] --> SPLIT[拆分]

    SPLIT --> SQ1[子问题 1:OpenAI 的模型定价是多少?]

    SPLIT --> SQ2[子问题 2:Anthropic 的模型定价是多少?]

    SQ1 --> RET1[分别检索 + 回答]

    SQ2 --> RET2[分别检索 + 回答]

    RET1 --> FINAL[最终答案:综合两个子答案生成比较结果]

    RET2 --> FINAL

Router Query Engine

根据问题类型自动路由到不同的索引/工具:

 
from llama_index.core.query_engine import RouterQueryEngine
 
router = RouterQueryEngine.from_defaults(
 
    query_engine_tools=[
 
        query_engine_weather,    # 天气查询
 
        query_engine_news,       # 新闻查询
 
        query_engine_knowledge  # 知识问答
 
    ]
 
)
 

Auto-Merging Retriever

检索文档块时,如果相邻块都被检索到,则自动合并为更大的上下文:


graph LR

    RET[检索到] --> B3[Block 3]

    RET --> B4[Block 4]

    RET --> B5[Block 5]

    B3 --> MERGE[自动合并]

    B4 --> MERGE

    B5 --> MERGE

    MERGE --> PAGE[Page 2 包含 Block 3-5 的完整页面]

LlamaIndex vs LangChain 选型

场景推荐理由
纯 RAG 应用LlamaIndex原生深度支持,开箱即用
复杂 Agent 工作流LangChain + LangGraphAgent 能力更强
数据分析/报告LlamaIndexTree/Summary 索引天然适配
多工具协作 AgentLangChain工具集成更丰富
需要监控评估LangSmith (LangChain)成熟的可观测性平台
快速原型 RAGLlamaIndex最少代码量

两者可以结合使用: 用 LlamaIndex 构建检索层,用 LangChain 构建 Agent 编排层。


快速问答

问题参考答案
LlamaIndex 的核心定位是什么?专注于数据连接和检索的 LLM 框架。核心能力是将各种数据源索引化,并提供高效的查询接口
LlamaIndex 支持哪些索引类型?Vector Store(向量)、Summary(摘要)、Tree(树)、Keyword(关键词)、Knowledge Graph(知识图谱)
Vector Store Index 和 Tree Index 的区别?Vector Store 用向量相似度检索,适合通用场景;Tree 用层次化摘要,适合”从全局到细节”的查询
response_mode 有哪些?怎么选?refine(逐个精炼,最慢最好)、compact(压缩上下文,推荐)、tree_summarize(递归摘要)、simple(最快最简单)
LlamaIndex 如何处理多模态数据?通过 Data Connector 加载图片/音频,使用多模态 Embedding 模型(如 CLIP)进行向量化,支持跨模态检索
Sub-Question Query Engine 是什么?将复杂问题拆分为多个子问题,分别检索和回答后综合。适合需要多个知识来源的问题
LlamaIndex 的评估工具有哪些?FaithfulnessEvaluator、RelevancyEvaluator、CorrectnessEvaluator。可通过 llama-index-evaluation 包使用
LlamaIndex 在生产环境中的挑战?① 索引更新策略 ② 大规模文档的构建时间 ③ 查询延迟优化 ④ 评估指标体系搭建

速记卡(面试闪卡)

Q1:一句话讲清「LlamaIndex框架」到底是什么?

A:LlamaIndex 是专注数据连接与检索的 LLM 框架,RAG 应用首选。

Q2:LlamaIndex 定位 —— 怎么理解?

A:像数据检索界的”手术刀”:LangChain 是瑞士军刀啥都能干,LlamaIndex 专攻”把各种数据源索引化并提供高效查询”。原名 GPT Index,2023 年改名,强调为大模型量身打造的数据索引层。

Q3:核心组件 —— 怎么理解?

A:像图书馆的采编、排架、借阅三件套:Data Connectors(数据连接器,150+ 数据源)、Index(索引,含 Vector/Tree/Keyword/Knowledge Graph)、Query Engine(查询引擎)、Response Synthesizer(响应合成器)。

Q4:LlamaIndex RAG 数据流 —— 怎么理解?

A:像先建好仓库再随时发货:构建阶段把数据接进来、建索引、存向量库;查询阶段无状态轻量推理,直接查索引。所以索引可预构建、查询侧弹性扩容,省时省钱。

Q5:LlamaIndex 高级功能 —— 怎么理解?

A:像给图书馆加智能助手:Sub-Question(把难题拆成子问题分别检索再综合)、Router(按问题类型自动路由到不同索引)、Auto-Merging Retriever(相邻块都被命中就自动合并成大上下文)。

Q6:核心速记主线有哪些?

  • 定位:数据检索手术刀,RAG 首选

  • 核心四组件:连接器/索引/查询引擎/合成器

  • 数据流:建索引与查索引两阶段分离

  • 高级:子问题/路由/自动合并检索

口诀

A:LlamaIndex 手术刀,专攻检索效率高;

四件套把数据理,连接索引查问好;

建仓查仓两分离,预建索引弹性跑;

子题路由自动并,RAG 首选错不了。

相关链接

相关链接