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—