Momento Vector Index (MVI)
MVI:最高效、最易用、无服务器的向量索引,适用于您的数据。要开始使用 MVI,只需注册一个帐户。无需处理基础设施、管理服务器或担心扩展。MVI 是一项自动扩展以满足您需求的服务。
要注册并访问 MVI,请访问 Momento 控制台。
设置 (Setup)
安装先决条件 (Install prerequisites)
你将需要 (You will need)
- 与 MVI 交互的
momento
包,以及 - 与 OpenAI API 交互的 openai 包。
- 用于分词文本的 tiktoken 包。
%pip install --upgrade --quiet momento langchain-openai langchain-community tiktoken
输入 API 密钥 (Enter API keys)
import getpass
import os
Momento:用于索引数据 (Momento: for indexing data)
访问 Momento 控制台 以获取您的 API 密钥。
if "MOMENTO_API_KEY" not in os.environ:
os.environ["MOMENTO_API_KEY"] = getpass.getpass("Momento API Key:")
OpenAI:用于文本嵌入 (OpenAI: for text embeddings)
if "OPENAI_API_KEY" not in os.environ:
os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API Key:")
加载你的数据 (Load your data)
在这里我们使用来自 Langchain 的示例数据集,即国情咨文演讲。
首先我们加载相关模块 (First we load relevant modules)
from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import MomentoVectorIndex
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import CharacterTextSplitter
然后我们加载数据 (Then we load the data)
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
索引你的数据 (Index your data)
索引你的数据就像实例化 MomentoVectorIndex
对象一样简单。在这里,我们使用 from_documents
助手来实例化和索引数据
vector_db = MomentoVectorIndex.from_documents(
docs, OpenAIEmbeddings(), index_name="sotu"
)
这使用您的 API 密钥连接到 Momento Vector Index 服务并索引数据。如果索引之前不存在,此过程会为您创建它。数据现在可搜索。
查询你的数据 (Query your data)
直接针对索引提问 (Ask a question directly against the 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 生成流畅的答案 (Use an LLM to generate fluent answers)
通过在 MVI 中索引的数据,我们可以与任何利用向量相似性搜索的链集成。在这里,我们使用 RetrievalQA
链来演示如何从索引数据中回答问题。
首先我们加载相关模块 (First we load the relevant modules)
from langchain.chains import RetrievalQA
from langchain_openai import ChatOpenAI
然后我们实例化检索 QA 链 (Then we instantiate the retrieval QA chain)
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."}
下一步 (Next Steps)
完成了!您现在已经索引了您的数据,并且可以使用 Momento Vector Index 查询它。您可以使用相同的索引从任何支持向量相似性搜索的链中查询您的数据。
使用 Momento,您不仅可以索引您的向量数据,还可以缓存您的 API 调用并存储您的聊天消息历史记录。查看其他 Momento langchain 集成以了解更多信息。
要了解有关 Momento Vector Index 的更多信息,请访问 Momento 文档。