# 引言
在现代数据分析和实时应用中,处理大规模向量数据已成为一种趋势。ClickHouse,作为一个开源的高性能数据库,能够以最小的资源消耗支持全SQL的实时应用和分析请求。它近期新增的数据结构和搜索功能,如L2Distance以及近似最近邻搜索索引,使其成为一个可扩展的向量数据库解决方案。本篇文章将介绍如何利用ClickHouse的向量存储功能,管理和查询大规模向量数据。
# 主要内容
## 1. 环境设置
首先,我们需要通过Docker来设置本地的ClickHouse服务器:
```bash
! docker run -d -p 8123:8123 -p9000:9000 --name langchain-clickhouse-server --ulimit nofile=262144:262144 clickhouse/clickhouse-server:23.4.2.11
接下来,安装必要的Python包:
pip install -qU langchain-community clickhouse-connect
2. 向量存储初始化
在进行任何操作之前,我们需要初始化向量存储,这包含选择嵌入模型和配置ClickHouse:
import getpass
from langchain_openai import OpenAIEmbeddings
# 使用API代理服务提高访问稳定性
os.environ["OPENAI_API_KEY"] = getpass.getpass()
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)
3. 管理向量存储
添加文档
我们可以通过add_documents函数向向量存储中添加文档:
from uuid import uuid4
from langchain_core.documents import Document
documents = [
Document(page_content="I had chocolate chip pancakes for breakfast.", metadata={"source": "tweet"}),
# 添加更多文档...
]
uuids = [str(uuid4()) for _ in documents]
vector_store.add_documents(documents=documents, ids=uuids)
删除文档
通过文档ID删除向量存储中的项:
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}]")
常见问题和解决方案
- 访问问题:某些地区可能需要使用API代理服务以提高访问稳定性。
- SQL注入风险:当直接使用SQL查询时,请务必注意防范SQL注入攻击。
总结和进一步学习资源
ClickHouse通过其强大的向量存储能力成为大数据分析的有力工具。要深入了解更多,可以查看以下资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---