Skip to main content
Open In ColabOpen on GitHub

Xata

Xata 是一个基于 PostgreSQL 的无服务器数据平台。它提供了一个用于与数据库交互的 Python SDK,以及一个用于管理数据的用户界面。 Xata 具有原生向量类型,可以添加到任何表中,并支持相似性搜索。LangChain 直接将向量插入到 Xata 中,并查询给定向量的最近邻居,因此您可以将所有 LangChain Embeddings 集成与 Xata 一起使用。

本笔记本指导您如何使用Xata作为VectorStore。

设置

创建一个数据库用作向量存储

Xata UI中创建一个新的数据库。你可以随意命名,在这个记事本中我们将使用langchain。 创建一个表,同样你可以随意命名,但我们将使用vectors。通过UI添加以下列:

  • content 类型为 "Text"。这用于存储 Document.pageContent 的值。
  • embedding 类型为 "Vector"。使用您计划使用的模型的维度。在本笔记本中,我们使用 OpenAI 嵌入,它有 1536 个维度。
  • source 类型为 "Text"。此示例将其用作元数据列。
  • 任何其他你想用作元数据的列。它们是从Document.metadata对象中填充的。例如,如果在Document.metadata对象中你有一个title属性,你可以在表中创建一个title列,它将会被填充。

首先安装我们的依赖项:

%pip install --upgrade --quiet  xata langchain-openai langchain-community tiktoken langchain

让我们将OpenAI密钥加载到环境中。如果您还没有密钥,您可以创建一个OpenAI账户并在此页面上创建一个密钥。

import getpass
import os

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

同样,我们需要获取Xata的环境变量。您可以通过访问您的账户设置来创建一个新的API密钥。要找到数据库URL,请转到您创建的数据库的设置页面。数据库URL应该类似于这样:https://demo-uni3q8.eu-west-1.xata.sh/db/langchain

api_key = getpass.getpass("Xata API key: ")
db_url = input("Xata database URL (copy it from your DB settings):")
from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores.xata import XataVectorStore
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import CharacterTextSplitter

创建Xata向量存储

让我们导入我们的测试数据集:

loader = TextLoader("../../how_to/state_of_the_union.txt")
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)

embeddings = OpenAIEmbeddings()

现在创建实际的向量存储,由Xata表支持。

vector_store = XataVectorStore.from_documents(
docs, embeddings, api_key=api_key, db_url=db_url, table_name="vectors"
)

运行上述命令后,如果您前往Xata UI,您应该会看到文档与其嵌入内容一起加载。 要使用已包含向量内容的现有Xata表,请初始化XataVectorStore构造函数:

vector_store = XataVectorStore(
api_key=api_key, db_url=db_url, embedding=embeddings, table_name="vectors"
)
query = "What did the president say about Ketanji Brown Jackson"
found_docs = vector_store.similarity_search(query)
print(found_docs)

带分数的相似性搜索(向量距离)

query = "What did the president say about Ketanji Brown Jackson"
result = vector_store.similarity_search_with_score(query)
for doc, score in result:
print(f"document={doc}, score={score}")

这个页面有帮助吗?