这是做什么的
LlamaIndex 用 SimpleDirectoryReader 加载目录下的文档、VectorStoreIndex 建立向量索引,查询引擎自动完成「检索 + 合成回答」,适合快速搭出文档问答原型。它的数据连接器与索引抽象较清晰,切片与节点关系(node)是核心概念,便于后续做父子块与增量更新。
基本信息
| 适用 | Python,文档问答原型与中小规模知识库 |
|---|---|
| 核心概念 | Document(文档)→ Node(节点)→ Index(索引)→ QueryEngine(查询引擎) |
| 默认存储 | 内存索引,进程退出即丢失 |
| 持久化 | 可落盘,也可外接 Milvus、Qdrant、pgvector 等向量库 |
精简示例
精简示例
from llama_index.core import SimpleDirectoryReader, VectorStoreIndex
docs = SimpleDirectoryReader("data").load_data()
index = VectorStoreIndex.from_documents(docs)
engine = index.as_query_engine(similarity_top_k=3)
resp = engine.query("文档里如何配置超时?")
print(resp)
for node in resp.source_nodes:
print(node.score, node.metadata.get("file_name"))使用要点
- 先看 source_nodes:返回的引用节点才是可核验的依据,答案文本只是加工结果
- 配好持久化:落盘或外接向量库,避免每次重启重建索引
- 控制批量:入库时设置批量大小与并发,减少 embedding 接口压力
- 调切片:默认分词器按英文设计,中文语料建议显式配置切片长度与分隔符
- 加元数据:把文件名、页码、章节写入节点元数据,引用与过滤都要用
常用组件
| 环节 | 组件 | 注意 |
|---|---|---|
| 加载 | SimpleDirectoryReader | 按扩展名分发解析器,扫描件需另配 OCR |
| 切分 | NodeParser / SentenceSplitter | 中文需调整块长与分隔符 |
| 索引 | VectorStoreIndex | 默认内存,生产需外接向量库 |
| 查询 | as_query_engine | similarity_top_k 决定进入上下文的节点数 |
默认是内存索引,进程退出即丢失;生产环境要配置持久化(落盘或外接 Milvus、Qdrant、pgvector 等向量库),否则每次重启都要重新向量化一遍。
与同类框架的差别
- 它以索引与节点为中心,文档到查询的路径更短,适合文档问答
- 另一类框架以组件与编排为中心,组合更自由但链路要自己串
- 两者在向量化模型与向量库封装上可互换,选择不必与存储绑定
- 原型阶段选哪个都可以,关键是尽早固定切片策略与评测集
- 迁移成本主要落在自定义解析与元数据字段,建议一开始就抽象出来