Typesense

Typesenseopen in new window 是一个开源的内存搜索引擎,您可以选择自行托管(self-hostopen in new window)或在 Typesense Cloudopen in new window 上运行。

Typesense专注于性能,通过将整个索引存储在内存中(并备份到磁盘),同时专注于提供开箱即用的开发者体验,简化可用选项并设置良好的默认值。

它还允许您将基于属性的过滤与向量查询结合在一起,以获取最相关的文档。

这个笔记本演示了如何将Typesense作为您的VectorStore使用。

让我们首先安装所需的依赖项:

!pip install typesense openapi-schema-pydantic openai tiktoken

我们想使用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 Typesense
from langchain.document_loaders import TextLoader

让我们导入我们的测试数据集:

loader = TextLoader('../../../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()
docsearch = Typesense.from_documents(docs,
                                     embeddings,
                                     typesense_client_params={
                                         'host': 'localhost',   # Use xxx.a1.typesense.net for Typesense Cloud
                                         'port': '8108',        # Use 443 for Typesense Cloud
                                         'protocol': 'http',    # Use https for Typesense Cloud
                                         'typesense_api_key': 'xyz',
                                         'typesense_collection_name': 'lang-chain'
                                     })

相似度搜索

query = "What did the president say about Ketanji Brown Jackson"
found_docs = docsearch.similarity_search(query)
print(found_docs[0].page_content)

Typesense作为Retriever

Typesense和其他向量存储一样,可以作为LangChain的Retriever使用,使用余弦相似度来进行检索。

retriever = docsearch.as_retriever()
retriever
query = "What did the president say about Ketanji Brown Jackson"
retriever.get_relevant_documents(query)[0]
Last Updated:
Contributors: 刘强