Upstash 为开发人员提供无服务器数据库和消息收发 构建强大应用程序的平台,无需担心 关于大规模运行数据库的作复杂性。
Upstash 的一个显着优势是他们的数据库支持 HTTP,并且他们所有的 SDK 都使用 HTTP。 这意味着您可以在无服务器平台、边缘或任何不支持 TCP 连接的平台中运行它。
目前,LangChain 有两个 Upstash 集成可用: Upstash Vector 作为向量嵌入数据库,Upstash Redis 作为缓存和内存存储。
Upstash Vector
Upstash Vector 是一个无服务器向量数据库,可用于存储和查询向量。
安装
在 Upstash 控制台创建新的无服务器矢量数据库。 根据您的模型选择首选的距离指标和维度计数。
安装 Upstash Vector Python SDKpip install upstash-vector.
langchain 中的 Upstash Vector 集成是 Upstash Vector Python SDK 的包装器。这就是为什么upstash-vectorpackage 是必需的。
集成
创建一个UpstashVectorStore对象。
您还需要传入一个Embeddings对象,它可以将文本转换为矢量嵌入。
from langchain_community.vectorstores.upstash import UpstashVectorStore
import os
os.environ["UPSTASH_VECTOR_REST_URL"] = "<UPSTASH_VECTOR_REST_URL>"
os.environ["UPSTASH_VECTOR_REST_TOKEN"] = "<UPSTASH_VECTOR_REST_TOKEN>"
store = UpstashVectorStore(
embedding=embeddings
)
另一种方式UpstashVectorStore就是通过embedding=True.这是一个独特的
的特性UpstashVectorStore得益于 Upstash Vector 索引的能力
具有关联的嵌入模型。在此配置中,我们要插入的文档或
我们想要搜索的查询只是以文本形式发送到 Upstash Vector。在后台,
Upstash Vector 嵌入这些文本并使用这些嵌入执行请求。要使用此功能
功能,通过选择模型创建 Upstash Vector 索引,然后简单地将embedding=True:
from langchain_community.vectorstores.upstash import UpstashVectorStore
import os
os.environ["UPSTASH_VECTOR_REST_URL"] = "<UPSTASH_VECTOR_REST_URL>"
os.environ["UPSTASH_VECTOR_REST_TOKEN"] = "<UPSTASH_VECTOR_REST_TOKEN>"
store = UpstashVectorStore(
embedding=True
)
有关嵌入模型的更多详细信息,请参阅 Upstash Vector 文档。
命名空间
您可以使用命名空间对索引中的数据进行分区。当您想要查询大量数据,并且想要对数据进行分区以加快查询速度时,命名空间非常有用。使用命名空间时,不会对结果进行后筛选,这将使查询结果更加精确。
from langchain_community.vectorstores.upstash import UpstashVectorStore
import os
os.environ["UPSTASH_VECTOR_REST_URL"] = "<UPSTASH_VECTOR_REST_URL>"
os.environ["UPSTASH_VECTOR_REST_TOKEN"] = "<UPSTASH_VECTOR_REST_TOKEN>"
store = UpstashVectorStore(
embedding=embeddings
namespace="my_namespace"
)
插入矢量
from langchain.text_splitter import CharacterTextSplitter
from langchain_community.document_loaders import TextLoader
from langchain_openai import OpenAIEmbeddings
loader = TextLoader("../../modules/state_of_the_union.txt")
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)
# Create a new embeddings object
embeddings = OpenAIEmbeddings()
# Create a new UpstashVectorStore object
store = UpstashVectorStore(
embedding=embeddings
)
# Insert the document embeddings into the store
store.add_documents(docs)
插入文档时,首先使用Embeddings对象。
大多数嵌入模型可以一次嵌入多个文档,因此文档是并行批处理和嵌入的。
批处理的大小可以使用embedding_chunk_size参数。
然后,嵌入的向量将存储在 Upstash Vector 数据库中。发送时,多个向量将一起批处理以减少 HTTP 请求的数量。
批处理的大小可以使用batch_size参数。Upstash Vector 在免费套餐中每批次限制为 1000 个向量。
store.add_documents(
documents,
batch_size=100,
embedding_chunk_size=200
)
查询向量
可以使用文本查询或其他向量来查询向量。
返回的值是 Document 对象的列表。
result = store.similarity_search(
"The United States of America",
k=5
)
或者使用向量:
vector = embeddings.embed_query("Hello world")
result = store.similarity_search_by_vector(
vector,
k=5
)
搜索时,您还可以使用filter参数,该参数将允许您按元数据进行筛选:
result = store.similarity_search(
"The United States of America",
k=5,
filter="type = 'country'"
)
有关元数据筛选的更多详细信息,请参阅 Upstash Vector 文档。
删除矢量
向量可以通过其 ID 删除。
store.delete(["id1", "id2"])
获取有关商店的信息
您可以使用 info 函数获取有关数据库的信息,例如距离度量维度。
发生插入时,将对数据库进行索引。发生这种情况时,无法查询新的向量。pendingVectorCount表示当前正在编制索引的向量的数量。
info = store.info()
print(info)
# Output:
# {'vectorCount': 44, 'pendingVectorCount': 0, 'indexSize': 2642412, 'dimension': 1536, 'similarityFunction': 'COSINE'}
Upstash Redis
本页介绍如何将 Upstash Redis 与 LangChain 结合使用。
安装和设置
- Upstash Redis Python SDK 可以与
pip install upstash-redis - 可以在 Upstash 控制台上创建全球分布式、低延迟且高可用性的数据库
集成
所有 Upstash-LangChain 集成都基于upstash-redisPython SDK 被用作 LangChain 的包装器。
此 SDK 通过从控制台提供 UPSTASH_REDIS_REST_URL 和 UPSTASH_REDIS_REST_TOKEN 参数来利用 Upstash Redis DB。
缓存
Upstash Redis 可用作 LLM 提示和响应的缓存。
要导入此缓存:
from langchain.cache import UpstashRedisCache
要与您的 LLM 一起使用:
import langchain
from upstash_redis import Redis
URL = "<UPSTASH_REDIS_REST_URL>"
TOKEN = "<UPSTASH_REDIS_REST_TOKEN>"
langchain.llm_cache = UpstashRedisCache(redis_=Redis(url=URL, token=TOKEN))
存储
请参阅使用示例。
from langchain_community.chat_message_histories import (
UpstashRedisChatMessageHistory,
)