Skip to main content

USearch

USearch是一个更小更快的单文件向量搜索引擎

USearch的基本功能与FAISS相同,如果您曾经研究过近似最近邻搜索,那么界面应该会很熟悉。FAISS是一个被广泛认可的高性能向量搜索引擎标准。USearch和FAISS都使用相同的HNSW算法,但在设计原则上有很大的区别。USearch紧凑且广泛兼容,不会牺牲性能,主要关注用户定义的度量和较少的依赖项。

pip install usearch

我们想要使用OpenAIEmbeddings,所以我们需要获取OpenAI API密钥。

import os
import getpass

os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API Key:")
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import USearch
from langchain.document_loaders import TextLoader
from langchain.document_loaders import TextLoader

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)

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)
    今晚。我呼吁参议院:通过自由投票法案。通过约翰·刘易斯投票权法案。而且,趁机通过披露法案,这样美国人就可以知道谁在资助我们的选举。

今晚,我想向一个致力于为这个国家服务的人表示敬意:司法部长斯蒂芬·布雷耶——一位陆军退伍军人、宪法学者和即将退休的美国最高法院法官。布雷耶法官,感谢您的服务。

总统最重要的宪法责任之一是提名人选担任美国最高法院法官。

我在4天前做到了这一点,当时我提名了巡回上诉法院法官Ketanji Brown Jackson。她是我们国家最顶尖的法律智慧之一,将继续布雷耶法官的卓越传统。

带有分数的相似性搜索

similarity_search_with_score方法允许您不仅返回文档,还返回查询与文档之间的距离分数。返回的距离分数是L2距离。因此,得分越低越好。

docs_and_scores = db.similarity_search_with_score(query)
docs_and_scores[0]
    (Document(page_content='今晚。我呼吁参议院:通过自由投票法案。通过约翰·刘易斯投票权法案。而且,趁机通过披露法案,这样美国人就可以知道谁在资助我们的选举。\n\n今晚,我想向一个致力于为这个国家服务的人表示敬意:司法部长斯蒂芬·布雷耶——一位陆军退伍军人、宪法学者和即将退休的美国最高法院法官。布雷耶法官,感谢您的服务。\n\n总统最重要的宪法责任之一是提名人选担任美国最高法院法官。\n\n我在4天前做到了这一点,当时我提名了巡回上诉法院法官Ketanji Brown Jackson。她是我们国家最顶尖的法律智慧之一,将继续布雷耶法官的卓越传统。', metadata={'source': '../../../extras/modules/state_of_the_union.txt'}),
0.1845687)