跳到主要內容
Open on GitHub

Upstash 為開發人員提供無伺服器資料庫和訊息平台,讓他們建構強大的應用程式,而無需擔心大規模執行資料庫的營運複雜性。

Upstash 的一個顯著優勢是他們的資料庫支援 HTTP,並且他們所有的 SDK 都使用 HTTP。這表示您可以在無伺服器平台、邊緣或任何不支援 TCP 連線的平台上執行此功能。

目前,LangChain 提供兩種 Upstash 整合:Upstash Vector 作為向量嵌入資料庫,以及 Upstash Redis 作為快取和記憶體儲存。

Upstash Vector

Upstash Vector 是一種無伺服器向量資料庫,可用於儲存和查詢向量。

安裝

Upstash Console 建立新的無伺服器向量資料庫。根據您的模型選擇您偏好的距離度量和維度計數。

使用 pip install upstash-vector 安裝 Upstash Vector Python SDK。langchain 中的 Upstash Vector 整合是 Upstash Vector Python SDK 的包裝器。這就是為什麼需要 upstash-vector 套件的原因。

整合

使用 Upstash Console 中的憑證建立 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
)
API 參考:UpstashVectorStore

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
)
API 參考:UpstashVectorStore

如需嵌入模型的更多詳細資訊,請參閱 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"
)
API 參考:UpstashVectorStore

插入向量

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 Console 建立全球分散式、低延遲且高度可用的資料庫

整合

所有 Upstash-LangChain 整合都基於 upstash-redis Python SDK,用作 LangChain 的包裝器。此 SDK 透過從主控台提供 UPSTASH_REDIS_REST_URL 和 UPSTASH_REDIS_REST_TOKEN 參數來利用 Upstash Redis DB。

快取

Upstash Redis 可以用作 LLM 提示和回應的快取。

若要匯入此快取

from langchain.cache import UpstashRedisCache
API 參考: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,
)

此頁面是否對您有幫助?