使用USearch进行高效的向量搜索

USearch是一款小型且快速的单文件向量搜索引擎,功能与FAISS类似,是高性能向量搜索引擎领域的一项重要标准。两者都采用HNSW算法,但在设计原则上存在显著差异。USearch旨在用户定义的度量标准以及减少依赖项的情况下,保持性能不变。本文将展示如何集成OpenAIEmbeddings与USearch进行向量搜索。

核心原理解析

USearch的设计原则是精简和广泛兼容,它通过减少复杂性和依赖项来实现性能的最大化。与FAISS类似,USearch使用HNSW算法进行近似最近邻搜索,支持用户自定义的度量标准,使其在不同场景下更加灵活和适应性强。

代码实现演示

首先,我们需要安装相关库:

%pip install --upgrade --quiet usearch langchain-community

然后,我们使用OpenAIEmbeddings,需要获取OpenAI API Key:

import getpass
import os

os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API Key:")

接下来,我们加载文档,并将其分割为合理大小的片段:

from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import CharacterTextSplitter

loader = TextLoader("../../../extras/modules/state_of_the_union.txt")
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)

我们选择使用OpenAIEmbeddings进行向量化:

from langchain_openai import OpenAIEmbeddings

embeddings = OpenAIEmbeddings()

生成USearch数据库,并进行查询:

from langchain_community.vectorstores import USearch

db = USearch.from_documents(docs, embeddings)

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

print(docs[0].page_content)

如果需要返回查询的距离分数,可以使用similarity_search_with_score函数:

docs_and_scores = db.similarity_search_with_score(query)

docs_and_scores[0]

应用场景分析

USearch适用于资源受限的环境中对向量搜索有高性能要求的场景,例如嵌入式设备上执行文本搜索和匹配任务。其简洁的设计使其可以轻松集成到各种应用程序中。

实践建议

在使用USearch进行向量搜索时,建议在设置参数时根据实际需求调整chunk_size和chunk_overlap,以最佳地利用资源和搜索性能。如果在不同负载下出现性能瓶颈,可以考虑使用更专业的OpenAIEmbeddings来提升向量化效果。

如果遇到问题欢迎在评论区交流。
—END—

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值