Meilisearch
Meilisearch 是一個開源、極速且高度相關的搜尋引擎。 它具有出色的預設值,可協助開發人員建立靈敏的搜尋體驗。
您可以自行託管 Meilisearch 或在 Meilisearch Cloud 上運行。
Meilisearch v1.3 支援向量搜尋。 本頁面將指導您如何整合 Meilisearch 作為向量儲存,並使用它來執行向量搜尋。
您需要安裝 langchain-community
,方法是使用 pip install -qU langchain-community
以使用此整合
設定 (Setup)
啟動 Meilisearch 實例 (Launching a Meilisearch instance)
您需要一個正在運行的 Meilisearch 實例才能用作向量儲存。 您可以在本機運行 Meilisearch 或建立一個 Meilisearch Cloud 帳戶。
從 Meilisearch v1.3 開始,向量儲存是一項實驗性功能。 啟動 Meilisearch 實例後,您需要啟用向量儲存。 對於自託管的 Meilisearch,請閱讀有關啟用實驗性功能的文件。 在 Meilisearch Cloud 上,透過您的專案設定頁面啟用向量儲存。
現在您應該有一個啟用了向量儲存的 Meilisearch 實例。 🎉
憑證 (Credentials)
為了與您的 Meilisearch 實例互動,Meilisearch SDK 需要主機 (您的實例的 URL) 和一個 API 金鑰。
主機 (Host)
- 在本機,預設主機是
localhost:7700
- 在 Meilisearch Cloud 上,在您的專案設定頁面中找到主機
API 金鑰 (API keys)
Meilisearch 實例為您提供了三個開箱即用的 API 金鑰
- 一個
MASTER KEY
— 它應該只用於建立您的 Meilisearch 實例 - 一個
ADMIN KEY
— 僅在伺服器端使用它來更新您的資料庫及其設定 - 一個
SEARCH KEY
— 您可以在前端應用程式中安全地共享的金鑰
您可以根據需要建立額外的 API 金鑰。
安裝相依性 (Installing dependencies)
本指南使用 Meilisearch Python SDK。 您可以通過運行以下命令來安裝它
%pip install --upgrade --quiet meilisearch
有關更多資訊,請參閱 Meilisearch Python SDK 文件。
範例 (Examples)
有多種方法可以初始化 Meilisearch 向量儲存:提供 Meilisearch 客戶端或根據需要提供 *URL* 和 *API 金鑰*。 在我們的範例中,憑證將從環境中載入。
您可以使用 os
和 getpass
使環境變數在您的 Notebook 環境中可用。 您可以將此技術用於以下所有範例。
import getpass
import os
if "MEILI_HTTP_ADDR" not in os.environ:
os.environ["MEILI_HTTP_ADDR"] = getpass.getpass(
"Meilisearch HTTP address and port:"
)
if "MEILI_MASTER_KEY" not in os.environ:
os.environ["MEILI_MASTER_KEY"] = getpass.getpass("Meilisearch API Key:")
我們想要使用 OpenAIEmbeddings,所以我們必須取得 OpenAI API 金鑰。
if "OPENAI_API_KEY" not in os.environ:
os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API Key:")
新增文字和嵌入 (Adding text and embeddings)
此範例將文字新增到 Meilisearch 向量資料庫,而無需初始化 Meilisearch 向量儲存。
from langchain_community.vectorstores import Meilisearch
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import CharacterTextSplitter
embeddings = OpenAIEmbeddings()
embedders = {
"default": {
"source": "userProvided",
"dimensions": 1536,
}
}
embedder_name = "default"
with open("../../how_to/state_of_the_union.txt") as f:
state_of_the_union = f.read()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
texts = text_splitter.split_text(state_of_the_union)
# Use Meilisearch vector store to store texts & associated embeddings as vector
vector_store = Meilisearch.from_texts(
texts=texts, embedding=embeddings, embedders=embedders, embedder_name=embedder_name
)
在幕後,Meilisearch 會將文字轉換為多個向量。 這將使我們得到與以下範例相同的結果。
新增文件和嵌入 (Adding documents and embeddings)
在本範例中,我們將使用 Langchain TextSplitter 將文字分割成多個文件。 然後,我們將儲存這些文件以及它們的嵌入。
from langchain_community.document_loaders import TextLoader
# Load text
loader = TextLoader("../../how_to/state_of_the_union.txt")
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
# Create documents
docs = text_splitter.split_documents(documents)
# Import documents & embeddings in the vector store
vector_store = Meilisearch.from_documents(
documents=documents,
embedding=embeddings,
embedders=embedders,
embedder_name=embedder_name,
)
# Search in our vector store
query = "What did the president say about Ketanji Brown Jackson"
docs = vector_store.similarity_search(query, embedder_name=embedder_name)
print(docs[0].page_content)
透過建立 Meilisearch Vectorstore 新增文件 (Add documents by creating a Meilisearch Vectorstore)
在這種方法中,我們建立一個向量儲存物件並向其新增文件。
import meilisearch
from langchain_community.vectorstores import Meilisearch
client = meilisearch.Client(url="http://127.0.0.1:7700", api_key="***")
vector_store = Meilisearch(
embedding=embeddings,
embedders=embedders,
client=client,
index_name="langchain_demo",
text_key="text",
)
vector_store.add_documents(documents)
使用分數的相似性搜尋 (Similarity Search with score)
這個特定的方法允許您返回文件以及查詢與這些文件之間的距離分數。embedder_name
是用於語義搜尋的嵌入器名稱,預設為 "default"。
docs_and_scores = vector_store.similarity_search_with_score(
query, embedder_name=embedder_name
)
docs_and_scores[0]
透過向量進行相似度搜尋
embedder_name
是用於語義搜尋的嵌入器名稱,預設為 "default"。
embedding_vector = embeddings.embed_query(query)
docs_and_scores = vector_store.similarity_search_by_vector(
embedding_vector, embedder_name=embedder_name
)
docs_and_scores[0]
其他資源
文件
開源儲存庫