Day 10 / 共 20 天 · 第 2 周 索引/嵌入/存储
其他索引类型(选对检索策略)
第 2 周收官。VectorStoreIndex 最常用,但不是唯一。今天概览其他索引,核心是理解一句话:选什么索引 = 选什么检索策略。看它们各自适合什么场景。
📍 你在整条链的位置
④ 建索引(VectorStore 主线)→
④' 其他索引类型→
⑤检索 ⑥合成(W3)
L01
索引类型 = 检索策略
💡 不同索引 = 不同的"组织方式"= 不同的"怎么找"
indices/ 目录:vector_store/(语义找)、list/(全遍历)、keyword_table/(按词找)、document_summary/(两级)、tree/(层级)、property_graph/(按关系找)。它们都继承 BaseIndex(Day 07 统一接口),但内部检索逻辑不同。用"图书馆找书"类比
向量索引=按"主题相近"找;关键词索引=按书名关键词找;摘要索引=先看简介再翻章节;图索引=顺着"作者→其他作品"的关系找。同一批书(Node),不同的找法(索引)适合不同的问题。
L02
SummaryIndex(全都要)
indices/list/:把所有 Node 存成列表,检索时遍历全部。
💡 和 VectorStore 正好相反:一个"精选",一个"全要"
VectorStoreIndex 只取最相关的几个;SummaryIndex 把所有 Node 都拿来。
📝 什么时候用
问"
问"
缺点:文档多了慢(全遍历 + 全喂 LLM,费钱)。
总结这份文档讲了什么?"——需要看全文,不能只看相关几段。用 SummaryIndex。问"
报销上限多少?"——只需相关那段,用 VectorStoreIndex。缺点:文档多了慢(全遍历 + 全喂 LLM,费钱)。
L03
KeywordTableIndex(按词找)
indices/keyword_table/:给每个 Node 抽关键词,建"关键词→Node"倒排表。查询时从问题抽词,找含这些词的 Node。
经典搜索引擎式检索
像 Google 早期的关键词匹配。适合"精确术语"场景(产品型号
iPhone 15 Pro、专有名词)——这些用向量反而可能不准(相近型号会混)。缺点:不懂语义("退款"匹配不到"退货")。实践中常和向量检索"混合"(Day 11 的 QueryFusion),取长补短。L04
DocumentSummaryIndex(两级找)
indices/document_summary/:给每份文档生成摘要,检索时先按摘要选相关文档,再深入其 Node。
💡 先选书,再翻页
很多份长文档时,直接在所有 Node 里找,可能被"局部相似但整体无关"的段落误导。先用摘要判断"哪几份文档相关",再在这些文档里细找。就像先看书的简介选书,再翻具体章节——提升"文档级相关性"的准确度。
L05
TreeIndex(层级摘要)
indices/tree/:把 Node 建成树——叶子是原始 Node,上层是 LLM 生成的"摘要",层层向上。
摘要金字塔,从粗到细
建树时 LLM 把每组 Node 摘要成父节点,形成金字塔。查询时从顶层摘要逐层向下定位到最相关叶子。适合超长文档的层级导航。回想 Day 02 的 PARENT/CHILD 关系——TreeIndex 就是用它们建的。建树要多次调 LLM(贵),检索时高效聚焦。
L06
PropertyGraphIndex(GraphRAG)
indices/property_graph/(较新,取代旧 knowledge_graph):用 LLM 从文档抽"实体-关系-实体"三元组,建成知识图谱,检索时按图关系遍历。
知识图谱:实体是点、关系是边。问"张三创办的公司在哪上市"→ 顺着 创办→上市于 两跳找到"纳斯达克"。
解决"多跳推理"(向量检索答不了的)
普通向量检索找"语义相似的段落",但答不了"张三创办的公司在哪上市?"这种需要顺着关系链走两三步的问题。GraphRAG 把文档变成知识图谱,沿图遍历回答。这是 2024 年很火的方向,适合关系推理、多跳问答。建图要大量 LLM 抽取(贵),但能答向量检索答不了的问题。
L07
怎么选 / 能组合
| 场景 | 推荐索引 |
|---|---|
| 通用问答(默认) | VectorStoreIndex |
| 总结/需要全文 | SummaryIndex |
| 精确术语匹配 | KeywordTableIndex(或混合) |
| 多份长文档 | DocumentSummaryIndex |
| 关系/多跳推理 | PropertyGraphIndex |
不必二选一
LlamaIndex 支持"路由"(RouterQueryEngine,问题来了自动选合适的索引)和"组合"(一个索引嵌套另一个)。90% 入门场景 VectorStoreIndex 就够——其他是特定需求的进阶选择。
L08
今日小结 + 动手(第 2 周收官)
🧠 第 2 周你应该能回答
- "索引类型 = 检索策略"怎么理解?
- SummaryIndex(全要)vs VectorStoreIndex(精选)的对立?
- DocumentSummaryIndex 的"两级检索"好在哪?
- PropertyGraphIndex(GraphRAG)适合什么向量检索答不了的问题?
✋ 动手
cd /Users/bitmart/work/codes/github/llama_index/llama-index-core/llama_index/core
ls indices/
grep -rn "class SummaryIndex\|class KeywordTableIndex" indices/list/base.py indices/keyword_table/base.py 2>/dev/null | head
ls indices/property_graph/
下周预告 · 第 3 周:库建好了(离线阶段完),进入 RAG 的"在线查询"——Retriever(找)→ QueryEngine(端到端问答)→ 合成答案 → 后处理 → LLM。Day 11 从检索器讲起。