在现代AI应用中,向量存储(Vector Store)是一个重要组件,用于高效地存储和查询向量化的数据。在本文中,我们将介绍如何使用ClickHouse作为向量存储,并集成到Llama Index系统中。
什么是ClickHouse向量存储?
ClickHouse是一个开源的列式数据库管理系统,以其高性能著称。我们可以利用ClickHouse来存储和查询向量化的数据,适用于需要快速检索相似数据的场景。
ClickHouse向量存储的主要参数
clickhouse_client
: 现有ClickHouse集群的httpclient。table
: 数据存储的ClickHouse表的名称,默认为 “llama_index”。database
: 数据存储的ClickHouse数据库名称,默认为 “default”。index_type
: ClickHouse向量索引的类型,支持(“NONE”, “HNSW”, “ANNOY”),默认为 “NONE”。metric
: ClickHouse向量索引的度量类型,默认为 “cosine”。batch_size
: 插入文档的大小,默认为1000。index_params
: ClickHouse索引的参数。search_params
: ClickHouse查询的参数。service_context
: 向量存储服务上下文。
安装和初始化
首先,我们需要安装ClickHouse向量存储的Python包:
pip install llama-index-vector-stores-clickhouse
接下来,我们可以初始化ClickHouse客户端并创建向量存储实例:
from llama_index.vector_stores.clickhouse import ClickHouseVectorStore
import clickhouse_connect
# 初始化ClickHouse客户端
client = clickhouse_connect.get_client(
host="localhost",
port=8123,
username="default",
password="",
)
# 创建向量存储实例
vector_store = ClickHouseVectorStore(clickhouse_client=client)
添加和查询数据
我们可以使用向量存储对象添加向量数据,并执行查询操作:
from llama_index.base import BaseNode
# 添加节点到索引
nodes = [BaseNode(embedding=[0.1, 0.2, 0.3], metadata={"id": "node1"})]
vector_store.add(nodes)
# 查询相似节点
from llama_index.vector_stores.base import VectorStoreQuery, VectorStoreQueryResult
query = VectorStoreQuery(embeddings=[0.1, 0.2, 0.3])
result = vector_store.query(query)
# 输出查询结果
print(result)
可能遇到的错误
-
连接失败: 确保ClickHouse服务正在运行,并且连接参数正确。
# 如果连接失败,检查以下代码是否正确 client = clickhouse_connect.get_client( host="localhost", port=8123, username="default", password="", )
-
索引类型不支持: 确保索引类型在ClickHouse实例中已启用。
# 检查index_type参数是否正确 vector_store = ClickHouseVectorStore(clickhouse_client=client, index_type="HNSW")
-
查询返回零结果: 检查查询向量和存储在向量中的数据是否匹配。
# 确保查询向量的格式和存储向量一致 query = VectorStoreQuery(embeddings=[0.1, 0.2, 0.3])
如果你觉得这篇文章对你有帮助,请点赞,关注我的博客,谢谢!
参考资料: