LLamaIndex里面的Index

CVP栈里面的V就是一种Index。使用LLamaIndex的时候,会用到各类的Index。

一、索引类型

1. 列表索引(现在叫总结索引Summary)

顺序的节点,逐个进行查询。 [Node]->[Node]->[Node]

查询

查询的时候,如果无任何参数,直接返回所有的Node。 同时提供很多种查询方法,例如,嵌入式查询会返回TopN的邻居,或附加其他关键字过滤条件。

2. 向量索引

可以提供语义相似度进行检索。数据存储在一个向量存储内。 查询出TopN的相似节点。然后进行返回。

3. 树索引

从下而上构建,上级是下级的总结。每个父节点包含子节点的信息。使用时候可以从父节点开始,或者直接从叶节点开始。

树索引的查询涉及到从根节点的便利。

4. 关键词索引

关键词和节点(LlamaIndex中的Node)之间是N-to-N的连接。 其实就算是标签和节点的关系。

查询的时候就是找查询中的关联关键词。

5. 图索引

有关系结构的索引,使用的时候可以在这个基础上进行二次索引,并且在找到相关节点后,进行相关知识的关联检索。

二、构建和使用索引

documents = SimpleDirectoryReader('data').load_data()
index = GPTVectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine()
response=query_engine.query("What did the author do growing up?")
print(response)

三、保存和加载索引

索引生成需要调用GPT等模型,保存索引可以多次使用,从加快速度,节省token,降低大模型使用成本

保存索引:

index.storage_context.persist()

加载索引:

from llama_index import StorageContext, load_index_from_storage

storage_context = StorageContext.from_defaults(persist_dir="./storage")
indexindex = load_index_from_storage(storage_context)