跳到主要內容
Open In ColabOpen on GitHub

Momento Vector Index (MVI)

MVI:最高效、最易於使用、無伺服器的向量索引,適用於您的資料。若要開始使用 MVI,只需註冊帳戶即可。無需處理基礎架構、管理伺服器或擔心擴展。MVI 是一項可自動擴展以滿足您需求的服務。

若要註冊並存取 MVI,請造訪 Momento Console

設定

安裝先決條件

您將需要

  • 用於與 MVI 互動的 momento 套件,以及
  • 用於與 OpenAI API 互動的 openai 套件。
  • 用於將文字符號化的 tiktoken 套件。
%pip install --upgrade --quiet  momento langchain-openai langchain-community tiktoken

輸入 API 金鑰

import getpass
import os

Momento:用於索引資料

造訪 Momento Console 以取得您的 API 金鑰。

if "MOMENTO_API_KEY" not in os.environ:
os.environ["MOMENTO_API_KEY"] = getpass.getpass("Momento API Key:")

OpenAI:用於文字嵌入

if "OPENAI_API_KEY" not in os.environ:
os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API Key:")

載入您的資料

在這裡,我們使用來自 Langchain 的範例資料集,即國情咨文演講。

首先,我們載入相關模組

from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import MomentoVectorIndex
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import CharacterTextSplitter

然後我們載入資料

loader = TextLoader("../../how_to/state_of_the_union.txt")
documents = loader.load()
len(documents)
1

請注意,資料是一個大型檔案,因此只有一個文件

len(documents[0].page_content)
38539

由於這是一個大型文字檔,我們將其分割成區塊以進行問答。這樣,使用者問題將從最相關的區塊中回答。

text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)
len(docs)
42

索引您的資料

索引您的資料就像實例化 MomentoVectorIndex 物件一樣簡單。在這裡,我們使用 from_documents helper 來實例化資料並建立索引

vector_db = MomentoVectorIndex.from_documents(
docs, OpenAIEmbeddings(), index_name="sotu"
)

這會使用您的 API 金鑰連線到 Momento Vector Index 服務,並為資料建立索引。如果索引之前不存在,此程序會為您建立索引。現在可以搜尋資料了。

查詢您的資料

直接針對索引提出問題

查詢資料最直接的方式是針對索引進行搜尋。我們可以按照以下方式使用 VectorStore API 執行此操作

query = "What did the president say about Ketanji Brown Jackson"
docs = vector_db.similarity_search(query)
docs[0].page_content
'Tonight. I call on the Senate to: Pass the Freedom to Vote Act. Pass the John Lewis Voting Rights Act. And while you’re at it, pass the Disclose Act so Americans can know who is funding our elections. \n\nTonight, I’d like to honor someone who has dedicated his life to serve this country: Justice Stephen Breyer—an Army veteran, Constitutional scholar, and retiring Justice of the United States Supreme Court. Justice Breyer, thank you for your service. \n\nOne of the most serious constitutional responsibilities a President has is nominating someone to serve on the United States Supreme Court. \n\nAnd I did that 4 days ago, when I nominated Circuit Court of Appeals Judge Ketanji Brown Jackson. One of our nation’s top legal minds, who will continue Justice Breyer’s legacy of excellence.'

雖然這確實包含有關 Ketanji Brown Jackson 的相關資訊,但我們沒有簡潔、人類可讀的答案。我們將在下一節中解決這個問題。

使用 LLM 產生流暢的答案

在 MVI 中索引資料後,我們可以與任何利用向量相似度搜尋的鏈結整合。在這裡,我們使用 RetrievalQA 鏈結來示範如何從索引資料中回答問題。

首先,我們載入相關模組

from langchain.chains import RetrievalQA
from langchain_openai import ChatOpenAI
API 參考:RetrievalQA | ChatOpenAI

然後我們實例化檢索 QA 鏈結

llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
qa_chain = RetrievalQA.from_chain_type(llm, retriever=vector_db.as_retriever())
qa_chain({"query": "What did the president say about Ketanji Brown Jackson?"})
{'query': 'What did the president say about Ketanji Brown Jackson?',
'result': "The President said that he nominated Circuit Court of Appeals Judge Ketanji Brown Jackson to serve on the United States Supreme Court. He described her as one of the nation's top legal minds and mentioned that she has received broad support from various groups, including the Fraternal Order of Police and former judges appointed by Democrats and Republicans."}

下一步

就這樣!您現在已為資料建立索引,並且可以使用 Momento Vector Index 查詢資料。您可以使用相同的索引,從任何支援向量相似度搜尋的鏈結查詢資料。

使用 Momento,您不僅可以為向量資料建立索引,還可以快取 API 呼叫並儲存聊天訊息歷史記錄。查看其他 Momento langchain 整合以瞭解更多資訊。

若要瞭解關於 Momento Vector Index 的更多資訊,請造訪 Momento 文件


此頁面是否對您有幫助?