[使用Rockset实现高效实时搜索和分析:LangChain教程]

64 阅读3分钟
# 使用Rockset实现高效实时搜索和分析:LangChain教程

## 引言

在现代数据驱动的世界中,即时获取信息和进行实时分析变得至关重要。Rockset是一个专为云设计的实时搜索和分析数据库,允许用户处理大规模低延迟、高并发的搜索查询。本指南将向您展示如何在LangChain中将Rockset用作向量存储,帮助您实现高效的实时数据处理。

## 主要内容

### 1. 环境设置

首先确保您已拥有一个Rockset账户和API密钥。您还需要安装`langchain-community`包,以便在您的Python环境中使用此集成:

```bash
pip install -qU langchain-community

在Rockset控制台中,创建一个新的集合(Collection),在本示例中我们命名为langchain_demo

配置输入转换

配置以下输入转换以优化嵌入字段的性能和存储:

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

创建集合后,从控制台获取API密钥。在本示例中,假设您使用的是Oregon(us-west-2)区域。

接下来,安装rockset-python-client,使LangChain可以直接与Rockset通信:

pip install --upgrade --quiet rockset

2. 定义关键变量

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"

3. 准备文档

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_text_file/state_of_the_union.txt")
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)

4. 插入文档

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

5. 搜索相似文档

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] + "...")

6. 使用过滤器进行搜索

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] + "...")

7. 删除插入的文档

# 使用API代理服务提高访问稳定性
docsearch.delete_texts(ids)

常见问题和解决方案

  1. API访问受限:由于某些地区的网络限制,建议使用API代理服务以提高对Rockset API的稳定访问。

  2. 环境变量未设置:确保在运行代码前设置并验证所有需要的环境变量,例如ROCKSET_API_KEYOPENAI_API_KEY

总结和进一步学习资源

本文介绍了如何利用Rockset在LangChain中实现高效的实时数据存储和检索,通过使用OpenAI嵌入,我们能够进行高效的文档相似度搜索。有关更深入的学习和指导,可以参考以下资源:

参考资料

  • Rockset官方文档
  • LangChain社区文档
  • OpenAI API文档

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

---END---