Vald
Vald 是一個高度可擴展的分散式快速近似最近鄰 (ANN) 密集向量搜尋引擎。
這個筆記本展示了如何使用與 Vald
資料庫相關的功能。
要執行此筆記本,您需要一個正在運行的 Vald 集群。 請查看Get Started 以獲取更多資訊。
請參閱安裝說明。
%pip install --upgrade --quiet vald-client-python langchain-community
基本範例
from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import Vald
from langchain_huggingface import HuggingFaceEmbeddings
from langchain_text_splitters import CharacterTextSplitter
raw_documents = TextLoader("state_of_the_union.txt").load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
documents = text_splitter.split_documents(raw_documents)
model_name = "sentence-transformers/all-mpnet-base-v2"
embeddings = HuggingFaceEmbeddings(model_name=model_name)
db = Vald.from_documents(documents, embeddings, host="localhost", port=8080)
query = "What did the president say about Ketanji Brown Jackson"
docs = db.similarity_search(query)
docs[0].page_content
依向量進行相似性搜尋
embedding_vector = embeddings.embed_query(query)
docs = db.similarity_search_by_vector(embedding_vector)
docs[0].page_content
帶有分數的相似性搜尋
docs_and_scores = db.similarity_search_with_score(query)
docs_and_scores[0]
最大邊際相關性搜尋 (MMR)
除了在檢索器物件中使用相似性搜尋之外,您還可以將 mmr
用作檢索器。
retriever = db.as_retriever(search_type="mmr")
retriever.invoke(query)
或直接使用 max_marginal_relevance_search
db.max_marginal_relevance_search(query, k=2, fetch_k=10)
使用安全連線的範例
為了運行此筆記本,有必要運行具有安全連線的 Vald 集群。
這是一個 Vald 集群的範例,它使用 Athenz 身份驗證,具有以下配置。
ingress(TLS) -> authorization-proxy(在 grpc 元資料中檢查 athenz-role-auth) -> vald-lb-gateway
import grpc
with open("test_root_cacert.crt", "rb") as root:
credentials = grpc.ssl_channel_credentials(root_certificates=root.read())
# Refresh is required for server use
with open(".ztoken", "rb") as ztoken:
token = ztoken.read().strip()
metadata = [(b"athenz-role-auth", token)]
from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import Vald
from langchain_huggingface import HuggingFaceEmbeddings
from langchain_text_splitters import CharacterTextSplitter
raw_documents = TextLoader("state_of_the_union.txt").load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
documents = text_splitter.split_documents(raw_documents)
model_name = "sentence-transformers/all-mpnet-base-v2"
embeddings = HuggingFaceEmbeddings(model_name=model_name)
db = Vald.from_documents(
documents,
embeddings,
host="localhost",
port=443,
grpc_use_secure=True,
grpc_credentials=credentials,
grpc_metadata=metadata,
)
query = "What did the president say about Ketanji Brown Jackson"
docs = db.similarity_search(query, grpc_metadata=metadata)
docs[0].page_content
依向量進行相似性搜尋
embedding_vector = embeddings.embed_query(query)
docs = db.similarity_search_by_vector(embedding_vector, grpc_metadata=metadata)
docs[0].page_content
帶有分數的相似性搜尋
docs_and_scores = db.similarity_search_with_score(query, grpc_metadata=metadata)
docs_and_scores[0]
最大邊際相關性搜尋 (MMR)
retriever = db.as_retriever(
search_kwargs={"search_type": "mmr", "grpc_metadata": metadata}
)
retriever.invoke(query, grpc_metadata=metadata)
或者
db.max_marginal_relevance_search(query, k=2, fetch_k=10, grpc_metadata=metadata)