引言
在不断增长的数据世界中,高效的搜索能力变得越来越重要。Aerospike Vector Search (AVS) 提供了一种强大的解决方案,能够在大型数据集中进行快速的向量搜索。这篇文章将介绍如何使用LangChain集成来利用AVS的强大功能。
主要内容
1. 安装Aerospike Vector Search
在开始之前,确保您有一个正在运行的AVS实例。可以使用多种安装方法之一。当完成后,记录您的AVS实例的IP地址和端口,以便在示例中使用:
PROXIMUS_HOST = "<avs-ip>"
PROXIMUS_PORT = 5000
2. 安装依赖
安装必要的包,包括aerospike-vector-search和langchain。
!pip install --upgrade --quiet aerospike-vector-search==0.6.1 langchain-community sentence-transformers langchain
3. 下载和加载数据集
下载包含10万条语录的数据集,并加载其中的5,000条。
import itertools
import os
import tarfile
from langchain_community.document_loaders.csv_loader import CSVLoader
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))
4. 创建向量嵌入和索引
使用HuggingFace模型创建嵌入,并在Aerospike中创建索引。
from aerospike_vector_search import AdminClient, Client, HostPort
from langchain_community.embeddings import HuggingFaceEmbeddings
MODEL_DIM = 384
MODEL_DISTANCE_CALC = VectorDistanceMetric.COSINE
embedder = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2")
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=MODEL_DISTANCE_CALC,
dimensions=MODEL_DIM,
)
admin_client.close()
docstore = Aerospike.from_documents(
documents,
embedder,
client=client,
namespace=NAMESPACE,
vector_key=VECTOR_KEY,
index_name=INDEX_NAME,
distance_strategy=MODEL_DISTANCE_CALC,
)
代码示例
使用向量搜索功能查找有关宇宙的语录。
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("auto-generated id:", doc.metadata["_id"])
print("author: ", doc.metadata["author"])
print(doc.page_content)
print("~~~~~~~~~~~~~~~~~~~~\n")
print_documents(docs)
常见问题和解决方案
-
连接问题:在某些地区,可能需要使用API代理服务来提高访问稳定性。
-
向量嵌入不准确:确保模型版本和参数设置正确,必要时可以尝试其他嵌入模型。
总结和进一步学习资源
通过这篇文章,您可以看到如何将Aerospike与LangChain集成以执行高效的向量搜索。有关更多信息,请参阅下面的参考资料。
参考资料
结束语:'如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!'
---END---