实战指南:使用Rockset结合LangChain实现向量存储与实时搜索

本文将指导您如何在LangChain中使用Rockset作为向量存储进行实时搜索和分析。Rockset是一款实时搜索和分析数据库,专为云环境而设计。其主要特性包括使用Converged Index™和向量嵌入高效存储,以支持低延迟、高并发的搜索查询。接下来,我们将通过一个详细的代码示例演示如何实现这一功能。

技术背景介绍

在处理文本数据时,形成良好的嵌入向量对提高查询效率至关重要。Rockset结合LangChain使用OpenAI的嵌入服务,使得复杂的搜索任务变得更加简单和高效。

核心原理解析

通过将文档转换为向量嵌入并存储在Rockset中,我们可以快速搜索与查询相似的内容。Rockset支持实时数据摄取和元数据过滤,从而保证最新的数据可以被有效查询。

代码实现演示

为了实现这一功能,您需要确保拥有Rockset账户和API密钥,并安装必要依赖包。

环境设置

  • 在Rockset控制台中创建一个集合,例如langchain_demo
  • 使用以下摄入转换标记您的嵌入字段:
    SELECT _input.* EXCEPT(_meta), 
    VECTOR_ENFORCE(_input.description_embedding, 1536, 'float') as description_embedding 
    FROM _input
    
  • 获得API密钥并安装Rockset Python客户端:
pip install --upgrade --quiet rockset

LangChain实现步骤

  1. 定义关键变量
import os
import rockset

ROCKSET_API_KEY = os.environ.get("ROCKSET_API_KEY")
ROCKSET_API_SERVER = rockset.Regions.usw2a1
rockset_client = rockset.RocksetClient(ROCKSET_API_SERVER, ROCKSET_API_KEY)

COLLECTION_NAME = "langchain_demo"
TEXT_KEY = "description"
EMBEDDING_KEY = "description_embedding"
  1. 准备文档
from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import Rockset
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import CharacterTextSplitter

loader = TextLoader("path/to/state_of_the_union.txt")
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)
  1. 插入文档
embeddings = OpenAIEmbeddings()

docsearch = Rockset(
    client=rockset_client,
    embeddings=embeddings,
    collection_name=COLLECTION_NAME,
    text_key=TEXT_KEY,
    embedding_key=EMBEDDING_KEY,
)

ids = docsearch.add_texts(
    texts=[d.page_content for d in docs],
    metadatas=[d.metadata for d in docs],
)
  1. 搜索相似文档
query = "What did the president say about Ketanji Brown Jackson"
output = docsearch.similarity_search_with_relevance_scores(
    query, 4, Rockset.DistanceFunction.COSINE_SIM
)
for d, dist in output:
    print(dist, d.metadata, d.page_content[:20] + "...")
  1. 带有过滤的搜索
output = docsearch.similarity_search_with_relevance_scores(
    query, 4, Rockset.DistanceFunction.COSINE_SIM, where_str="{} NOT LIKE '%citizens%'".format(TEXT_KEY)
)
for d, dist in output:
    print(dist, d.metadata, d.page_content[:20] + "...")
  1. 删除插入的文档(可选)
docsearch.delete_texts(ids)

应用场景分析

此解决方案适用于需要实时查询和分析的大规模文本数据应用场景,例如新闻监控、社交媒体分析或客户反馈评估。

实践建议

确保API密钥和访问权限的正确配置,慎重选择数据分片策略以最优化查询效率。

结束语:如果遇到问题欢迎在评论区交流。

—END—

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值