使用Typesense进行向量检索的实战指南

技术背景介绍

Typesense是一款开源的内存搜索引擎,旨在通过将整个索引存储于RAM中提高搜索性能,并同时在磁盘上备份。它专注于提供开箱即用的开发者体验,简化了可用选项并设置了合理的默认值。此外,Typesense还支持结合属性过滤和向量查询来检索最相关的文档,使其成为一个强大的向量存储(VectorStore)解决方案。本指南将向您展示如何使用Typesense作为向量存储进行文档检索。

核心原理解析

Typesense通过内存索引实现高效的检索性能,并支持多种搜索功能,例如全文检索、属性过滤和向量查询。向量查询通过结合OpenAI Embeddings,将文档和查询转化为向量表示,以计算文本之间的相似度(通常为余弦相似度),从而找到最相关的文档。

代码实现演示

首先,我们确保安装所需的依赖库:

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

然后,我们导入必要的库并配置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)

配置Typesense进行文档检索:

embeddings = OpenAIEmbeddings()

# 使用Typesense进行向量存储配置
docsearch = Typesense.from_documents(
    docs,
    embeddings,
    typesense_client_params={
        "host": "localhost",  # 使用 Typesense Cloud 时为 xxx.a1.typesense.net
        "port": "8108",       # Typesense Cloud 使用 443 端口
        "protocol": "http",   # Typesense Cloud 使用 https
        "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:

# 转换为Retriever
retriever = docsearch.as_retriever()

# 使用Retriever查询
response = retriever.invoke(query)[0]
print(response)

应用场景分析

Typesense适合在需要高性能和实时搜索的场景中使用,尤其是当需要结合全文检索和向量查询功能时。在电商、知识管理和信息检索等领域,Typesense能够快速响应复杂查询,提供准确结果。

实践建议

  1. 初始配置:在自托管环境中确保RAM足够大以支持索引存储,并根据响应时间和吞吐量需求合理设置缓存策略。
  2. 安全性:确保typesense_api_key的安全性,尤其是在生产环境下。
  3. 优化查询:结合业务需求调整chunk_sizechunk_overlap参数,以提高查询精度和速度。

如果遇到问题欢迎在评论区交流。
—END—

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值