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 都拿来。
📝 什么时候用 问"总结这份文档讲了什么?"——需要看全文,不能只看相关几段。用 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 从文档抽"实体-关系-实体"三元组,建成知识图谱,检索时按图关系遍历。

张三 A公司 B公司 纳斯达克 CEO 创办 上市于
知识图谱:实体是点、关系是边。问"张三创办的公司在哪上市"→ 顺着 创办→上市于 两跳找到"纳斯达克"。
解决"多跳推理"(向量检索答不了的) 普通向量检索找"语义相似的段落",但答不了"张三创办的公司在哪上市?"这种需要顺着关系链走两三步的问题。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 从检索器讲起。
← Day 09 Day 11 · 检索器 →