# 引言
在AI应用的潮流中,向量化数据的存储和查询成为了一项至关重要的需求。Timescale Vector作为PostgreSQL++,提供了一种高效的方式来存储和查询数十亿向量嵌入。本文旨在介绍如何使用Timescale Vector,结合示例代码,演示如何在PostgreSQL中进行自查询。
# 主要内容
## 什么是Timescale Vector?
Timescale Vector是为AI应用设计的PostgreSQL++。它扩展了`pgvector`,通过DiskANN算法提高了在十亿级向量上的相似性搜索性能,并支持基于时间的自动分区与索引。这使得开发者可以在一个数据库中存储关系数据、向量嵌入和时间序列数据。
### Timescale Vector的优势
- **高效的存储与查询**:支持数千亿向量嵌入的快速存储和查询。
- **内置SQL接口**:提供与关系型数据无缝集成的SQL查询接口。
- **企业级安全和高可用性**:基于PostgreSQL的坚实基础,支持企业级别的备份与复制、安全性和合规性。
## Timescale Vector的获取与安装
Timescale Vector目前在Timescale的云平台上可用,并为LangChain用户提供了90天的免费试用。
1. **注册并创建数据库**:在[Timescale网站](https://www.timescale.com)注册并创建一个新的Timescale Vector数据库。
2. **安装所需软件包**:
```shell
%pip install --upgrade --quiet lark
%pip install --upgrade --quiet timescale-vector
```
3. **获取服务URL**:使用以下代码从`.env`文件中读取Timescale服务URL。
```python
import os
from dotenv import find_dotenv, load_dotenv
_ = load_dotenv(find_dotenv())
TIMESCALE_SERVICE_URL = os.environ["TIMESCALE_SERVICE_URL"]
```
## 创建Timescale Vector向量存储
创建一个向量存储并用数据初始化。以下是一些示例电影数据:
```python
from langchain_community.vectorstores.timescalevector import TimescaleVector
from langchain_core.documents import Document
from langchain_openai import OpenAIEmbeddings
documents = [
Document(page_content="A bunch of scientists bring back dinosaurs and mayhem breaks loose", metadata={"year": 1993, "genre": "science fiction", "rating": 7.7}),
# 更多的文档...
]
embeddings = OpenAIEmbeddings() # OpenAI嵌入
vectorstore = TimescaleVector.from_documents(
embedding=embeddings,
documents=documents,
collection_name="langchain_self_query_demo",
service_url=TIMESCALE_SERVICE_URL # 使用API代理服务提高访问稳定性
)
实现自查询检索器
通过以下代码实现一个自查询检索器:
from langchain.chains.query_constructor.base import AttributeInfo
from langchain.retrievers.self_query.base import SelfQueryRetriever
from langchain_openai import OpenAI
metadata_field_info = [
AttributeInfo(name="genre", description="The genre of the movie", type="string or list[string]"),
AttributeInfo(name="year", description="The year the movie was released", type="integer"),
# 更多的字段...
]
llm = OpenAI(temperature=0)
retriever = SelfQueryRetriever.from_llm(
llm, vectorstore, "Brief summary of a movie", metadata_field_info, verbose=True
)
代码示例
运行以下代码以实际使用检索器进行查询:
results = retriever.invoke("What are some movies about dinosaurs")
for doc in results:
print(doc.page_content)
常见问题和解决方案
- 访问受限问题:由于某些地区的网络限制,建议使用API代理服务来提高访问的稳定性。
- 性能问题:确保数据库配置和索引设置优化以处理大量数据。
总结和进一步学习资源
Timescale Vector通过PostgreSQL中的向量化存储和查询,为AI应用提供了一种强大而高效的解决方案。若想深入了解,可以参阅以下资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---