跳到主要内容
Open In ColabOpen on GitHub

Xata

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

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

设置

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

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

  • 类型为“文本”的 content。这用于存储 Document.pageContent 值。
  • 类型为“向量”的 embedding。使用您计划使用的模型使用的维度。在本笔记本中,我们使用 OpenAI 嵌入,它有 1536 个维度。
  • 类型为“文本”的 source。在此示例中,这用作元数据列。
  • 您想要用作元数据的任何其他列。它们从 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}")

此页面是否有帮助?