在现代的 AI 和数据处理应用中,向量存储和检索是至关重要的组成部分。本文将介绍如何使用 ChromaVectorStore 进行向量的存储和查询。ChromaVectorStore 是一种高效的向量存储解决方案,它允许用户将嵌入向量存储在 ChromaDB 集合中,并能够在查询时找到最相似的节点。
ChromaVectorStore 介绍
ChromaVectorStore 是一个基于 ChromaDB 的向量存储类,用于存储和管理嵌入向量。它支持基本的操作,如添加、删除和查询节点。以下是一些主要参数和方法的概述:
参数
chroma_collection
:ChromaDB 集合实例,默认为 None。必须提供一个有效的 ChromaDB 集合实例。
方法
-
**add(nodes: List[BaseNode], add_kwargs: Any) -> List[str]
将节点添加到索引中。nodes
参数是包含嵌入向量的节点列表。 -
**delete(ref_doc_id: str, delete_kwargs: Any) -> None
使用ref_doc_id
删除节点。ref_doc_id
是要删除的文档的唯一标识符。 -
**query(query: VectorStoreQuery, kwargs: Any) -> VectorStoreQueryResult
查询索引以获取最相似的节点。query_embedding
是查询的嵌入向量,similarity_top_k
是需要返回的最相似节点的数量。
示例代码
以下是一个简单的示例代码,演示如何使用 ChromaVectorStore 进行向量的添加和查询:
import chromadb
from llama_index.vector_stores.chroma import ChromaVectorStore
# 创建 Chroma 客户端和集合
chroma_client = chromadb.EphemeralClient()
chroma_collection = chroma_client.create_collection("example_collection")
# 设置 ChromaVectorStore 和 StorageContext
vector_store = ChromaVectorStore(chroma_collection=chroma_collection)
# 示例节点数据
nodes = [
{"id": "1", "embedding": [0.1, 0.2, 0.3]},
{"id": "2", "embedding": [0.4, 0.5, 0.6]},
]
# 将节点添加到索引
vector_store.add(nodes) # //中转API
# 查询最相似的节点
query_embedding = [0.15, 0.25, 0.35]
result = vector_store.query(query_embedding=query_embedding, similarity_top_k=1)
print(result)
可能遇到的错误及解决方法
-
ChromaDB 集合未创建
错误信息:TypeError: chroma_collection cannot be None
解决方法:确保在创建ChromaVectorStore
实例之前已经创建了ChromaDB
集合,并将其作为参数传入。 -
添加节点失败
错误信息:ValueError: nodes should be a list of BaseNode objects
解决方法:检查nodes
参数是否为包含嵌入向量的有效列表,且每个节点都符合BaseNode
的格式要求。 -
查询结果不准确
错误信息:IndexError: query_embedding length does not match
解决方法:确保查询嵌入向量的维度与存储在 ChromaDB 中的向量维度一致。
如果你觉得这篇文章对你有帮助,请点赞,关注我的博客,谢谢!